基于单片机的矩阵键盘操作实验
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验十二基于单片机的矩阵键盘操作实验
12.1 实验目的
1. 掌握单片机AT89C52与矩阵键盘的接口技术。
2. 用protues实现该接口的电路设计和程序设计,并进行实时交互仿真。
3. AT89C52单片机对4×4矩阵键盘进行动态扫描,当按完一次键盘时,可
将相应按键值(0-F)实时显示在数码管上。
12.2 PROTUES电路设计
单片机与矩阵键盘的接口电路原理图如图12-1所示。
图12-1 单片机与矩阵键盘的接口电路原理图
12.3 实验内容
键盘分编码键盘和非编码键盘。
键盘上闭合键的识别由专用的硬件编码器实现,并产生键编码号或键值的称为编码键盘,如计算机键盘。
在单片机组成的各种系统中,用的最多的是非编码键盘,也有用到编码键盘的。
1.从PROTUES库中选取元器件
① AT89C52:单片机;
② RES:电阻;
③ 7SEG-MPX2-CC-BLUE:七段共阴绿色数码管;
④ CAP/CAP-ELEC:电容、电解电容;
⑤ CRYSTAL:晶振;
⑥ BUTTON:按键。
2.放置元器件
3.放置电源和地(终端)
4.连线
5.元器件属性设置
6.电气检测
12.4 程序设计
1. 流程图
矩阵键盘操作程序流程图如图12-2所示。
图12-2 矩阵键盘操作程序流程图
2.源程序设计
C程序设计:
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit we1=P1^0;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71,0};
uchar num,temp,num1;
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
uchar keyscan();
void display(uchar aa);
void main()
{
num=17;
while(1)
{
display(keyscan());
}
}
void display(uchar aa)
{
P2=table[aa-1];
we1=0;
}
uchar keyscan()
{
P3=0xfe;
temp=P3;
temp=temp&0xf0;
while(temp!=0xf0)
{
delay(5);
temp=P3;
temp=temp&0xf0;
while(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xee:num=1;
break;
case 0xde:num=2;
break;
case 0xbe:num=3;
break;
case 0x7e:num=4;
break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
}
}
P3=0xfd;
temp=P3;
temp=temp&0xf0;
while(temp!=0xf0)
{
delay(5);
temp=P3;
temp=temp&0xf0;
while(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xed:num=5;
break;
case 0xdd:num=6;
break;
case 0xbd:num=7;
break;
case 0x7d:num=8;
break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
}
}
P3=0xfb;
temp=P3;
temp=temp&0xf0;
while(temp!=0xf0)
{
delay(5);
temp=P3;
temp=temp&0xf0;
while(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xeb:num=9;
break;
case 0xdb:num=10;
break;
case 0xbb:num=11;
break;
case 0x7b:num=12;
break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
}
}
P3=0xf7;
temp=P3;
temp=temp&0xf0;
while(temp!=0xf0)
{
delay(5);
temp=P3;
temp=temp&0xf0;
while(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xe7:num=13;
break;
case 0xd7:num=14;
break;
case 0xb7:num=15;
break;
case 0x77:num=16;
break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
}
}
return num;
}
12.5 PROTUES仿真
矩阵键盘仿真图如图12-3所示。
图12-3 矩阵键盘与单片机仿真片段图。