矩阵键盘控制数码管.docx
- 文档编号:28272550
- 上传时间:2023-07-10
- 格式:DOCX
- 页数:13
- 大小:224.41KB
矩阵键盘控制数码管.docx
《矩阵键盘控制数码管.docx》由会员分享,可在线阅读,更多相关《矩阵键盘控制数码管.docx(13页珍藏版)》请在冰豆网上搜索。
矩阵键盘控制数码管
专业综合设计报告
项目名称:
基于矩阵键盘和LED数码管显示器的简易
人机界面设计
学生姓名:
同组同学:
专业名称:
班级:
指导教师:
项目起止日期:
2012年03月12日至2012年03月30日
摘要
单片机自20世纪70年代以来,以其极高的性价比,以及方便小巧受到人们极大的重视和关注。
本设计选用AT89S52芯片作为控制芯片,来实现矩阵键盘对LED数码管显示的控制。
通过单片机的内部控制实现对硬件电路的设计,从而实现对4*4矩阵键盘的检测识别。
用单片机的P3口连接4×4矩阵键盘,并以单片机的P3.0-P3.3口作键盘输入的列线,以单片机的P3.4-P3.7口作为键盘输入的行线,然后用P0.0-P0.7作输出线,通过上拉电阻在显示器上显示不同的字符“0-F”。
在硬件电路的基础上加上软件程序的控制来实现本设计。
其工作过程为:
先判断是否有键按下,如果没有键按下,则继续检测整个程序,如果有键按下,则识别是哪一个键按下,最后通过LED数码管显示该按键所对应的序号。
关键词:
AT89S52芯片;4*4矩阵键盘;键盘识别;LED数码管
1、概述
随着单片机系统的日益更新,以及人们对产品的人机交互能力的不断提高;使得单片机系统的人机界面设计能力成为学习单片机的一项重要的基础内容。
而4*4键盘的操作和LED数码管的动态显示是人机界面设计中最基础的内容,掌握这些基础的设计能力对以后的学习研究是非常必要的。
2、总体设计方案
2.1总体设计要求
本系统采用单片机AT89S52为数码管的控制核心,制造一种简单的4*4键盘检测显示,能够在目测条件下四位数码管各段亮度均匀、充足,本系统具有硬件少,结构简单,容易实现,性能稳定可靠,成本低等特点。
根据设计要求,确定的设计方案如下:
2.1.1选择AT89S52单片机作为整个系统的核心器件,对整个系统进行总体控制,发送并实时处理系统信息。
2.1.2通过编程显示字符:
0-F。
2.1.3当检测有按键按下时数码管显示与该按键相对应的字符。
2.1.4键盘检测信号连接到单片机的P3口,显示信号连接到单片机的P0口。
2.1.5数码管点亮过程有程序控制,P2.4,P2.5,P2.6,P2.7分别作为四位数码管的位选,数码管采用直接驱动方式,共阳极接法。
2.2系统框图
本设计行、列驱动电路,显示屏电路,运用单片机的智能化,系统将每个功能电路模块连接在一起,总体结构设计如下图2-1所示:
图2-1系统框图
3、系统硬件设计
本系统的硬件电路是由单片机最小系统、按键电路、数码管显示电路三部分组成。
其中,单片机最小系统包括电源电路、复位电路和晶振电路构成;按键电路采用独立编码方式;显示部分使用共阳型高台扫描、高态显示信号驱动电路,完成数字效果。
3.1单片机的最小系统
3.1.1电源电路
电源是一切器件工作的根本,有一个稳定的电源是很重要的。
由于单片机和数码管的功耗都很小,所以本设计选用单片机下载线直接供电,实验证明单片机和数码管的工作正常。
如图3-1所示,电源模块。
图3-1
3.1.2复位电路
为了确保系统中电路稳定可靠地工作,复位电路是必不可少的一部分,复位电路的第一功能是上电复位。
一般单片机电路正常工作需要供电5V±5%,即4.75~5.25V。
由于系统电路是时序数字电路,它需要稳定的时钟信号,因此在电源上电时,只有当VCC超过4.75V低于5.25V以及晶体振荡器稳定工作时,复位信号才被撤除,系统电路开始正常工作。
复位电路如图3-2所示。
图3-2
3.1.3晶振电路
晶振是为电路提供频率基准的元器件,通常分成有源晶振和无源晶振两个大类,无源晶振通常信号质量和精度较差,需要精确匹配外围电路(电感、电容、电阻等),如需更换晶振时要同时更换外围的电路。
有源晶振不需要芯片的内部振荡器,可以提供高精度的频率基准,信号质量也较无源晶振要好。
本设计选用有源晶振,晶振电路如图3-3所示。
图3-3
3.2LED数码管显示部分
数码管采用的是共阳极的四位数码管,由P2端口的4,5,6,7口分别作为四位数码管的位选,P0端口作为四位数码管的位选。
数码管电路图如图3-4所示。
图3-4
3.3矩阵键盘
3.3.1键盘的工作原理
按键设置在行、列线交点上,行、列线分别连接到按键开关的两端。
无按键按下时,行线处于高电平的状态,当有按键按下时,行线电平由此行线相连的列线电平决定。
3.3.2键盘检测原理
键盘的检测,首先要解决的问题是键盘抖动现象。
(如图3-5所示)消抖的方法有两种,软件消抖和硬件消抖。
由于硬件消抖结构比软件复杂,所以本设计采用的是软件消抖的方法,既在程序中加入5毫秒的延时,延时后再次返回P3的值二次判断是否有键盘按下。
图3-5
首先,将0xfe赋于P3口(此值是用于检测矩阵键盘的第一行按键),然后看P3&0xf0是否等于0xf0,如果等于则键盘第一行无按键按下,反之则键盘第一行有按键按下。
具体是哪个键按下要根据P3&0xf0的值确定。
例如:
P3&0xf0=0xe0,则表示键盘第一行的第一个键按下。
将键盘检测函数的值返回table[]中,这样数码管就能显示与按键一相对应的字符了。
P3等于0xfd,0xfb,0xf7分别用于检测按键的二,三,四行的,如果第一行检测无按键按下,则跳到其他行进行检测,如此循环。
键盘连接图如图3-6所示。
图3-6
4、系统软件设计
4.1软件设计思想
主程序先进行设置数码管闲时显示‘----’,并启动,再进行键盘检测载入0-F字符,然后判断是否有按键按下,按不同情况进行循环调用子程序。
进入子程序后,首先设置相应的程序,反复调用显示子程序,并在显示过程中反复调用键盘扫描子程序进行延时,判断是否退出相应的显示子程序。
设计过程中,很好地提高了按键响应速度。
如图4-1所示为软件系统框图。
图4-1软件设计框图
显示编码:
因为该数码管为共阳极显示,可以把I/O口输出位对应每段数码管显示段,因此若要使数码管一段点亮,则该位为“0”;该段不亮,则该位为“1”。
所以对“0-F”的编码,并将编码写入数组中便于查表操作。
“0-F”对应的十六进制数如下表4-2:
0
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
0xc0
0xf9
0xa4
0xb0
0x99
0x92
0x82
0xf8
0x80
0x90
0x88
0x83
0xc6
0xa1
0x86
0x8e
表4-2
4.2主程序设计
程序开始后只有一个不断执行键盘检测函数的循环。
图4-3为主程序的流程图。
图4-3主程序流程图
主程序如下:
voidmain()//主函数
{
num=17;
P2=0x0f;//数码管位选,让四个数码管都亮
P0=0xbf;//数码管段选,程序刚开始数码管显示‘----’
while
(1)//死循环,始终执行键盘检测和数码管的显示
{
P0=table[keyscan()-1];//数码管的显示,调用键盘检测函数
}
}
4.3子程序设计
本设计的子程序包括数码管显示程序、按键检测程序、延时程序三种,下面依次详细介绍。
4.3.1数码管显示程序设计
将0-F字符的十六进制码编好,放入数组table[]中。
在程序开始时数码管显示‘----’。
当有按键按下时,则数码管显示与该按键相对应的字符。
数码管显示子程序如下:
Ucharcodetable[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,
0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xbf};
P2=0x0f;//数码管位选,让四个数码管都亮
P0=table[keyscan()-1];//调用键盘检测函数
4.3.2键盘检测程序设计
系统中采用4*4矩阵键盘,在P3口接按键,P0端口控制数码管显示。
在键盘检测函数里,依次送出列检测信号,而每组列检测信号输出后,即读取按键状态,若有按下按键,则进行键值的判断与计算,再将其对应的字符信号送入数码管显示。
部分键盘检测子程序如下:
ucharkeyscan()//键盘检测部分
{
P3=0xfe;
temp=P3;
temp=temp&0xf0;
while(temp!
=0xf0)
{
delay(5);//延时5毫秒,消抖
temp=P3;
temp=temp&0xf0;
while(temp!
=0xf0)//再次确认是否有按键按下
{
temp=P3;
switch(temp)
{
case0xee:
num=1;//如果P3=0xee,则检测到键盘第一个键按下,以下同理
break;
case0xde:
num=2;
break;
case0xbe:
num=3;
break;
case0x7e:
num=4;
break;
}
while(temp!
=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
}
}
P3=0xfd;
temp=P3;
temp=temp&0xf0;
while(temp!
=0xf0)
{
delay(5);//延时5毫秒,消抖
temp=P3;
temp=temp&0xf0;
while(temp!
=0xf0)//再次确认是否有按键按下
{
temp=P3;
switch(temp)
{
case0xed:
num=5;//如果P3=0xed,则检测到键盘第五个键按下,以下同理
break;
case0xdd:
num=6;
break;
case0xbd:
num=7;
break;
case0x7d:
num=8;
break;
}
while(temp!
=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
}
}
returnnum;
}
4.3.3延时函数程序设计
本设计采用有返回值的延时函数,延时函数如下:
voiddelay(uintz)//有返回值的延时函数
{
uintx,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
5、系统调试
此次系统设计的结果很好,数码管和键盘都能按原先设想的工作。
这个方案设计的4*4键盘检测显示字符,电路简单,成本较低,且较容易扩展;数码管各段亮度均匀、充足;显示字符稳定、清晰无串扰.在KEIL软件中的仿真如图5-1所示。
图5-1
6.设计体会
通过此次课程设计,让我学到了许多不知道的知识,在单片机的基本功能、数码管的显示、矩阵键盘的使用,还有其他元器件的选用有了一个较清晰的认识,在程序设计的思路,理论到实践的运用能力有了很大提高。
通过这次课程设计的学习,我有了一定的实践经验和理论基础,让我位以后的学习奠定了基础;在设计思路上,通过查阅资料了解到许多方法,认识到程序形式的多样性。
认识到设计必须要有自己的思想和独特的地方。
要努力拓展自己的知识面,使自己的知识系统化。
理论知识需要实践的考验,光有书本知识是远远不够的。
在以后的学习中要时刻注重理论与实践的结合,秉承我们的校训“动手动脑,全面发展”。
参考文献
(1)沈文.51单片机C语言开发入门指导.北京:
清华大学出版社,2003;
(2)郭天祥.新概念51单片机C语言教程.北京:
电子工业出版社,2009;
(3)王静霞.单片机应用技术.北京:
电子工业出版社,2009;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 矩阵 键盘 控制 数码管