找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机数码管显示矩阵键盘按键的设计资料

[复制链接]
跳转到指定楼层
楼主
数码管显示矩阵键盘按键的设计仿真原理图如下(proteus仿真工程文件可到本帖附件中下载):


单片机源程序如下:
  1. #include<reg52.h>
  2. char code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xbf,0x10};
  3. idata dis_buff[1];
  4. bit key_flag;
  5. sbit cs=P2^0;
  6. void delay(int k)
  7. {
  8.         int m,n;
  9.         for(m=0;m<k;m++)
  10.         {
  11.                 for(n=0;n<120;n++);
  12.         }
  13. }
  14. void display(void)
  15. {
  16.         cs=0x01;
  17.         P0=tab[dis_buff[0]];
  18.         delay(1);
  19. }
  20. char ScanKey()
  21. {
  22.         char temp,temp1,key;
  23.         temp=P1;
  24.         temp&=0x0f;
  25.         switch(temp)
  26.         {
  27.                 case 0x0e:
  28.                 {
  29.                         P1=0xf0;
  30.                         delay(100);
  31.                         temp1=P1;
  32.                         temp1&=P1;
  33.                         switch(temp1)
  34.                         {
  35.                                 case 0xe0:
  36.                                         key=0;
  37.                                         break;
  38.                                 case 0xd0:
  39.                                         key=1;
  40.                                         break;
  41.                                 case 0xb0:
  42.                                         key=2;
  43.                                         break;
  44.                                 case 0x70:
  45.                                         key=3;
  46.                                         break;
  47.                                 default:
  48.                                         key=0;
  49.                                         break;
  50.                         }
  51.                         P1=0x0f;
  52.                         break;
  53.                 }
  54.                 case 0x0d:
  55.                         {
  56.                                 P1=0xf0;
  57.                                 delay(100);
  58.                                 temp1=P1;
  59.                                 temp&=P1;
  60.                                 switch(temp1)
  61.                                 {
  62.                                         case 0xe0:
  63.                                                 key=4;
  64.                                                 break;
  65.                                         case 0xd0:
  66.                                                 key=5;
  67.                                                 break;
  68.                                         case 0xb0:
  69.                                                 key=6;
  70.                                                 break;
  71.                                         case 0x70:
  72.                                                 key=7;
  73.                                                 break;
  74.                                         default:
  75.                                                 key=0;
  76.                                                 break;
  77.                                 }
  78.                                 P1=0x0f;
  79.                                 break;
  80.                         }
  81.                         case 0x0b:
  82.                         {
  83.                                 P1=0xf0;
  84.                                 delay(100);
  85.                                 temp1=P1;
  86.                                 temp1&=P1;
  87.                                 switch(temp1)
  88.                                 {
  89.                                         case 0xe0:
  90.                                                 key=8;
  91.                                                 break;
  92.                                         case 0xd0:
  93.                                                 key=9;
  94.                                                 break;
  95.                                         case 0xb0:
  96.                                                 key=10;
  97.                                                 break;
  98.                                         case 0x70:
  99.                                                 key=11;
  100.                                                 break;
  101.                                         default:
  102.                                                 key=0;
  103.                                                 break;
  104.                                 }
  105.                                 P1=0xf0;
  106.                                 break;
  107.                         }
  108.                         case 0x07:
  109.                         {
  110.                                 P1=0xf0;
  111.                                 delay(100);
  112.                                 temp1=P1;
  113.                                 temp1&=P1;
  114.                                 switch(temp1)
  115.                                 {
  116.                                                 case 0xe0:
  117.                                                 key=12;
  118.                                                 break;
  119.                                         case 0xd0:
  120.                                                 key=13;
  121.                                                 break;
  122.                                         case 0xb0:
  123.                                                 key=14;
  124.                                                 break;
  125.                                         case 0x70:
  126.                                                 key=15;
  127.                                                 break;
  128.                                         default:
  129.                                                 key=0;
  130.                                                 break;
  131.                                 }
  132.                                 P1=0x0f;
  133.                                 break;
  134.                         }
  135.                         default:
  136.                                 key=0;
  137.                                 break;
  138.         }
  139.         return(key);
  140. }
  141. void main(void)
  142. {
  143.         char temp,keynum;
  144.         cs=0x10;
  145.         P1=0x0f;
  146.         while(1)
  147.         {
  148.                 temp=P1;
  149.                 temp&=0x0f;
  150.                 if(temp==0x0f)
  151.                 {
  152.                         key_flag=0;
  153.                 }
  154.                 else
  155.                 {
  156.                         delay(10);
  157.                         temp=P1;
  158.                         temp&=0x0f;
  159.                 }
  160.                 if(temp==0x0f)
  161.                 {
  162.                         key_flag=0;
  163.                 }
  164.                 else
  165. ……………………

  166. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
数码管显示矩阵键盘按键的设计.rar (72.9 KB, 下载次数: 10)



分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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