找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机矩阵键盘通过点阵显示(proteus仿真+源码)

[复制链接]
跳转到指定楼层
楼主
按下矩阵键盘中数字键,让点阵显示相应数字,按下字符F键,则把点阵清屏,再按数字键,点阵又显示相应数字。
单片机仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)

单片机源程序:

  1. #include<reg51.h>
  2. #define uint unsigned int
  3. #define uchar unsigned char
  4. unsigned char code tab[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
  5. uchar code KEY_TABLE[]={ 0xee,0xde,0xbe,0x7e,
  6.                                                  0xed,0xdd,0xbd,0x7d,
  7.                                                  0xeb,0xdb,0xbb,0x7b,
  8.                                                  0xe7,0xd7,0xb7,0x77};//键盘表
  9. uchar code M[16][8]=
  10. {        
  11.     {0x0,0x3C,0x24,0x24,0x24,0x24,0x24,0x3C,},
  12.          {0x0,0x8,0x8,0x8,0x8,0x8,0x8,0x8,},
  13.         {0x0,0x3C,0x4,0x4,0x3C,0x20,0x20,0x3C,},
  14.         {0x0,0x3C,0x4,0x4,0x3C,0x4,0x4,0x3C,},
  15.         {0x0,0x24,0x24,0x34,0x3C,0x4,0x4,0x4,},
  16.         {0x0,0x3C,0x20,0x20,0x3C,0x4,0x4,0x3C,},
  17.         {0x0,0x3C,0x20,0x20,0x3C,0x24,0x24,0x3C,},
  18.         {0x0,0x3C,0x4,0x4,0x4,0x4,0x4,0x4,},
  19.         {0x0,0x3C,0x24,0x24,0x3C,0x24,0x24,0x3C,},
  20.         {0x0,0x3C,0x24,0x24,0x3C,0x4,0x4,0x3C,},
  21.         {0x0,0x3C,0x4,0x4,0x3C,0x24,0x24,0x3C,},
  22.         {0x0,0x20,0x20,0x20,0x3C,0x24,0x24,0x3C,},
  23.         {0x0,0x0,0x0,0x3C,0x20,0x20,0x20,0x3C,},
  24.         {0x0,0x4,0x4,0x4,0x3C,0x24,0x24,0x3C,},
  25.         {0x0,0x3C,0x24,0x24,0x3C,0x20,0x20,0x3C,},
  26.         {0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,}
  27. };        





  28. //延时函数
  29. void delayms(unsigned int xms)
  30. {
  31.         unsigned int i,j;
  32.         for(i=xms;i>0;i--)
  33.             for(j=110;j>0;j--);
  34. }
  35. unsigned char cnta,num;
  36. main()
  37. {
  38.         uchar temp,key,i;
  39.         while(1)
  40.         {
  41.                 P3=0xf0;//置行为0,列为1,读列值。
  42.                 if(P3!=0xf0)//判断有,无键盘按下
  43.                 {
  44.                         delayms(150);//消振
  45.                         if(P3!=0xf0)//如果if的值为真,这时可以确定有键盘按下
  46.                         {        
  47.                                 
  48.                                 temp=P3;//存储列读入的值
  49.                                 P3=0x0f;//置列为0,行为1,读行值。
  50.                                 key=temp|P3;//将行,列值综合,赋给key。
  51.                                 for(i=0;i<16;i++)
  52.                                         if(key==KEY_TABLE[i])//读键盘表,确定读入的按键值
  53.                                         {num=i;break;}
  54.                                 {
  55.                                 TMOD=0x01;
  56.                                 TH0=(65536-4000)/256;
  57.                                 TL0=(65536-4000)%256;
  58.                                 TR0=1;
  59.                                 ET0=1;
  60.                                 EA=1;
  61.                                 while(i!=num);
  62.                                 }           
  63.                          }
  64.                 }                        
  65.         }                        
  66. }        
  67. void t0(void) interrupt 1 using 0
  68. {
  69.         TH0=(65536-4000)/256;
  70.         TL0=(65536-4000)%256;
  71.         P1=tab[cnta];
  72.         P0=M[num][cnta];
  73.         cnta++;
  74.         if(cnta==8)
  75.         {
  76.                 cnta=0;
  77.         }
  78.         //delayms(1000);
  79. }
复制代码

全部资料51hei下载地址:
矩阵键盘显示.zip (64.05 KB, 下载次数: 52)


评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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