帮忙解读下这个程序?按键单击和按键双击
时间:10-02
整理:3721RD
点击:
- void do_main(void)
- {
- sys_init();
- _asm("rim");
-
- //WELK1 = 1;
-
-
- //PD_ODR = 0xff;
-
- PC_DDR |= 0xFF;
- PC_CR1 |= 0XFF;
- PC_CR2 |= 0X00;
- //位选全部关闭
- WELK1 = 1 ;
- WELK2 = 0;
-
- PD_CR1 |= 0x18;//PD3,PD4都配置成上拉输入
- PB_CR1 |= 0XFF;
-
- PE_DDR = 0XFF;
- PE_CR1 = 0X20;
-
- Beefun(1,1000);
-
-
-
- while(1)
- {
- check();
-
- if(checkflag == 0)
- {
- KeyScan();
- Keyfun();
- do_Show();
- do_Key();
- do_touch();
- }
- }
-
- }
- void KeyScan(void)
- {
- if(!Key_input)
- {
- delay(10);
- if(!Key_input)
- {
- compleFlag=1;
- bKey = 1;
- bKeyls = 1;
- Beefun(1,75);
- if(keytimeup < 100)
- {
- keytimeup = 101;
- fKeyfun = KEYSHOT;
- fKeyfun |= 0x80;
- showBAT();
- cpsWork = 8;
- Adtime = 0;
- }
- }
- }
- else {
- if(bKey){
-
- fKey = 1;
- bKey = 0;
- keytimedn = 0;
- keytimeup = 0;
- }
- }
- }
- void Keyfun(void)
- {
- if(keytimedn > 600 )
- {
- keytimedn = 601;
- fKeyfun = KEYLONG;
- fKeyfun |= 0x80;
- sWork = 1; //
- tTick5s = 0;
- fKey = 0;
- UV_OFF();
- }
- else if(fKey)
- {
-
- if(fKeyfun & 0x80)
- {
-
- fKeyfun &= ~0x80;
- fKey = 0;
- return;
- }
- if(keytimeup < 10){
-
- }
- else {
- fKeyfun |= KEYSI;
- fKey = 0;
- }
- }
- }
- @far @interrupt void TIM4_IRQHandler (void) //中断函数
- {
-
-
- TIM4_SR= 0x00; //状态寄存器,手动清除UIF位,以免重复进入中断
-
-
- if(tTick < 475)
- {
- tTick++;
- }
- else{
- tTick = 0;
- fTick = 1;
- }
-
- if(cpbzon)
- {
- cpbzon--;
- BEEP = 0;
- if(cpbzon == 0)
- bzoff = 100;//蜂鸣器间隔时间设置
- }
- if(bzoff && (cpbzon==0))
- {
- bzoff--;
- BEEP = 1;
- if(bznum && (bzoff == 0))
- {
- bznum--;
- cpbzon = bzon;
- }
- }
-
- if(bKey){
- keytimedn++;
- }
- else{
- keytimeup++;
- }
本人菜鸟一枚,程序好像雾里看花一样,感觉懂又感觉不懂。程序好像是中断里面加按键长度keytimedn++以及按键按下的间隔时间keytimeup++; 只是主函数里面有好几个变量看不懂是什么意思,求大侠帮我梳理一下,非常感谢。 比如变量 fKeyfun ,fKey bKey 它们 的作用是什么?
中断函数

定义

按键双击

按键长按

建议把你整个程序发上来好看
已经发了,就是key_scan和keyfun函数里面是怎么实现按键长按和按键双击的,我看的不是很懂。
