标题:
单片机矩阵键盘读取实验代码+Proteus仿真
[打印本页]
作者:
冯某某
时间:
2020-6-25 18:06
标题:
单片机矩阵键盘读取实验代码+Proteus仿真
1、掌握矩阵键盘工作原理和扫描方法。
2、学习逐行扫描键盘的编程方法。
3、学习按键消抖的方法。
二、实验内容1、编写程序实现2×4矩阵键盘扫描读取。
2、键盘扫描与LED显示电路配合实现按键扫描及显示输出。
依次定义S1~S8的键值为“1~8”,按下某一按键时,在LED上显示其键值。
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
51hei.png
(23.36 KB, 下载次数: 81)
下载附件
2020-6-28 03:49 上传
单片机源程序如下:
#include<reg51.h>
sbit P24 = P0^4;
sbit P25 = P0^5;
sbit P26 = P0^6;
sbit P27 = P0^7;
typedef unsigned char uchar;
typedef unsigned int uint;
unsigned char code led[] = { 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,
0x88,0x83,0xc6,0xa1,0x86,0x8e
}; //共阳极数码管
void delay(uint xms)
{
uint i,j;
for(i=xms; i>0; i--)
for(j=112; j>0; j--);
}
void main()
{
uchar temp;//第一行按键检测
P0=0xfe;
P2=0x00;
temp=P0;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(10);
temp=P0;
temp=temp&0xf0;
if(temp!=0xf0)
{
switch(P0)
{
case 0xee:
delay(1);
P2=led[0];
while(P0==0xee)
{
delay(100);
P0=0xfe;
if(P0!=0xee) break;
}
case 0xde:
P2=led[1];
while(P0==0xde)
{
delay(100);
P0=0xfe;
if(P0!=0xde) break;
}
case 0xbe:
delay(1);
P2=led[2];
while(P0==0xbe)
{
delay(100);
P0=0xfe;
if(P0!=0xbe) break;
}
case 0x7e:
P2=led[3];
while(P0==0x7e)
{
delay(100);
P0=0xfe;
if(P0!=0x7e) break;
}
}
}
}
/////////////////////////////////////////////////////////////
P0=0xfd; //第二行按键检测
temp=P0;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(10);
temp=P0;
temp=temp&0xf0;
if(temp!=0xf0)
{
switch(P0)
{
case 0xed:
delay(1);
P2=led[4];
while(P0==0xed)
{
delay(100);
P0=0xfd;
if(P0!=0xed) break;
}
case 0xdd:
P2=led[5];
while(P0==0xdd)
{
delay(100);
P0=0xfd;
if(P0!=0xdd) break;
}
case 0xbd:
delay(1);
P2=led[6];
while(P0==0xbd)
{
delay(100);
P0=0xfd;
if(P0!=0xbd) break;
}
case 0x7d:
P2=led[7];
while(P0==0x7d)
{
delay(100);
P0=0xfd;
if(P0!=0x7d) break;
}
}
}
}
}
复制代码
所有资料51hei提供下载:
附件.zip
(68.7 KB, 下载次数: 17)
2020-6-25 18:05 上传
点击文件名下载附件
下载积分: 黑币 -5
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1