| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433 |
- /* -------------------------- (C) COPYRIGHT 2022 Fortiortech ShenZhen ---------------------------*/
- /**
- * @copyright (C) COPYRIGHT 2022 Fortiortech Shenzhen
- * @file xxx.c
- * @author Fortiortech Appliction Team
- * @since Create:2022-07-14
- * @date Last modify:2022-07-14
- * @note Last modify author is Leo.li
- * @brief
- */
- /* Includes -------------------------------------------------------------------------------------*/
- #include <FU68xx_5.h>
- #include <Myproject.h>
- uint8 SW1_Flag = 0;
- uint8 SW2_Flag = 0;
- uint8 SW2_Flag2 = 0;
- uint8 SW3_Flag = 0;
- uint8 Flag_Key1Value = 0; //档位变换顺序
- uint8 Flag_Key2Value = 0;
- /* Private variables ----------------------------------------------------------------------------*/
- KeyScanParam_TypeDef xdata KS;
- /* -------------------------------------------------------------------------------------------------
- Function Name : void KeyInit(void)
- Description : 按键参数初始化
- Input : 无
- Output : 无
- -------------------------------------------------------------------------------------------------*/
- void KeyInit(void)
- {
- uint8 i = 0;
- uint8 Check_code = 0; //写入数值为Write_Lenght,最后一位为校验位0xFF
- uint16 ReadInfor_Addr = 0; //读取信息地址
- KS.Key1Value = 0x01;
- KS.Key2Value = 0x40;
- KS.Key3Value = 0x00;
- KS.KeyValuetotal = KS.Key1Value ^ KS.Key2Value ^ KS.Key3Value;
- /*----- 获取写入首地址 -----*/
- // FlashData.WriteAddress = GetWrite_Black_Addr(START_WriteADDRESS, Write_Lenght);
-
- if (FlashData.WriteAddress > START_WriteADDRESS)
- {
- /*----- 获取读取数值首地址 -----*/
- FlashData.ReadAddress = FlashData.WriteAddress - Write_Lenght;
-
- while ((FlashData.WriteAddress > START_WriteADDRESS) && (Check_code != Verify_Ture))
- {
- ReadInfor_Addr = FlashData.ReadAddress + Verify_Bit;
- Check_code = *(uint8 code *)(ReadInfor_Addr);
-
- if (Check_code == Verify_Ture)
- {
- /*----- 读取数值到FlashData.ReadValue -----*/
- ReadFromFlash(FlashData.ReadAddress, Write_Lenght, FlashData.ReadValue);
- KS.KeyValuetotal = FlashData.ReadValue[0]; //有数值直接读回上次保存的数值
- }
- else
- {
- FlashData.ReadAddress = FlashData.ReadAddress - Write_Lenght;
- }
- }
- }
- else
- {
- /*----- 获取读取数值首地址 -----*/
- FlashData.ReadAddress = FlashData.WriteAddress;
- }
-
- /*Flash写一个扇区 2/3 区域后开始尝试擦写*/
- if (FlashData.WriteAddress >= START_WriteADDRESS + 0x060) //
- {
- for (i = 0; i < Write_Lenght; i++)
- {
- FlashData.WriteValue[i] = FlashData.ReadValue[i];
- }
- FlashData.Flag_FlashErase = 1;
- }
-
- KS.Key1Value = KS.KeyValuetotal & 0x0F;
- KS.Key2Value = KS.KeyValuetotal & 0x70;
- KS.Key3Value = 0x00;
- KS.OldKeyValuetotal = 0;
- KS.ChangeKeyFlg = 0;
- KS.Key1PressCnt = 0;
- KS.TwoCarrierCnt=0;
- User.ScrOnZeroFlag=0;
- User.ScrOnZeroCnt=0;
- }
- /* -------------------------------------------------------------------------------------------------
- Function Name : uint8 KeyValue(void)
- Description : 功能函数,获取按键值,选择返回键位值还是管脚电平KeyValue
- Input : 无
- Output : 键位值或者管脚电平KeyValue
- -------------------------------------------------------------------------------------------------*/
- int KeyValue(void)
- {
- /* SW1 Scan */
- if ((KS.KeyADCValue > 10922) && (KS.KeyADCValue < 19000))
- {
- if (SW1_Flag == 0)
- {
- KS.Key1PressCnt ++;
-
- if (KS.Key1PressCnt >= KeyFilterTime)
- {
- KS.Key1PressCnt = KeyFilterTime;
- SW1_Flag = 1;
- SW2_Flag = 0;
- SW3_Flag = 0;
-
- if ((KS.Key1Value < 0x08) && (Flag_Key1Value == 0))
- {
- KS.Key1Value = KS.Key1Value << 1;
- }
- else if ((KS.Key1Value > 0x01) && (Flag_Key1Value == 1))
- {
- KS.Key1Value = KS.Key1Value >> 1;
- }
- else if (KS.Key1Value == 0x08)
- {
- Flag_Key1Value = 1;
- KS.Key1Value = KS.Key1Value >> 1;
- }
- else if (KS.Key1Value == 0x01)
- {
- Flag_Key1Value = 0;
- KS.Key1Value = KS.Key1Value << 1;
- }
- else
- {
- Flag_Key1Value = 0;
- KS.Key1Value = 0x01;
- }
- }
- }
- else if (SW1_Flag == 1)
- {
- KS.Key1Value = KS.Key1Value ;
- }
- else
- { SW1_Flag = 0; }
- }
- /* SW2 Scan */
- else if ((KS.KeyADCValue >= 0) && (KS.KeyADCValue < 10922))
- {
- if (SW2_Flag == 0)
- {
- KS.Key2PressCnt ++;
-
- if (KS.Key2PressCnt >= KeyFilterTime)
- {
- KS.Key2PressCnt = KeyFilterTime;
- SW2_Flag = 1;
- SW1_Flag = 0;
- SW3_Flag = 0;
-
- if ((KS.Key2Value < 0x40) && (Flag_Key2Value == 0))
- {
- KS.Key2Value = KS.Key2Value << 1;
- }
- else if ((KS.Key2Value > 0x10) && (Flag_Key2Value == 1))
- {
- KS.Key2Value = KS.Key2Value >> 1;
- }
- else if (KS.Key2Value == 0x40)
- {
- Flag_Key2Value = 1;
- KS.Key2Value = KS.Key2Value >> 1;
- }
- else if (KS.Key2Value == 0x10)
- {
- Flag_Key2Value = 0;
- KS.Key2Value = KS.Key2Value << 1;
- }
- else
- {
- Flag_Key2Value = 0;
- KS.Key2Value = 0x20;
- }
- }
- }
- else if (SW2_Flag == 1)
- {
- KS.Key2Value = KS.Key2Value ;
- }
- else
- { SW2_Flag = 0; }
- }
- /* SW3 Scan */
- else if ((KS.KeyADCValue > 19000) && (KS.KeyADCValue < 25000))
- {
- KS.Key3releaseCnt = 0;
-
- if (KS.Key3PressCnt < KeyFilterTime * 2 + 10)
- {
- KS.Key3PressCnt++;
- }
-
- if (SW3_Flag == 0)
- {
- if (KS.Key3PressCnt >= KeyFilterTime * 2)
- {
- KS.Key3PressCnt = KeyFilterTime * 2;
- SW3_Flag = 1;
- SW1_Flag = 0;
- SW2_Flag = 0;
- KS.Key3Value = 0x80;
- }
- }
- else if (SW3_Flag == 1)
- {
- KS.Key3Value = KS.Key3Value ;
- }
- }
- else
- {
- KS.Key2PressCnt --;
- KS.Key1PressCnt --;
- KS.Key3PressCnt = 0;
-
- if (KS.Key3releaseCnt < 100)
- { KS.Key3releaseCnt++; }
-
- if ((KS.Key2PressCnt <= 0) && (KS.Key1PressCnt <= 0) && (KS.Key3releaseCnt >= 80))
- {
- SW3_Flag = 0;
- SW1_Flag = 0;
- SW2_Flag = 0;
- }
-
- if (KS.Key2PressCnt <= 0)
- {
- KS.Key2PressCnt = 1;
- }
-
- if (KS.Key1PressCnt <= 0)
- {
- KS.Key1PressCnt = 1;
- }
-
- if (KS.Key3releaseCnt >= 80)
- {
- KS.Key3Value = 0x00;
- }
- }
-
- return (KS.Key1Value ^ KS.Key2Value ^ KS.Key3Value);
- }
- /* -------------------------------------------------------------------------------------------------
- Function Name : uint8 KeyValue(void)
- Description : 功能函数,获取按键值,选择返回键位值还是管脚电平KeyValue
- Input : 无
- Output : 键位值或者管脚电平KeyValue
- -------------------------------------------------------------------------------------------------*/
- int KeyValue1(void)
- {
- /* SW1 温度 */
- if ((KS.KeyADCValue > 14000) && (KS.KeyADCValue < 18000))
- {
- if (SW1_Flag == 0)
- {
- KS.Key1PressCnt ++;
-
- if (KS.Key1PressCnt >= KeyFilterTime)
- {
- KS.Key1PressCnt = KeyFilterTime;
- SW1_Flag = 1;
- SW2_Flag = 0;
- SW3_Flag = 0;
- SW2_Flag2 = 0;
-
- if ((KS.Key1Value < 0x08) && (Flag_Key1Value == 0))
- {
- KS.Key1Value = KS.Key1Value << 1;
- }
- else if ((KS.Key1Value > 0x01) && (Flag_Key1Value == 1))
- {
- KS.Key1Value = KS.Key1Value >> 1;
- }
- else if (KS.Key1Value == 0x08)
- {
- Flag_Key1Value = 1;
- KS.Key1Value = KS.Key1Value >> 1;
- }
- else if (KS.Key1Value == 0x01)
- {
- Flag_Key1Value = 0;
- KS.Key1Value = KS.Key1Value << 1;
- }
- else
- {
- Flag_Key1Value = 0;
- KS.Key1Value = 0x01;
- }
- }
- }
- else if (SW1_Flag == 1)
- {
- KS.Key1Value = KS.Key1Value ;
- }
- else
- { SW1_Flag = 0; }
- }
- /* SW2 风速2 */
- else if ((KS.KeyADCValue > 20000) && (KS.KeyADCValue < 26000))
- {
- if (SW2_Flag == 0)
- {
- KS.Key2PressCnt ++;
-
- if (KS.Key2PressCnt >= KeyFilterTime)
- {
- KS.Key2PressCnt = KeyFilterTime;
- SW2_Flag = 1;
- SW1_Flag = 0;
- SW3_Flag = 0;
- SW2_Flag2 = 0;
- KS.Key2Value = 0x20;
- }
- }
- else if (SW2_Flag == 1)
- {
- KS.Key2Value = KS.Key2Value ;
- }
- else
- { SW2_Flag = 0; }
- }
- else
- {
- if (KS.Key2PressCnt > 0)
- {
- KS.Key2PressCnt --;
- }
-
- if (KS.Key1PressCnt > 0)
- {
- KS.Key1PressCnt --;
- }
- KS.Key3PressCnt = 0;
-
- if (KS.Key3releaseCnt < 100)
- { KS.Key3releaseCnt++; }
-
- if ((KS.Key2PressCnt <= 0) && (KS.Key1PressCnt <= 0) && (KS.Key3releaseCnt >= 80))
- {
- SW3_Flag = 0;
- SW1_Flag = 0;
- SW2_Flag = 0;
- }
-
-
- if (KS.Key3releaseCnt >= 80)
- {
- KS.Key3Value = 0x00;
- }
-
-
- /* SW2 风速1 */
- if (KS.KeyADCValue > 30000)
- {
- if (SW2_Flag2 == 0)
- {
- KS.Key2PressCnt2++;
-
- if (KS.Key2PressCnt2 >= KeyFilterTime)
- {
- KS.Key2PressCnt2 = KeyFilterTime;
- SW2_Flag2 = 1;
- SW2_Flag = 0;
- SW1_Flag = 0;
- SW3_Flag = 0;
- KS.Key2Value = 0x10;
- }
- }
- else if (SW2_Flag2 == 1)
- {
- KS.Key2Value = KS.Key2Value ;
- }
- else
- { SW2_Flag2 = 0; }
- }
- }
-
- return (KS.Key1Value ^ KS.Key2Value ^ KS.Key3Value);
- }
- /* -------------------------------------------------------------------------------------------------
- Function Name : void KeyScan(void)
- Description : 功能函数,按键扫描,按键触发传递出按键命令
- Input : 无
- Output : 无
- -------------------------------------------------------------------------------------------------*/
- void KeyScan(void)
- {
- KS.OldKeyValuetotal = KS.KeyValuetotal;
-
- #if (SwitchMode == HighVoltageSwitch)
- {
- KS.KeyValuetotal = KeyValue1();
- }
- #elif (SwitchMode == LowVoltageSwitch)
- {
- KS.KeyValuetotal = KeyValue();
- }
- #endif
-
- if (KS.OldKeyValuetotal != KS.KeyValuetotal)
- {
- if ((mcState == mcRun))
- {
- KS.ChangeKeyFlg = 1;
- }
- }
- }
|