×
单片机 > 单片机程序设计 > 详情

51单片机的独立键盘

发布时间:2020-05-28 发布时间:
|

这几天打算好好开始看郭天祥的单片机视频,自己也写了一个独立键盘的51单片机程序,开发环境为Keil C51。

刚开始看,功能并不是很复杂,由51单片机的P1^7口接LED灯,P0口作为6位数码管的位选线和段选线,6位数码管每次显示相同的数字。位选和段选的控制由P2^7,P2^6口。按键只有一个,一端与地相连,一端接P3^7口。

当按下按键时,LED灯会发光,同时6位数码管显示的数字加1,从0~F后返回0。松开按键后,LED灯灭。

闲话少说,上代码:

  1. #include   

  2. #define uchar   unsigned char  

  3.   

  4. sbit RDKey=P3^7;  

  5. sbit LED=P1^7;  

  6. sbit dula=P2^6;  

  7. sbit wela=P2^7;  

  8. uchar code   table[]={  

  9. 0x3f,0x06,0x5b,0x4f,  

  10. 0x66,0x6d,0x7d,0x07,  

  11. 0x7f,0x6f,0x77,0x7c,  

  12. 0x39,0x5e,0x79,0x71};  

  13.   

  14. void ShortDelay();  

  15. void LongDelay();  

  16. void display(uchar num);  

  17. void main()  

  18. {  

  19.     uchar num=0;  

  20.     RDKey=1;  

  21.     LED=1;  

  22.     while(1)  

  23.     {  

  24.         if(RDKey==0)//键可能被被按下,需要消抖,用到了LongDelay函数  

  25.         {  

  26.       LongDelay();  

  27.       if(RDKey==0)   //键被按下,Do Something,这里是数码管显示数字  

  28.       {  

  29.         LED=0;  

  30.         //Do something  

  31.         display(num);  

  32.         num++;  

  33.         if(num>=16)  

  34.           num=0;  

  35.       }  

  36.         }  

  37.         else  

  38.         {  

  39.             LED=1;  

  40.             //Do OtherThing  

  41.         }  

  42.     }  

  43. }  

  44.   

  45. void display(uchar num)  

  46. {  

  47.   wela=1;  

  48.   P0=0xc0;  

  49.   wela=0;  

  50.   P0=0xff;  

  51.   dula=1;  

  52.   P0=table[num];  

  53.   dula=0;  

  54.   ShortDelay();   //数码管动态显示,用到的是ShortDelay函数  

  55. }  

  56.   

  57. void ShortDelay()  

  58. {  

  59.   uchar a=100;  

  60.   while(a--);  

  61. }  

  62.   

  63. void LongDelay()  

  64. {  

  65.   int a=10000;  

  66.   while(a--);  

  67. }  




『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
Keil(MDK-ARM)系列教程(七)_菜单