4×4矩阵式键盘(非中断)源程序

 
  1. #include <AT89X51.H> 
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. uchar code table[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E,0xFF}; 
  5. uchar temp; 
  6. uchar key;
  7. uchar k;
  8. uchar code_h;
  9. //延时函数
  10. void mDelay(uchar Delay)
  11. {   uchar i;
  12.     for(;Delay>0;Delay--)
  13.     {   for(i=0;i<124;i++)
  14.         {;}
  15.     }
  16. }
  17. void keyc(void);
  18. //主函数
  19. void main(void)
  20. {
  21.     P2_0=0;
  22.     while(1)
  23.     {
  24.         code_h=0xef;
  25.         P3=code_h;
  26.         temp=P3;
  27.         while(temp==code_h)//检测键盘是否有按键按下
  28.         {
  29.             code_h=(code_h<<1)|0x01;
  30.             if(code_h==0xff)
  31.             {code_h=0xef;}
  32.             P3=code_h;
  33.             temp=P3;
  34.         }
  35.             mDelay(5);  //延时去抖
  36.             if(P3==temp)
  37.             {
  38.                 keyc();           
  39.                 while(temp==P3) //等待按键放开
  40.                 {;}     
  41.             }
  42.     }
  43. }
  44. //键盘操作
  45. void keyc(void)
  46. {
  47.     switch(temp) 
  48.     { 
  49.         case 0xee: 
  50.             key=10; 
  51.             break
  52.         case 0xed: 
  53.             key=0; 
  54.             break
  55.         case 0xeb: 
  56.             key=11; 
  57.             break;
  58.         case 0xe7: 
  59.             key=12; 
  60.             break
  61.         case 0xde: 
  62.             key=1; 
  63.             break
  64.         case 0xdd: 
  65.             key=2; 
  66.             break
  67.         case 0xdb: 
  68.             key=3; 
  69.             break
  70.         case 0xd7: 
  71.             key=13; 
  72.             break
  73.         case 0xbe: 
  74.             key=4; 
  75.             break
  76.         case 0xbd: 
  77.             key=5; 
  78.             break
  79.         case 0xbb: 
  80.             key=6; 
  81.             break
  82.         case 0xb7: 
  83.             key=14; 
  84.             break
  85.         case 0x7e: 
  86.             key=7; 
  87.             break
  88.         case 0x7d: 
  89.             key=8; 
  90.             break
  91.         case 0x7b: 
  92.             key=9; 
  93.             break
  94.         case 0x77: 
  95.             key=15; 
  96.             break
  97.      }
  98.      P0=table[key];  
  99. }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值