1 4×4矩阵式键盘识别显示系统概述矩阵式键盘模式以N个端口连接控制N*N个按键,实时在LED数码管上显示按键信息。
显示按键信息,既降低了成本,又提高了精确度,省下了很多的I/O 端口为他用,相反,独立式按键虽编程简单,但占用I/O口资源较多,不适合在按键较多的场合应用。
并且在实际应用中经常要用到输入数字、字母、符号等操作功能,如电子密码锁、电话机键盘、计算器按键等,至少都需要12到16个按键,在这种情况下如果用独立式按键的话,显然太浪费I/O端口资源,为了解决这一问题,我们使用矩阵式键盘。
矩阵式键盘又称行列键盘,它是用N条I/O线作为行线,N条I/O线作为列线组成的键盘。
在行线和列线的每个交叉点上设置一个按键。
这样键盘上按键的个数就为N×N个。
这种行列式键盘结构能有效地提高单片机系统中I/O口的利用率。
最常见的键盘布局如图1.1所示。
一般由16个按键组成,在单片机中正好可以用一个P口实现16个按键功能,这也是在单片机系统中最常用的形式,本设计就采用这个键盘模式。
图1.1 键盘布局2系统主要硬件电路设计2.1单片机控制系统原理图2.1 单片机控制系统原理框图2.2单片机主机系统电路AT89C52单片机是51系列单片机的一个成员,是52单片机的简化版。
内部自带2K字节可编程FLASH存储器的低电压、高性能COMS八位微处理器,与Intel MCS-52系列单片机的指令和输出管脚相兼容。
由于将多功能八位CPU和闪速存储器结合在单个芯片中,因此,AT89C52构成的单片机系统是具有结构最简单、造价最低廉、效率最高的微控制系统,省去了外部的RAM、ROM和接口器件,减少了硬件开销,节省了成本,提高了系统的性价比。
图2.2 单片机主机系统图2.2.1时钟电路时钟信号用来提供单片机片内各种微操作的时间基准,时钟信号通常用两种电路形式得到:内部振荡和外部振荡。
MCS-52单片机内部有一个用于构成振荡器的高增益反向放大器,引脚XTALl和XTAL2分别是此放大电器的输入端和输出端,由于采用内部方式时,电路简单,所得的时钟信号比较稳定,实际使用中常采用这种方式,如图2.2所示在其外接晶体振荡器(简称晶振)或陶瓷谐振器就构成了内部振荡方式,片内高增益反向放大器与作为反馈元件的片外石英晶体或陶瓷谐振器一起可构成一个自激振荡器并产生振荡时钟脉冲。
图2.2中外接晶体以及电容C2和C3构成并联谐振电路,它们起稳定振荡频率、快速起振的作用,其值为30pF左右,晶振频率选11.0592MHz 。
2.2.2复位电路为了初始化单片机内部的某些特殊功能寄存器,必须利用复位电路,复位后可使CPU及系统各部件处于确定的初始状态,并从初始状态开始正常工作。
单片机的复位是靠外电路来实现的,在正常运行情况下,只要RST引脚上出现两个机器周期时间以上的高电平,即可引起系统复位,但如果RST引脚上持续为高电平,单片机就处于循环复位状态。
复位后系统将输入/输出(1/0)端口寄存器置为FFH,堆栈指针SP置为07H, SBUF内置为不定值,其余的寄存器全部清0,内部RAM的状态不受复位的影响,在系统上电时RAM的内容是不定的。
复位操作有两种情况,即上电复位和手动(开关)复位。
本系统采用上电复位方式。
图2.2中R1和Cl组成上电复位电路,其值R取为1KΩ, C取为10pF。
2.2.3 矩阵式键盘电路AT89C51单片机的并行口P1接4×4矩阵键盘,以P2.0-P2.3作输入线,以P2.4-P2.7作输出线;P0口输出按键信息,在数码管上显示每个按键的“0-F”序号。
矩阵键盘实际电路图连接如图2.3所示。
图2.3 矩阵式键盘电路当无按键闭合时,P2.0—P2.3与P2.4—P2.7之间开路。
当有键闭合时,与闭合键相连的两条I/O口线之间短路。
判断有无按键按下的方法是:(1)置列线P2.4—P2.7为输入状态,从行线P2.0—P2.3输出低电平,读入列线数据,若某一列线为低电平,则该列线上有键闭合。
(2)行线轮流输出低电平,从列线P2.4—P2.7读入数据,若有某一列为低电平,则对应行线上有键按下。
综合(1)(2)两步的结果,可确定按键编号。
2.3 译码显示电路译码电路中常用的显示器有LED(数码管)和LCD(液晶显示器)。
这两种显示器都具有线路简单、耗电少、成本低、寿命长等优点。
本系统输出结果选用1个LED显示。
数码管有共阴共阳之分,本系统采用8段共阴型LED,其原理图如图2.5所示。
数码管内部有8个发光二极管,公共端由8个发光二极管的阴极并接而成,正常显示时公共端接低电平(GND),各发光二极管是否点亮取决于a-dp各引脚上是否是高电平。
LED数码管的外形结构如图2.4,外部有10个引脚,其中3, 8脚为公共端也称位选端,其余8个引脚称为段选端,当要使某一位数码管显示某一数字((0-9中的一个)必须在这个数码管的段选端加上与数字显示数字对应的8位段选码(也称字形码),在位选端加上低电平即可。
由于系统要显示的内容比较简单,显示量不多,所以选用数码管既方便又经济。
LED有共阴极和共阳极两种。
如图3.1所示。
二极管的阴极连接在一起,通常此公共阴极接地,而共阳极则将发光二极管的阳极连接在一起,接入+5V的电压。
一位显示器由8个发光二极管组成,其中7个发光二极管构成字型“8”的各个笔划(段)a~g,另一个小数点为dp发光二极管。
当在某段发光二极管施加一定的正向电压时,该段笔划即亮;不加电压则暗。
符号和引脚共阳极共阴极图2.4 LED数码管结构图2.5 译码显示电路由于本显示电路功能简单,为使编程简单,采用直接输出模式,即把P0.0-P0.7端口用8芯排线连接到数码显示模块区域中的a-h端口上,要求:P0.0对应着a,P0.1对应着b,……,P0.7对应着h。
表2-1 LED显示段码3实验总电路图(单片机开发板)图3.1单片机开发板图3.1为本次课程设计所用的单片机开发板,这次课程设计主要用到单片机最小系统、矩阵键盘、数码管显示等电路模块。
4系统的软件设计4.1实验程序流程图图4.1流程图4.2实验程序#include<reg52.h>#include<absacc.h>#define uint unsigned int#define uchar unsigned charCode char tab[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e}; void delay(void){uchar i;for(i=254;i>0;i--);}uchar keyscan(void){ uchar sccode,recode;P2=0xf0;if((P2&0xf0)!=0xf0){delay();if((P2&0xf0)!=0xf0){ sccode=0xfe;while((sccode&0x10)!=0){P2=sccode;if((P2&0xf0)!=0xf0){recode=(P2&0xf0);sccode=sccode&0x0f;return((sccode)+(recode)) ;}elsesccode=(sccode<<1)|0x01;}}}return(0);}void display(uchar keydisp){ uchar keytab[16]={0xee,0xed,0xeb,0xe7,0xde,0xdd,0xdb,0xd7,0xbe,0xbd,0xbb,0x b7,0x7e,0x7d,0x7b,0x77};uchar m;for(m=0;m<16;m++){ if(keytab[m]==keydisp){ P1=0xfe;P0=tab[m];}}}void main(void){ uchar key;P1=0xfe;P0=0x40;P2=0xff;if(P2==0xff&P3^2==1){while(1){key=keyscan();display(key);}}}5实验结果图5.1 显示按键E的实验图图5.2 显示按键8的实验图6心得体会本次课程设计在刚开始拿到选题时大家都感觉到这个题目是比较简单的,其实不然,做了之后才发现设计电路虽然看起来不太麻烦,但由于我们平时接触的大部分是理论而对于实践方面涉猎的不是太多,所以一时很难找到所以费了很长时间去上网查资料、看参考书并且请教指导老师才逐渐熟悉,另外我们认为真正困难的程序也在我们共同努力下最终完成了。
在完成课程设计以后,我们发现我们还有许多不足,所学到的知识还远远不够,一些技能还有待提高。
在实际的项目开发过程中,不断深化单片机应用技术,不断积累应用行业的专业知识。
例如,我完成了“矩阵键盘显示系统”,就会对键盘的实现方法、数码管的工作原理、数码管不同的工作工作方式、单片机端口的应用等方面的专业技术有很深的认识。
以后碰到类似的项目时,很多东西就可以直接利用了。
有了扎实的单片机应用相关的基础知识,并且熟悉掌握了几款不同类型单片机的开发方法,再结合实际的应用背景,那么就可以随心所欲,设计出性能最优、结构最合理的单片机应用系统总的来说,本次课程设计还是成功的,完成了4×4键盘和正确的显示在LED 上,能正常运行。
参考文献[1] 谢自美.电子线路设计•实验•测试.华中科技大学出版社,2008[2] 陈小忠.单片机实用接口技术子程序[M].人民邮电出版社,2005[3] 阎石.数字电子技术基础(第三版). 北京:高等教育出版社,2003[4] 廖常初.现场总线概述[J].电工技术,2001[5] 彭同明,杨少华. 单片机原理及应用”课程改革的分析[J]. 武汉电力职业技术学院学报,2004,(1).。