找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机4X4矩阵键盘扫描的proteus仿真和程序源码

[复制链接]
跳转到指定楼层
楼主
4X4矩阵键盘扫描仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)


单片机源程序如下:
  1. #include<reg51.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. #define SCANPORT P1
  5. sbit spk=P2^3;                                                                        //按键提示音驱动端口
  6. uchar code table[]={ 0x3f,0x06,0x5b,0x4f,0x66,
  7.                                          0x6d,0x7d,0x07,0x7f,0x6f,  //数码管显示代码
  8.                                          0x77,0x7c,0x39,0x5e,0x79,
  9.                                          0x71};
  10. uchar a_LineScan[4]={0xEF,0xDF,0xBF,0x7F};            //列扫描赋值

  11. void delay(uchar x)
  12. {
  13.   uchar j;
  14.   while(x--)  
  15.   for(j=110;j>0;j--);
  16. }

  17. uchar KeyScan()                                                                    //扫描函数
  18. {
  19.         uchar Temp=0;                                 
  20.         uchar i=0,j=0;            

  21.         for(i=0;i<4;i++)       
  22.                 {
  23.                         SCANPORT=a_LineScan[i];                        //定义扫描端口          
  24.                         Temp=SCANPORT & 0x0F;                            //取低四位扫描信号
  25.                         if(Temp!=0)
  26.                         {
  27.                         delay(10);                                                    //消抖函数
  28.                         if(Temp!=0)
  29.                         {                                               
  30.                         if(Temp!=0x0F)                                             //扫描按键是否按下
  31.                                 {                                                                         
  32.                                 switch(Temp)
  33.                                         {
  34.                                         case 0x0E: j=10;break;            //第一列
  35.                                         case 0x0D: j=20;break;                //第二列
  36.                                         case 0x0B: j=30;break;                //第三列
  37.                                         case 0x07: j=40;break;                //第四列
  38.                                         default:   j=50;break;                //输入错误
  39.                                         }
  40.                                 break;
  41.                                 }
  42.                         }
  43.                         }
  44.                 }
  45.         return i+j+1;                                                                 //送出返回值
  46. }
  47. void KeyProcess(unsigned char KeyCode)                    //数码管显示函数
  48. {
  49.                
  50.         switch(KeyCode)
  51.                 {                                                                                //j=10
  52.                 case 11:P0=table[0];spk=1;break;            //'0'
  53.                 case 12:P0=table[1];spk=1;break;                //'1'
  54.                 case 13:P0=table[2];spk=1;break;               
  55.                 case 14:P0=table[3];spk=1;break;               
  56.                                                                                                   //j=20
  57.                 case 21:P0=table[4];spk=1;break;                //'4'
  58.                 case 22:P0=table[5];spk=1;break;                //'5'
  59.                 case 23:P0=table[6];spk=1;break;
  60.                 case 24:P0=table[7];spk=1;break;
  61.                                                                                                   //j=30
  62.                 case 31:P0=table[8];spk=1;break;                //'8'
  63.                 case 32:P0=table[9];spk=1;break;                //'9'
  64.                 case 33:P0=table[10];spk=1;break;               
  65.                 case 34:P0=table[11];spk=1;break;               
  66.                                                                                                 //j=40
  67.                 case 41:P0=table[12];spk=1;break;                //'C'
  68.                 case 42:P0=table[13];spk=1;break;                //'d'
  69.                 case 43:P0=table[14];spk=1;break;               
  70.                 case 44:P0=table[15];spk=1;break;               

  71.                 default:break;                                                        //无法识别
  72.                 }
  73. }
  74. void main()
  75. {                                                                                                  
  76.         spk=0;                                                                                //扬声器初始化
  77.         P0=0;
  78.         while(1)
  79.         {
  80.                 KeyProcess(KeyScan());
  81.                 spk=0;                                                                        //复位扬声器
  82.         }
  83. }
复制代码

所有资料51hei提供下载:

20161111144-李作鑫4×4键盘矩阵按键.rar (66.55 KB, 下载次数: 129)


评分

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

查看全部评分

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

使用道具 举报

沙发
ID:16695 发表于 2020-3-24 09:00 | 只看该作者
谢谢学习
回复

使用道具 举报

板凳
ID:928738 发表于 2022-1-17 10:50 | 只看该作者
你好!请问一下,颜色怎么修改的?我试过了修改背景,但是没有实现
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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