找回密码
 立即注册

QQ登录

只需一步,快速开始

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

51单片机矩阵式键盘(4*4)源程序+Proteus仿真

[复制链接]
跳转到指定楼层
楼主






单片机源程序如下:
  1. /*读取键盘值(先读行,后读列,两两相加,再来个switch判断,函数返回值0-15)
  2. -->  若有键按下 P2显示0-f          -->判断是否松开按键,没松开等待,松开返回程序
  3. 起始位置
  4. */
  5. #include <reg51.h>
  6. #include "delay.h"

  7. #define unit unsigned int
  8. #define uchar unsigned char

  9. uchar led[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,
  10. 0x77,0x7c,0x39,0x5e,0x79,0x71,};//0-f  共阴数码管
  11. uchar key;
  12. uchar i,j;

  13. uchar keycl()//读取键盘的函数(注:子函数最好放在main前,这样就不用申明)
  14. {
  15.         uchar a,b;
  16.         P1=0x0f;
  17.         i=P1;//读取P1低4位,放在i
  18.         P1=0xf0;
  19.         j=P1;//不用说也知道吧
  20.         a=i+j;//行+列
  21.                 switch(a)//16种情况
  22.                 {
  23.                         case 0x7e:b=0;break;
  24.                         case 0xbe:b=1;break;
  25.                         case 0xde:b=2;break;
  26.                         case 0xee:b=3;break;
  27.                         case 0x7d:b=4;break;
  28.                         case 0xbd:b=5;break;
  29.                         case 0xdd:b=6;break;
  30.                         case 0xed:b=7;break;
  31.                         case 0x7b:b=8;break;
  32.                         case 0xbb:b=9;break;
  33.                         case 0xdb:b=10;break;
  34.                         case 0xeb:b=11;break;
  35.                         case 0x77:b=12;break;
  36.                         case 0xb7:b=13;break;
  37.                         case 0xd7:b=14;break;
  38.                         case 0xe7:b=15;break;
  39.                         default:b=0xff ;break;
  40.         }
  41.            return(b);//函数返回值
  42. }

  43. void main()
  44. {
  45.         P2=0x00;//数码管啥都不显示
  46.         while(1)
  47.         {
  48.                  key=keycl();//读键盘值,key=函数返回值
  49.                 if(key!=0xff)//有键按下么?
  50.                 {
  51.                         delay(5);
  52.                          if(key!=0xff)//真的有么?有的 就继续往下走
  53.                         {
  54.                        
  55.                                 P2=led[key];
  56.                                 while(P1!=0xf0);//你松开了按键么?没就在这等着
  57.                                 do{delay(5);}
  58.                                 while(P1!=0xf0);//你真的松开了么?假的就等着
  59.                         }
  60.                 }
  61.      }
  62. }
复制代码

所有资料51hei提供下载:
矩阵键盘.zip (45.33 KB, 下载次数: 40)

评分

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

查看全部评分

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

使用道具 举报

沙发
ID:66287 发表于 2019-7-29 09:33 | 只看该作者
if(key!=0xff)//有键按下么?
                {
                        delay(5);
                         if(key!=0xff)//真的有么?有的 就继续往下走
                        {
                        
                                P2=led[key];
                                while(P1!=0xf0);//你松开了按键么?没就在这等着
                                do{delay(5);}
                                while(P1!=0xf0);//你真的松开了么?假的就等着
                        }
                }

你的CPU就一直等着,什么都不干?
回复

使用道具 举报

板凳
ID:505677 发表于 2019-7-29 20:04 | 只看该作者
bhjyqjs 发表于 2019-7-29 09:33
if(key!=0xff)//有键按下么?
                {
                        delay(5);

。。。我还是没太明白,,初学,,cpu不等着那要做什么呢?
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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