当前位置:文档之家› 矩阵键盘控制数码管

矩阵键盘控制数码管

专业综合设计报告项目名称:基于矩阵键盘和LED数码管显示器的简易人机界面设计学生姓名:同组同学:专业名称:班级:指导教师:项目起止日期:2012年03月12日至2012年03月30日目录摘要 (3)1、概述 (3)2、总体设计方案 (3)2.1总体设计要求 (3)2.2系统框图 (4)3、系统硬件设计 (4)3.1单片机的最小系统 (5)3.1.1电源电路 (5)3.1.2复位电路 (5)3.1.3晶振电路 (6)3.2 LED数码管显示部分 (6)3.3矩阵键盘 (7)3.3.1键盘的工作原理 (7)3.3.2键盘检测原理 (7)4、系统软件设计 (9)4.1 软件设计思想 (9)4.2 主程序设计 (10)4.3 子程序设计 (11)4.3.1 数码管显示程序设计 (11)4.3.2 键盘检测程序设计 (11)4.3.3延时函数程序设计 (14)5、系统调试 (14)6.设计体会 (15)参考文献 (15)摘要单片机自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-13.1.2复位电路为了确保系统中电路稳定可靠地工作,复位电路是必不可少的一部分,复位电路的第一功能是上电复位。

一般单片机电路正常工作需要供电5V±5%,即4.75~5.25V。

由于系统电路是时序数字电路,它需要稳定的时钟信号,因此在电源上电时,只有当VCC超过4.75V低于5.25V以及晶体振荡器稳定工作时,复位信号才被撤除,系统电路开始正常工作。

复位电路如图3-2所示。

图3-23.1.3晶振电路晶振是为电路提供频率基准的元器件,通常分成有源晶振和无源晶振两个大类,无源晶振通常信号质量和精度较差,需要精确匹配外围电路(电感、电容、电阻等),如需更换晶振时要同时更换外围的电路。

有源晶振不需要芯片的内部振荡器,可以提供高精度的频率基准,信号质量也较无源晶振要好。

本设计选用有源晶振,晶振电路如图3-3所示。

图3-33.2 LED数码管显示部分数码管采用的是共阳极的四位数码管,由P2端口的4,5,6,7口分别作为四位数码管的位选,P0端口作为四位数码管的位选。

数码管电路图如图3-4所示。

图3-43.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-64、系统软件设计4.1 软件设计思想主程序先进行设置数码管闲时显示‘- - - -’,并启动,再进行键盘检测载入0-F 字符,然后判断是否有按键按下,按不同情况进行循环调用子程序。

进入子程序后,首先设置相应的程序,反复调用显示子程序,并在显示过程中反复调用键盘扫描子程序进行延时,判断是否退出相应的显示子程序。

设计过程中,很好地提高了按键响应速度。

如图4-1所示为软件系统框图。

显示编码:因为该数码管为共阳极显示,可以把I/O 口输出位对应每段数码管显示段,因此若要使数码管一段点亮,则该位为“0”;该段不亮,则该位为“1”。

所以对“0-F ”的编码,并将编码写入数组中便于查表操作。

“0-F ”对应的十六进制数如下表4-2:表4-2图 4-1 软件设计框图4.2 主程序设计程序开始后只有一个不断执行键盘检测函数的循环。

图4-3为主程序的流程图。

图4-3 主程序流程图主程序如下:void main()//主函数{num=17;P2=0x0f;//数码管位选,让四个数码管都亮P0=0xbf;//数码管段选,程序刚开始数码管显示‘- - - -’while(1)//死循环,始终执行键盘检测和数码管的显示{P0=table[keyscan()-1];//数码管的显示,调用键盘检测函数}}4.3 子程序设计本设计的子程序包括数码管显示程序、按键检测程序、延时程序三种,下面依次详细介绍。

4.3.1 数码管显示程序设计将0-F字符的十六进制码编好,放入数组table[]中。

在程序开始时数码管显示‘- - - - ’。

当有按键按下时,则数码管显示与该按键相对应的字符。

数码管显示子程序如下:Uchar code table[]={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端口控制数码管显示。

在键盘检测函数里,依次送出列检测信号,而每组列检测信号输出后,即读取按键状态,若有按下按键,则进行键值的判断与计算,再将其对应的字符信号送入数码管显示。

部分键盘检测子程序如下:uchar keyscan()//键盘检测部分{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){case 0xee:num=1;//如果P3=0xee,则检测到键盘第一个键按下,以下同理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); //延时5毫秒,消抖temp=P3;temp=temp&0xf0;while(temp!=0xf0) //再次确认是否有按键按下{temp=P3;switch(temp){case 0xed:num=5;//如果P3=0xed,则检测到键盘第五个键按下,以下同理break;case 0xdd:num=6;break;case 0xbd:num=7;break;case 0x7d:num=8;break;}while(temp!=0xf0){temp=P3;temp=temp&0xf0;}}}return num;}4.3.3延时函数程序设计本设计采用有返回值的延时函数,延时函数如下:void delay(uint z)//有返回值的延时函数{uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}5、系统调试此次系统设计的结果很好,数码管和键盘都能按原先设想的工作。

这个方案设计的4*4键盘检测显示字符,电路简单,成本较低,且较容易扩展;数码管各段亮度均匀、充足;显示字符稳定、清晰无串扰.在KEIL软件中的仿真如图5-1所示。

相关主题