帮忙解读下这个程序?按键单击和按键双击

2019-07-15 18:14发布

本帖最后由 zhuxiaoxing 于 2014-10-29 14:43 编辑
  1. void do_main(void)
  2. {
  3.         sys_init();
  4.         _asm("rim");
  5.        
  6.         //WELK1 = 1;
  7.        
  8.        
  9.         //PD_ODR = 0xff;
  10.        
  11.         PC_DDR |= 0xFF;
  12.         PC_CR1 |= 0XFF;
  13.         PC_CR2 |= 0X00;
  14.         //位选全部关闭
  15.         WELK1 = 1 ;
  16.         WELK2 = 0;
  17.        
  18.         PD_CR1 |= 0x18;//PD3,PD4都配置成上拉输入
  19.         PB_CR1 |= 0XFF;
  20.        
  21.         PE_DDR = 0XFF;
  22.         PE_CR1 = 0X20;
  23.        
  24.         Beefun(1,1000);
  25.        

  26.        
  27.        
  28.                                         while(1)
  29.                 {
  30.                                                         check();
  31.                                                        
  32.                                                 if(checkflag == 0)
  33.                                                 {
  34.                                                         KeyScan();
  35.                                                         Keyfun();
  36.                                                         do_Show();
  37.                                                         do_Key();
  38.                                                         do_touch();
  39.                                                 }
  40.           }
  41.                
  42. }

  43. void KeyScan(void)
  44. {
  45.         if(!Key_input)
  46.         {
  47.                         delay(10);
  48.                         if(!Key_input)
  49.                         {         
  50.                                 compleFlag=1;
  51.                                 bKey = 1;       
  52.                                 bKeyls = 1;       
  53.                                 Beefun(1,75);
  54.                                 if(keytimeup < 100)
  55.                                 {
  56.                                                 keytimeup = 101;
  57.                                                 fKeyfun = KEYSHOT;
  58.                                                 fKeyfun |= 0x80;
  59.                                                 showBAT();
  60.                                                 cpsWork = 8;
  61.                                                 Adtime = 0;
  62.                                 }
  63.                         }
  64.         }
  65.         else {
  66.                 if(bKey){
  67.                                
  68.                                 fKey = 1;
  69.                                 bKey = 0;
  70.                                 keytimedn = 0;
  71.                                 keytimeup = 0;
  72.                 }
  73.         }
  74. }

  75. void Keyfun(void)
  76. {
  77.                 if(keytimedn > 600 )
  78.                 {
  79.                         keytimedn = 601;
  80.                         fKeyfun = KEYLONG;
  81.                         fKeyfun |= 0x80;
  82.                         sWork = 1;                //
  83.                         tTick5s = 0;
  84.                         fKey = 0;
  85.                         UV_OFF();
  86.                 }
  87.                 else if(fKey)
  88.                 {       
  89.                                        
  90.                         if(fKeyfun & 0x80)
  91.                         {
  92.                        
  93.                                 fKeyfun &= ~0x80;
  94.                                 fKey = 0;
  95.                                 return;
  96.                         }
  97.                         if(keytimeup < 10){
  98.                                
  99.                         }
  100.                         else {
  101.                                 fKeyfun |= KEYSI;
  102.                                 fKey = 0;
  103.                         }
  104.                 }
  105. }
  106. @far @interrupt void TIM4_IRQHandler (void)  //中断函数
  107. {
  108.                        
  109.                
  110.                         TIM4_SR= 0x00; //状态寄存器,手动清除UIF位,以免重复进入中断
  111.                        
  112.                        
  113.                         if(tTick < 475)               
  114.                         {
  115.                                 tTick++;
  116.                         }
  117.                         else{
  118.                                 tTick = 0;
  119.                                 fTick = 1;
  120.                         }
  121.                        
  122.                         if(cpbzon)
  123.                         {
  124.                                 cpbzon--;
  125.                                 BEEP = 0;
  126.                                 if(cpbzon == 0)
  127.                                                 bzoff = 100;//蜂鸣器间隔时间设置
  128.                         }
  129.                         if(bzoff && (cpbzon==0))
  130.                         {
  131.                                 bzoff--;
  132.                                 BEEP = 1;
  133.                                 if(bznum && (bzoff == 0))
  134.                                 {
  135.                                                 bznum--;
  136.                                                 cpbzon = bzon;
  137.                                 }
  138.                         }
  139.                        
  140.                         if(bKey){
  141.                                 keytimedn++;
  142.                         }
  143.                         else{
  144.                                 keytimeup++;
  145.                         }
  146.                        
复制代码
本人菜鸟一枚,程序好像雾里看花一样,感觉懂又感觉不懂。程序好像是中断里面加按键长度keytimedn++以及按键按下的间隔时间keytimeup++;  只是主函数里面有好几个变量看不懂是什么意思,求大侠帮我梳理一下,非常感谢。 比如变量 fKeyfun  ,fKey   bKey  它们 的作用是什么?

中断函数 中断函数
定义 定义
按键双击 按键双击
按键长按 按键长按
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。