找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 672|回复: 4
打印 上一主题 下一主题
收起左侧

求单片机大神帮我看看这个需要改哪里?非常感谢(单片机键盘)

[复制链接]
楼主
ID:213173 发表于 2021-10-27 11:32 | 显示全部楼层
  1. #include<reg51.h>

  2. unsigned char n[]={
  3.         0xc0,0xf9,0xa4,0xb0,
  4.         0x99,0x92,0x82,0xf8,
  5.         0x80,0x90,0x88,0x83,
  6.         0xc6,0xa1,0x86,0x81};

  7. unsigned char k;

  8. void Timer1Init()   //1毫秒@12.000MHz
  9. {
  10.         TMOD= 0x10;                //设置定时器模式
  11.         TL1 = 0x18;                //设置定时初始值
  12.         TH1 = 0xFC;                //设置定时初始值
  13.         TF1 = 0;                //清除TF0标志
  14.         TR1 = 1;                //定时器0开始计时
  15. }

  16. void scan_key(void)
  17. {
  18.         static bit sign;
  19.         static unsigned char count;
  20.         unsigned char temp;
  21.         P1=0x0f;
  22.         if(P1!=0x0f)
  23.         {
  24.                 if(++count>=10 && sign==0)
  25.                 {
  26.                         sign=1;
  27.                         temp=P1;
  28.                         temp|=0xf0;
  29.                         P1=temp;
  30.                         switch(P1)
  31.                         {
  32.                                 case 0xee:k=1;break;
  33.                                 case 0xde:k=2;break;
  34.                                 case 0xbe:k=3;break;
  35.                                 case 0x7e:k=4;break;
  36.                                 case 0xed:k=5;break;
  37.                                 case 0xdd:k=6;break;
  38.                                 case 0xbd:k=7;break;
  39.                                 case 0x7d:k=8;break;
  40.                                 case 0xeb:k=9;break;
  41.                                 case 0xdb:k=10;break;
  42.                                 case 0xbb:k=11;break;
  43.                                 case 0x7b:k=12;break;
  44.                                 case 0xe7:k=13;break;
  45.                                 case 0xd7:k=14;break;
  46.                                 case 0xb7:k=15;break;
  47.                                 case 0x77:k=16;break;
  48.                                 default:break;
  49.                         }
  50.                 }
  51.         }
  52.         else
  53.         {
  54.                 sign=0;
  55.                 count=0;
  56.         }
  57. }
  58. void main()                                                //主函数
  59. {
  60.         Timer1Init();
  61.         while(1)
  62.         {
  63.                 if(TF1)
  64.                 {
  65.                         TF1=0;
  66.                         TL1 = 0x18;
  67.                         TH1 = 0xFC;
  68.                         scan_key();
  69.                 }
  70.                 P2=n[k/10];
  71.                 P3=~n[k%10];
  72.         }
  73. }
复制代码





回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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