找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1311|回复: 0
收起左侧

单片机矩阵键盘代码

[复制链接]
ID:798049 发表于 2021-6-30 20:49 | 显示全部楼层 |阅读模式
  1. #include <reg52.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. sbit key1=P3^4;
  5. sb

  6. sbit dula=P2^6;
  7. sbit wela=P2^7;
  8. uchar code table[]={0x3f,0x06,0x5b,0x4f,
  9.                           0x66,0x6d,0x7d,0x07,
  10.                           0x7f,0x6f,0x77,0x7c,
  11.                           0x39,0x5e,0x79,0x71};
  12. void delayms(uint);
  13. uchar numt0,num;
  14. void display(uchar numdis)
  15. {
  16. uchar  bai,shi,ge;
  17. bai=numdis/100;
  18. shi=numdis%100/10;
  19. ge=numdis%10;  
  20. dula=1;
  21. P0=table[bai];
  22. dula=0;
  23. P0=0xff;
  24. wela=1;
  25. P0=0xfe;
  26. wela=0;
  27. delayms(5);

  28. dula=1;        
  29. P0=table[shi];
  30. dula=0;
  31. P0=0xff;
  32. wela=1;
  33. P0=0xfd;
  34. wela=0;
  35. delayms(5);

  36. dula=1;        
  37. P0=table[ge];
  38. dula=0;
  39. P0=0xff;
  40. wela=1;
  41. P0=0xfb;
  42. wela=0;
  43. delayms(5);

  44. }
  45.         
  46. void delayms(uint xms)
  47. {
  48.         uint i,j;
  49.         for(i=xms;i>0;i--)
  50.          for(j=110;j>0;j--);
  51. }
  52. void init()
  53. {
  54.   TMOD=0x01;
  55.    TH0=(65536-45872)/256;
  56.    TL0=(65536-45872)%256;        
  57.         EA=1;
  58.         ET0=1;
  59. }
  60. void keyscan()
  61. {
  62.                 if(key1==0)
  63.         {
  64.                 delayms(10);
  65.                 if(key1==0)
  66.                 {
  67.                         num=0;
  68.                         while(!key1);
  69.                 }
  70.         }
  71.         if(key2==0)
  72.         {
  73.                 delayms(10);
  74.                 if(key2==0)
  75.                 {
  76.                         num++;
  77.                         if(num == 60)
  78.                                 num=0;
  79.                         while(!key2);
  80.                 }
  81.         }
  82.         if(key3==0)
  83.         {
  84.                 delayms(10);
  85.                 if(key3==0)
  86.                 {
  87.                         if(num == 0)
  88.                                 num=60;
  89.                         num--;
  90.                         while(!key3);
  91.                 }
  92.         }

  93.         if(key4==0)
  94.         {
  95.                 delayms(10);
  96.                 if(key4==0)
  97.                 {
  98.                         while(!key4);
  99.                         TR0=~TR0;
  100.                 }
  101.         }
  102. }
  103. void main()
  104. {
  105.         init();
  106.         
  107.         while(1);
  108.         {   keyscan();
  109.                         display(num);
  110.         }
  111. }
  112. void T0_time() interrupt 1
  113. {
  114.           TH0=(65536-45872)/256;
  115.    TL0=(65536-45872)%256;
  116.          
  117.          numt0++;
  118.          if(numt0 == 20)
  119.          {
  120.                  numt0=0;
  121.                  num++;
  122.                  if(num==999)
  123.                          num=0;
  124.          }
  125. }
复制代码


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表