第十六节:矩阵键盘的组合按键触发。(下)

  1. void T0_time() interrupt 1  
  2. {  
  3.   TF0=0;  //清除中断标志  
  4.   TR0=0; //关中断  
  5.   
  6.   key_scan(); //按键扫描函数  
  7.   
  8.   if(uiVoiceCnt!=0)  
  9.   {  
  10.      uiVoiceCnt--; //每次进入定时中断都自减1,直到等于零为止。才停止鸣叫  
  11.          beep_dr=0;  //蜂鸣器是PNP三极管控制,低电平就开始鸣叫。  
  12.   }  
  13.   else  
  14.   {  
  15.      ; //此处多加一个空指令,想维持跟if括号语句的数量对称,都是两条指令。不加也可以。  
  16.            beep_dr=1;  //蜂鸣器是PNP三极管控制,高电平就停止鸣叫。  
  17.   }  
  18.   
  19.   
  20.   TH0=0xf8;   //重装初始值(65535-2000)=63535=0xf82f  
  21.   TL0=0x2f;  
  22.   TR0=1;  //开中断  
  23. }  
  24.   
  25.   
  26. void delay_long(unsigned int uiDelayLong)  
  27. {  
  28.    unsigned int i;  
  29.    unsigned int j;  
  30.    for(i=0;i<uiDelayLong;i++)  
  31.    {  
  32.       for(j=0;j<500;j++)  //内嵌循环的空指令数量  
  33.           {  
  34.              ; //一个分号相当于执行一条空语句  
  35.           }  
  36.    }  
  37. }  
  38.   
  39.   
  40. void initial_myself()  //第一区 初始化单片机  
  41. {  
  42.   
  43.   led_dr=0; //LED灯灭  
  44.   beep_dr=1; //用PNP三极管控制蜂鸣器,输出高电平时不叫。  
  45.   
  46.   
  47.   TMOD=0x01;  //设置定时器0为工作方式1  
  48.   
  49.   
  50.   TH0=0xf8;   //重装初始值(65535-2000)=63535=0xf82f  
  51.   TL0=0x2f;  
  52.   
  53. }  
  54. void initial_peripheral() //第二区 初始化外围  
  55. {  
  56.   EA=1;     //开总中断  
  57.   ET0=1;    //允许定时中断  
  58.   TR0=1;    //启动定时中断  
  59.   
  60. }   

总结陈词:
    这节讲了如何把矩阵键盘翻译成独立按键的处理方式,然后像独立按键一样实现组合按键的功能,关于矩阵按键的双击,长按和短按,按键连续触发等功能我不再详细介绍,有兴趣的朋友可以参考我前面章节讲的独立按键。在实际的项目中,按键可以控制很多外设。为了以后进一步讲按键控制外设等功能,接下来我会讲哪些新内容呢?欲知详情,请听下回分解-----两片联级74HC595驱动16个LED灯的基本驱动程序。

 (上http://www.eeskill.com/group/topic_scan/id/467

 (中http://www.eeskill.com/group/topic_scan/id/491

永不止步步 发表于11-20 14:25 浏览65535次
分享到:

已有0条评论

暂时还没有回复哟,快来抢沙发吧

添加一条新评论

只有登录用户才能评论,请先登录注册哦!

话题作者

永不止步步
金币:67410个|学分:308217个
立即注册
畅学电子网,带你进入电子开发学习世界
专业电子工程技术学习交流社区,加入畅学一起充电加油吧!

x

畅学电子网订阅号