|
本帖最后由 踮起腳摘蘋果 于 2020-3-20 10:58 編輯
合泰觸控BS83B08C,短按用編碼方式,把編碼發(fā)給STM32F103主控端去解碼,主控端對(duì)短按按鍵的解碼已經(jīng)解好,比如合泰觸控控制3個(gè)按鍵,KEY1的碼值是0XCC => 1100 1100,KEY2的碼值是0XBB=>1011 1011 ,KEY3的碼值是0XAA=>1010 1010
現(xiàn)在單鍵長(zhǎng)按10s,結(jié)果時(shí)間大概在長(zhǎng)按5s左右松開手,主控端的計(jì)時(shí)變量仍然在計(jì)時(shí),直到記到10s才結(jié)束。覺得這個(gè)問題并不是STM32F103主控端,而是在BS83B08C觸控端,而且在示波器上面雙鍵一前一后長(zhǎng)按,只有先按下的那一路脈沖,后按下的脈沖沒有;雙鍵長(zhǎng)按,示波器上兩路波形都沒有。現(xiàn)在合泰觸控的程序短按保持編碼方式,長(zhǎng)按如何改成用持續(xù)高低電平方式觸發(fā)?- #include <BS83B08C.H>
-
- #include "USER_PROGRAM.H"
- unsigned char child_start_tick = 0,hot_start_tick = 0,ColdStartTick = 0;
- unsigned char child_end_tick = 0,hot_end_tick = 0,ColdEndTick = 0;
- static unsigned char child_pulse_flag = 0,hot_pulse_flag = 0,ColdPulseFlag = 0;
- static unsigned char child_start_flag = 1,hot_start_flag = 1,ColdStartFlag = 1;
- static unsigned char child_end_flag = 0,hot_end_flag = 0,ColdEndFlag = 0;
- static unsigned char reset_flag = 0;
-
- //延時(shí)函數(shù)
- void delay_ms(int times)
- {
- int i,j;
- for(j=times;j>0;j--)
- {
- for(i=1000;i>0;i--);
- }
- }
-
- typedef union BYTEBITSDEF
- {
- unsigned char uc;
- struct
- {
- unsigned char BIT0:1;
- unsigned char BIT1:1;
- unsigned char BIT2:1;
- unsigned char BIT3:1;
- unsigned char BIT4:1;
- unsigned char BIT5:1;
- unsigned char BIT6:1;
- unsigned char BIT7:1;
- } b;
- } TYPEBYTEBITS;
-
- TYPEBYTEBITS key_max[2];
-
- bit b_ptm_timer_1ms ;
- //增加按鍵燈閃爍的標(biāo)志位
- //增加對(duì)按鍵燈延時(shí)函數(shù)
- unsigned char ChildKeyLEDCount = 0,HotKeyLEDCount = 0,ColdKeyLEDCount = 0;
- bit ChildKeyPressFlag;
- bit HotKeyPressFlag;
- bit ColdKeyPressFlag;
- bit ChildKeyOnFlag;
- bit HotKeyOnFlag;
- bit ColdKeyOnFlag;
- //==============================================
- //**********************************************
- //==============================================
- DEFINE_ISR (Interrupt_Extemal, 0x04)
- {
- GCC_NOP();
- }
- //==============================================
- //**********************************************
- //==============================================
- DEFINE_ISR(Interrupt_ptm_timer, 0x0c)
- {
- _ptmaf = 0 ;
- b_ptm_timer_1ms = 1 ;
-
- if(child_pulse_flag)
- {
- child_start_tick++;
- }
- else if(child_end_flag)
- {
- child_end_tick++;
- }
-
- if(hot_pulse_flag)
- {
- hot_start_tick++;
- }
- else if(hot_end_flag)
- {
- hot_end_tick++;
- }
- if(ColdPulseFlag)
- {
- ColdStartTick++;
- }
- else if(ColdEndFlag)
- {
- ColdEndTick++;
- }
-
- if(reset_flag)
- {
- switch(child_start_tick)
- {
- case 1:
- case 2:
- case 3:
- case 4:
- case 5:
- _pa3 = 0;
- break;
- case 6:
- _pa3 = 1;
- break;
- case 7:
- _pa3 = 0;//start
- break;
- case 8:
- _pa3 = 1;
- break;
- case 9:
- case 10:
- _pa3 = 0;
- break;
- case 11:
- _pa3 = 1;
- break;
- case 12:
- _pa3 = 0;
- break;
- case 13:
- _pa3 = 1;
- break;
- case 14:
- case 15:
- _pa3 = 0;
- break;
- case 16:
- _pa3 = 1;
- break;
- case 17:
- _pa3 = 0;
- break;
- case 18:
- _pa3 = 1;
- break;
- case 19:
- case 20:
- _pa3 = 0;
- break;
- case 21:
- _pa3 = 1;
- break;
- case 22:
- _pa3 = 0;
- break;
- case 23:
- _pa3 = 1;
- break;
- case 24:
- case 25:
- _pa3 = 0;//end
- break;
- case 26:
- _pa3 = 1;
- child_pulse_flag = 0;
- child_start_flag = 0;
- child_start_tick = 0;
- reset_flag = 0;
- break;
- default:
- break;
- }
- }
- else
- {
- switch(child_start_tick)//1個(gè)case 為1ms
- {
- case 1:
- case 2:
- case 3:
- case 4:
- case 5:
- _pa3 = 0;
- break;
- case 6:
- _pa3 = 1;
- break;
- case 7:
- case 8:
- _pa3 = 0;//start
- break;
- case 9:
- _pa3 = 1;
- break;
- case 10:
- _pa3 = 0;
- break;
- case 11:
- _pa3 = 1;
- break;
- case 12:
- case 13:
- _pa3 = 0;
- break;
- case 14:
- _pa3 = 1;
- break;
- case 15:
- _pa3 = 0;
- break;
- case 16:
- _pa3 = 1;
- break;
- case 17:
- case 18:
- _pa3 = 0;
- break;
- case 19:
- _pa3 = 1;
- break;
- case 20:
- _pa3 = 0;
- break;
- case 21:
- _pa3 = 1;
- break;
- case 22:
- case 23:
- _pa3 = 0;
- break;
- case 24:
- _pa3 = 1;
- break;
- case 25:
- _pa3 = 0;//end
- break;
- case 26:
- _pa3 = 1;
- child_pulse_flag = 0;
- child_start_flag = 0;
- child_start_tick = 0;
- break;
- default:
- break;
- }
- }
- if(child_start_tick == 0)
- {
- if(child_end_flag == 1)
- {
- if(child_end_tick < 10)
- {
- _pa3 = 0;
- }
- else if(child_end_tick >= 10)
- {
- _pa3 = 1;
- child_end_flag = 0;
- child_end_tick = 0;
- }
- }
- }
- switch(hot_start_tick)
- {
- case 1:
- case 2:
- case 3:
- case 4:
- case 5:
- _pa4 = 0;
- break;
- case 6:
- _pa4 = 1;
- break;
- case 7:
- case 8:
- _pa4 = 0;//start
- break;
- case 9:
- _pa4 = 1;
- break;
- case 10:
- _pa4 = 0;
- break;
- case 11:
- _pa4 = 1;
- break;
- case 12:
- case 13:
- _pa4 = 0;
- break;
- case 14:
- _pa4 = 1;
- break;
- case 15:
- case 16:
- _pa4 = 0;
- break;
- case 17:
- _pa4 = 1;
- break;
- case 18:
- case 19:
- _pa4 = 0;
- break;
- case 20:
- _pa4 = 1;
- break;
- case 21:
- _pa4 = 0;
- break;
- case 22:
- _pa4 = 1;
- break;
- case 23:
- case 24:
- _pa4 = 0;
- break;
- case 25:
- _pa4 = 1;
- break;
- case 26:
- case 27:
- _pa4 = 0;//end
- break;
- case 28:
- _pa4 = 1;
- hot_pulse_flag = 0;
- hot_start_flag = 0;
- hot_start_tick = 0;
- break;
- default:
- break;
- }
- if(hot_start_tick == 0)
- {
- if(hot_end_flag == 1)
- {
- if(hot_end_tick < 10)
- {
- _pa4 = 0;
- }
- else if(hot_end_tick >= 10)
- {
- _pa4 = 1;
- hot_end_flag = 0;
- hot_end_tick = 0;
- }
- }
- }
- switch(ColdStartTick)
- {
- case 1:
- case 2:
- case 3:
- case 4:
- case 5:
- _pa1 = 0;
- break;
- case 6:
- _pa1 = 1;
- break;
- case 7:
- case 8:
- _pa1 = 0;//start
- break;
- case 9:
- _pa1 = 1;
- break;
- case 10:
- case 11:
- _pa1 = 0;
- break;
- case 12:
- _pa1 = 1;
- break;
- case 13:
- _pa1 = 0;
- break;
- case 14:
- _pa1 = 1;
- break;
- case 15:
- _pa1 = 0;
- break;
- case 16:
- _pa1 = 1;
- break;
- case 17:
- case 18:
- _pa1 = 0;
- break;
- case 19:
- _pa1 = 1;
- break;
- case 20:
- case 21:
- _pa1 = 0;
- break;
- case 22:
- _pa1 = 1;
- break;
- case 23:
- _pa1 = 0;
- break;
- case 24:
- _pa1 = 1;
- break;
- case 25:
- _pa1 = 0;//end
- break;
- case 26:
- _pa1 = 1;
- ColdPulseFlag = 0;
- ColdStartFlag = 0;
- ColdStartTick = 0;
- break;
- default:
- break;
- }
- if(ColdStartTick == 0)
- {
- if(ColdEndFlag == 1)
- {
- if(ColdEndTick < 10)
- {
- _pa1 = 0;
- }
- else if(ColdEndTick >= 10)
- {
- _pa1 = 1;
- ColdEndFlag = 0;
- ColdEndTick = 0;
- }
- }
- }
-
- }
- //==============================================
- //**********************************************
- //==============================================
- void USER_PROGRAM_INITIAL()
- {
- _lvrc = 0b01010101;
- _pawu = 0x00 ;
- _papu = 0x00 ;
- _pac = 0x00 ;
- _pa = 0x000 ;
- _pxrm = 0x00 ;
-
- _pb = 0x88;//1000 1000 ,PB3和PB7輸出高接到主控板上面 PB3 -> COLD_WATER_DET PB7-> NORMAL_WATER_DET
- _pbpu = 0x00;//合泰輸入或者是輸出模式
- _pbc = 0x00;//GPIOB為輸出模式
-
- _ptmc0 = 0b00101000 ;
- _ptmc1 = 0b11000001 ;
- _ptmrpl= 0x00 ;
- _ptmrph= 0x00 ;
- _ptmal = 244 ; //timer_over=(1*256+244)/(8mhz/16)=1000us=1ms
- _ptmah = 1;
- _mfe = 1 ;
- _ptmae = 1 ;
- _emi = 1 ;
- _pa1 = 1; //COLD_KEY
- _pa4 = 1; //HOT_KEY
- _pa3 = 1; //CHILD_KEY
-
- _pb4 = 0;//Cold key LED1 on "0"點(diǎn)亮 "1"熄滅
- _pb5 = 0;//Hot key LED2 on "0"點(diǎn)亮 "1"熄滅
- _pb6 = 0;//Child key LED3 on "0"點(diǎn)亮 "1"熄滅
- }
- //==============================================
- //**********************************************
- //==============================================
- void USER_PROGRAM()
- {
- if(!TKS_ACTIVEF) return;
- if(!SCAN_CYCLEF) return;
- GET_KEY_BITMAP();
- key_max[0].uc=DATA_BUF[0];
- DATA_BUF[3]=0;
- if(key_max[0].b.BIT0) DATA_BUF[3]++;
- if(key_max[0].b.BIT1) DATA_BUF[3]++;
- if(key_max[0].b.BIT2) DATA_BUF[3]++;
- if(key_max[0].b.BIT3) DATA_BUF[3]++;
- if(key_max[0].b.BIT4) DATA_BUF[3]++;
- if(key_max[0].b.BIT5) DATA_BUF[3]++;
- if(key_max[0].b.BIT6) DATA_BUF[3]++;
- if(key_max[0].b.BIT7) DATA_BUF[3]++;
-
- if(DATA_BUF[3]>2)
- {
- DATA_BUF[3] = 0 ;
- key_max[0].uc=0;
- LIBRARY_RESET();
- return;
- }
-
- //調(diào)用ANY_KEY_PRESS函數(shù)
- if(ANY_KEY_PRESSF)
- {
- if(key_max[0].uc == 0x03)
- {
-
- if(child_start_flag)
- {
- child_pulse_flag = 1;
- child_start_flag = 0;
-
- reset_flag = 1;
- }
- return;
- }
-
- reset_flag = 0;
-
- if(key_max[0].uc == 0x01)
- {
- if(ColdStartFlag)//冷水鍵按下
- {
- ColdPulseFlag = 1;
- ColdStartFlag = 0;
-
- ColdKeyPressFlag = 1;
- //_pb4 = 0;//Cold key LED on
- }
- }
- //CHILD_KEY
- if(key_max[0].uc ==0x04)
- {
- if(child_start_flag)
- {
- child_pulse_flag = 1;
- child_start_flag = 0;
-
- ChildKeyPressFlag = 1;
- //_pb6 = 0;//Child key LED on
- }
- }
- if(key_max[0].uc == 0x02)
- {
- if(hot_start_flag)
- {
- hot_pulse_flag = 1;
- hot_start_flag = 0;
-
- HotKeyPressFlag = 1;
- //_pb5 = 0;//Hot key LED on
- }
- }
- }
- else
- {
- if(ColdKeyPressFlag)
- {
- if(ColdKeyOnFlag)
- {
- ColdKeyLEDCount++;
- if(ColdKeyLEDCount >= 20)//計(jì)數(shù)20次,合泰SCAN_CYCLEF計(jì)一次10ms,共200ms
- {
- _pb4 = 0;//Cold key LED on
- ColdKeyLEDCount = 0;
- ColdKeyPressFlag = 0;
- ColdKeyOnFlag = 0;
-
-
- }
- }
- else
- {
-
-
- ColdKeyLEDCount++;
- if(ColdKeyLEDCount >= 20)
- {
- _pb4 = 1;//Cold key LED off
- ColdKeyOnFlag = 1;
- ColdKeyLEDCount = 0;
-
-
- }
- }
- }
- else
- {
- if(!ColdStartFlag)
- {
- ColdEndFlag = 1;
- }
- ColdStartFlag = 1;
- }
-
-
-
- if(ChildKeyPressFlag)
- {
- if(ChildKeyOnFlag)
- {
- ChildKeyLEDCount++;
- if(ChildKeyLEDCount >= 20)//計(jì)數(shù)20次,合泰SCAN_CYCLEF計(jì)一次10ms
- {
- _pb6 = 0;//Child key LED on
- ChildKeyLEDCount = 0;
- ChildKeyPressFlag = 0;
- ChildKeyOnFlag = 0;
-
-
- }
- }
- else
- {
- ChildKeyLEDCount++;
- if(ChildKeyLEDCount >= 20)
- {
- _pb6 = 1;//Child key LED off
- ChildKeyOnFlag = 1;
- ChildKeyLEDCount = 0;
-
-
- }
- }
- }
- else
- {
- if(!child_start_flag)
- {
- child_end_flag = 1;
- }
- child_start_flag = 1;
- }
-
- if(HotKeyPressFlag)
- {
- if(HotKeyOnFlag)
- {
- HotKeyLEDCount++;
- if(HotKeyLEDCount >= 20)//計(jì)數(shù)20次,合泰SCAN_CYCLEF計(jì)一次10ms
- {
- _pb5 = 0;//Hot key LED on
- HotKeyLEDCount = 0;
- HotKeyPressFlag = 0;
- HotKeyOnFlag = 0;
-
- }
- }
- else
- {
- HotKeyLEDCount++;
- if(HotKeyLEDCount >= 20)
- {
- _pb5 = 1;//Hot key LED off
- HotKeyOnFlag = 1;
- HotKeyLEDCount = 0;
-
-
- }
- }
- }
- else
- {
- if(!hot_start_flag)
- {
- hot_end_flag = 1;
- }
- hot_start_flag = 1;
- }
-
- }
- }
復(fù)制代碼
|
|