找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2884|回复: 1
收起左侧

单片机16位键盘响应 在4位数码管上相应显示123456789ABCDEF16位符号

[复制链接]
ID:421049 发表于 2019-3-9 13:01 | 显示全部楼层 |阅读模式
16位键盘,按下那个键,在4位数码管上相应显示123456789ABCDEF16位符号。

单片机源程序如下:
  1. #include <reg52.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. uchar code table[]={0x44,0x5F,0x34,0x15,0x0F,0x85,0x84,0x57,0x04,0x05,0x06,0x8C,0xE4,0x1C,0xA4,0xA6};
  5. void delayms(uint xms)
  6. {
  7.   uint i,j;
  8.         for(i=xms;i>0;i--)
  9.           for(j=110;j>0;j--);
  10. }
  11. void display(uchar num)
  12. {
  13.         P3=0X00;
  14.   P1=table[num];
  15. }
  16. void matrixkeyscan()
  17. {
  18.   uchar temp,key;
  19.         P2=0Xfe;
  20.         temp=P2;
  21.         temp=temp&0xf0;
  22.         if(temp != 0xf0)
  23.         {
  24.           delayms(10);
  25.                 temp=P2;
  26.                 temp=temp & 0xf0;
  27.                 if(temp != 0xf0)
  28.                 {
  29.                   temp=P2;
  30.                         switch(temp)
  31.                         {
  32.                           case 0x7e:    key=0;
  33.                                               break;
  34.                                 case 0xbe:    key=1;
  35.                                               break;
  36.                                 case 0xde:    key=2;
  37.                                               break;
  38.                                 case 0xee:    key=3;
  39.                                               break;
  40.                         }
  41.                         while(temp != 0Xf0)
  42.                         {
  43.                           temp=P2;
  44.                                 temp=temp&0xf0;
  45.                         }
  46.                         display(key);
  47.                 }
  48.         }
  49.         P2=0Xfd;
  50.         temp=P2;
  51.         temp=temp&0xf0;
  52.         if(temp != 0xf0)
  53.         {
  54.           delayms(10);
  55.                 temp=P2;
  56.                 temp=temp & 0xf0;
  57.                 if(temp != 0xf0)
  58.                 {
  59.                   temp=P2;
  60.                         switch(temp)
  61.                         {
  62.                           case 0x7d:    key=4;
  63.                                               break;
  64.                                 case 0xbd:    key=5;
  65.                                               break;
  66.                                 case 0xdd:    key=6;
  67.                                               break;
  68.                                 case 0xed:    key=7;
  69.                                               break;
  70.                         }
  71.                         while(temp != 0Xf0)
  72.                         {
  73.                           temp=P2;
  74.                                 temp=temp&0xf0;
  75.                         }
  76.                         display(key);
  77.                 }
  78.         }
  79.                 P2=0Xfb;
  80.         temp=P2;
  81.         temp=temp&0xf0;
  82.         if(temp != 0xf0)
  83.         {
  84.           delayms(10);
  85.                 temp=P2;
  86.                 temp=temp & 0xf0;
  87.                 if(temp != 0xf0)
  88.                 {
  89.                   temp=P2;
  90.                         switch(temp)
  91.                         {
  92.                           case 0x7b:    key=8;
  93.                                               break;
  94.                                 case 0xbb:    key=9;
  95.                                               break;
  96.                                 case 0xdb:    key=10;
  97.                                               break;
  98.                                 case 0xeb:    key=11;
  99.                                               break;
  100.                         }
  101.                         while(temp != 0Xf0)
  102.                         {
  103.                           temp=P2;
  104.                                 temp=temp&0xf0;
  105.                         }
  106.                         display(key);
  107.                 }
  108.         }
  109.         P2=0Xf7;
  110.         temp=P2;
  111.         temp=temp&0xf0;
  112.         if(temp != 0xf0)
  113.         {
  114.           delayms(10);
  115.                 temp=P2;
  116.                 temp=temp & 0xf0;
  117.                 if(temp != 0xf0)
  118.                 {
  119.                   temp=P2;
  120.                         switch(temp)
  121.                         {
  122.                           case 0x77:    key=12;
  123.                                               break;
  124.                                 case 0xb7:    key=13;
  125.                                               break;
  126.                                 case 0xd7:    key=14;
  127.                                               break;
  128.                                 case 0xe7:    key=15;
  129.                                               break;
  130.                         }
  131.                         while(temp != 0Xf0)
  132.                         {
  133.                           temp=P2;
  134.                                 temp=temp&0xf0;
  135.                         }
  136.                         display(key);
  137.                 }
  138.         }       
  139. }
  140. void main()
  141. {
  142.   P3=0x00;
  143.         while(1)
  144.         {
  145.           matrixkeyscan();
  146.         }       
  147. }
复制代码

所有资料51hei提供下载:
keyscan.zip (21.25 KB, 下载次数: 13)



回复

使用道具 举报

ID:1 发表于 2019-3-11 00:17 | 显示全部楼层
本帖需要重新编辑补全电路原理图,源码,详细说明与图片即可获得100+黑币(帖子下方有编辑按钮)
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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