矩阵键盘监测.docx
- 文档编号:2954510
- 上传时间:2022-11-16
- 格式:DOCX
- 页数:12
- 大小:69.54KB
矩阵键盘监测.docx
《矩阵键盘监测.docx》由会员分享,可在线阅读,更多相关《矩阵键盘监测.docx(12页珍藏版)》请在冰豆网上搜索。
矩阵键盘监测
单片机实验报告
——矩阵键盘检测
指导老师:
赵明英
小组成员:
赵艳春(04084001)
潘晓(04084019)
宣洋明(04084021)
目录
摘要I
1方案设计2
1.1设计任务2
1.2设计要求2
2电路设计3
2.14×4矩阵式键盘电路3
2.2LED数码显示电路4
2.3电路原理图4
3程序设计5
3.1程序流程图5
4系统仿真6
5总结与体会6
6程序代码························································6
摘要
本课题研究的内容是4×4矩阵式键盘识别技术,即以单片机为控制核心设计一个4×4的键盘和LED数码管的显示电路,按顺序键号为“0—F”,并在数码管上显示按下的按键的键号﹙“0—F”之间的值﹚。
本文通过方案设计、电路设计、程序设计、系统仿真四个部分来叙说4×4矩阵式键盘识别技术的具体实现。
其中电路设计对每个单元电路原理有详细解说,程序采用模块化、结构化设计,这样免去了内容的多次重复程序冗长的缺点,同时也更加清晰明了。
整个过程都可以在PROTEUS上进行仿真,并能成功实现该课题所要求的功能。
关键词:
89C52单片机;矩阵式键盘;LED数码管
一、方案设计
1.1设计任务
设计一个4×4的键盘和LED数码管的显示电路,按顺序键号为“0—F”,并在数码管上显示按下的按键的键号(“0—F”之间的值)。
1.2设计要求
﹙1﹚以单片机为控制核心,实现硬件电路的设计、程序设计,并在PROTEUS平台实现仿真。
﹙2﹚课程设计论文内容正确,结构合理。
二、电路设计
2.14×4矩阵式键盘电路
4×4矩阵式键盘电路图如图2.1所示,该图中左边的接口连接在单片机的P3口,低四位接列线,高四位接行线。
当要对键盘进行扫描时,可以一行一行进行扫描。
假设要扫描第二行,我们只需先让第二行为低电平,即P3.2为低电平,其余三行为高电平,然后读取列线上的电平,如果第二行的5号键按下,那么第二列的电平变为低电平,即P3.6为低电平,这样每个键按下都会改变P3口的电平,且不同键按下所对应的P3口的电平不同,这样便可以使单片机正确识别有无键按下以及哪个键按下。
图2.1矩阵式键盘电路
2.2LED数码显示电路
数码显示电路图如图2.2所示,该电路由一个LED数码显示管和一个集成电阻器组成。
其中显示块由若干发光二极管组合而成,图中的“8”字形显示块由8个发光二极管组成,每个二极管显示一字段,有共阴极和共阳极两种形式。
图中所用的集成电阻器,就是集成了7个电阻,在此与显示块连接是为了保证显示块能够正常显示。
图左边的端口分别接单片机上P0口的低七位,P0口不同的电平对应数码管不同的显示。
图2.2用的是阳极LED数码管,所以另一脚接电源,若为阴极LED数码管,则要接地。
图2.2LED数码管显示电路
2.3电路原理图
功能说明
用89C52单片机的P3口连接一个4*4的矩阵键盘,16个按钮分别表示0~F这16个数,并能在数码管上显示。
这个矩阵键盘是用4条I/O线作为行线,4条I/O作为列线组成的。
在行线和列线的交叉点上,设置一个按键,个数是4*4个。
数码管与芯片的P0口相连接,采用共阴的接法。
为了保证数码管具有足够的驱动能力,必须接上拉电阻。
键盘的扫描:
矩阵键盘按照行来扫描,例如扫描第一行时,往P3口输入0xfe,为了排除干扰信号,在检测输出结果时,做一个10ms的延时,若10ms后仍然检测到有按键按下,则为真的,然后再根据输出的结果判断(输出结果只能为0xee、0xde、0xbe、0x7e),具体的输出是什么(输出是0、1、2、3)。
扫描其他的行线时,原理与上述相同。
在每次扫描结束后,为了是数码管显示的结果真正符合要求,必须在输出结果前加输出检测。
硬件设计:
用到的主要部件
89C52芯片、按键4*4个、数码管、排阻一只
3程序设计
3.1程序流程图
3.1.1主程序流程图
四、系统仿真
五、总结与体会
实验过程中出现的问题:
利用proteus进行仿真的时候,当画完电路图并将程序下载到单片机中后,数码管并没有按照预期的显示出数字,但是在数码管的端口处电位显示都正常,后来才知道是是数码管的驱动能力不足造成的,于是在每个端口处接上拉电阻,终于使问题得以解决。
六、程序代码
#include
#include
#defineuintunsignedint
#defineucharunsignedchar
sbitkey=P1^7;
ucharcodetable[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
sbitdula=P2^6;
sbitwela=P2^7;
ucharnum;
voiddelay(uintx)
{
uchari;
while(x--)
for(i=0;i<110;i++);
}
voiddisp(ucharnum)//显示函数
{
P0=table[num];
dula=1;
dula=0;
}
voidkeycan()//按键扫描函数
{
uchart,key;
P3=0xfe;//扫描第一行
t=P3;
t=t&0xf0;
if(t!
=0xf0)
{
delay(10);//延时10ms判断是否真的按下
t=P3;
t=t&0xf0;
if(t!
=0xf0)
{
t=P3;
switch(t)
{
case0xee:
//第一个按键按下,输出0
key=0;
break;
case0xde:
//第二个按键按下,输出1
key=1;
break;
case0xbe:
//第三个按键按下,输出2
key=2;
break;
case0x7e:
//第四个按键按下,输出3
key=3;
break;
}
while(t!
=0xf0)//输出检测
{
t=P3;
t=t&0xf0;
}
disp(key);//输出结果
}
}
P3=0xfd;//扫描第二行
t=P3;
t=t&0xf0;
if(t!
=0xf0)
{
delay(10);
t=P3;
t=t&0xf0;
if(t!
=0xf0)
{
t=P3;
switch(t)
{
case0xed:
key=4;
break;
case0xdd:
key=5;
break;
case0xbd:
key=6;
break;
case0x7d:
key=7;
break;
}
while(t!
=0xf0)
{
t=P3;
t=t&0xf0;
}
disp(key);
}
}
P3=0xfb;//扫描第三行
t=P3;
t=t&0xf0;
if(t!
=0xf0)
{
delay(10);
t=P3;
t=t&0xf0;
if(t!
=0xf0)
{
t=P3;
switch(t)
{
case0xeeb:
key=8;
break;
case0xdb:
key=9;
break;
case0xbb:
key=10;
break;
case0x7b:
key=11;
break;
}
while(t!
=0xf0)
{
t=P3;
t=t&0xf0;
}
disp(key);
}
}
P3=0xf7;//扫描第四行
t=P3;
t=t&0xf0;
if(t!
=0xf0)
{
delay(10);
t=P3;
t=t&0xf0;
if(t!
=0xf0)
{
t=P3;
switch(t)
{
case0xe7:
key=12;
break;
case0xd7:
key=13;
break;
case0xb7:
key=14;
break;
case0x77:
key=15;
break;
}
while(t!
=0xf0)
{
t=P3;
t=t&0xf0;
}
disp(key);
}
}
}
voidmain()//主函数
{
P0=0;
dula=1;
dula=0;
P0=0xc0;
wela=1;
wela=0;
while
(1)
{
keycan();
}
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 矩阵 键盘 监测