安徽工程科技学院机电学院毕业设计(论文)
3.2.1 矩阵键盘的电路和外观图
图3-3 矩阵键盘电路
上图已经明确了该键盘电路和AT89S52的接线原理了,从P1.0到P1.7按顺序连接,与之对应的是键盘外观排列图,如图3-4所示:
图3-4 矩阵按键排列
3.2.2 4×4矩阵键盘的工作原理
先从AT89S52单片机的P1口的高四位输出低电平,低四位输出高电平,从P1口的低四位读取键盘状态。再从P1口的低四位输出低电平,高四位输出高电平,从P1口的高四位读取键盘状态。将两次读取结果组合起来就可以得到当前按键的特征编码。使用上述方法我们得到16个键的特征编码。
举例说明如何得到按键的特征编码:假设“1”键被按下,找其按键的特征编码。 从单片机AT89S52的P1口的高四位输出低电平,即P1.4-P1.7为输出口。低四位输出高电平,即P1.0-P1.3为输入口。读P1口的低四位状态为“1101”,其值为“0DH”。再从P1口的高四位输出高电平,即P1.4-P1.7为输入口。低四位输出低电平,即P1.0-P1.3为输出口,读P1口的高四位状态为“1110”,其值为“E0H”。将两次读出的P0口状态值进行逻辑或运算就得到其按键的特征编码为“EDH”。用同样的方法可以得到其它15个按键的特征编码。
根据按键的特征编码,查表得到按键的顺序编码:将用上述方法得到的16个按键的特征编码依照按键排列的顺序排成一张特征编码与顺序编码的对应关系表,然后用当前读得的特征编码来查表,当表中有该特征编码时,它所在的位置就是对应的顺序。
- 11 -
郭焰昌:基于液晶显示的乘法口诀测试仪的设计
3.2.3 矩阵键盘键值查找程序设计的思路
识别键盘有无按键按下,若无键按下返回。如果有键按下,找出具体的按键值,通过查找程序我们就可以知道那个案件按下去了,并可以通过具体公式计算出来。
扫描一个按键通常为几微妙,而测试者用手来按键盘时候大概需要零点几秒来完成,所以在每次扫描键盘时候就得看看先前的那个按下的按钮是否有放开。 3.2.4 如何扫描矩阵键盘按键
从总电路图接线上可以看到键盘设计的0—9,ABCDFE,16个键依次顺序排列,第一行为:0-3,第二行为:4-7,第三行为:8、9、A、B,第四行为C、D、E、F。
当扫描第一行0、1、2、3四个按键:此时使单片机AT89S52P的P1.4输出“0”,当P1.4输出“0”时,只要把0、1、2、3四个键中任意一键按下,那么从P1口输入到ACC(累加器)的值的高4位D4-D7中就会有“0”出现。此时把ACC值依次送入进位信号中检查,每送入检查一次后,将R0的值加1。R0最先值为00H,所以第一次扫描“0”号键时,R0为00H,再扫描“1”号键时,R0的值为01H。当4个键盘都扫描完后,如果有键盘按下,则跳转到KEYIN处执行,在判断有键闭合时,调用软件延时程序去除键盘抖动,若该键仍然处于闭合状态,则该键按下。用同样的依次方法去扫描确定第二、第三、第四行键盘。
但是如何识别键盘键值是设计乘法口诀键盘的关键地方,其识别公式是:键值N=所在行的首键号+列号(0-3)。如第二行的第一列的按键被按下,我们可以判断,第二行的首键号是4,列号是1,所以键值N=4+1=5,与设计吻合。 3.2.5 键盘的防抖动技术在设计里的应用
一般情况下,键盘采用机械弹力开关来反映一个电压信号的开、断。由于机械触点的弹性作用,在闭合和断开会发生有抖动现象。抖动时间的长短由按键的机械特性决定,一般在5-10ms之间。为保证按键不发生误动作,在编写按键处理程序中必须有防抖动措施。防抖动措施有软件和硬件两种方法。
硬件防抖动电路的典型办法是采用RS触发器,构成双稳态消抖电路,一般在用对按键的操作过程中要求比较严格。
对于初学者而言,采用上面那个方法去抖动的技术难度较大,因此使用软件消抖的办法是很简单的。
它的工作原理是:当软件检测到第一次按钮按下时,执行一个10-20ms的软件延时程序,之后再检测该键电平是否仍然维持在闭合状态,若仍然保持,则确认此按键真正按下,从而消去了抖动的影响。
根据如小程序,就可以算出键盘抖动的时间:
DELAY: MOV R7,#240 DEL4:
MOV R6,#250 DEL5:
DJNZ R6,DEL5 DJNZ R7,DEL4
结合设计要求,使矩阵键盘的抖动时间成为了120ms,当晶体的频率为12MHz时,其计算值为:250×240×2=120000us=120ms。
- 12 -
安徽工程科技学院机电学院毕业设计(论文)
3.3 单片机复位电路
复位是单片机的初始化操作,其作用是使CPU中的各个部件都处于一个确定的初始状态,并从这个状态开始工作。当MCS-5l系列单片机的复位引脚RST(全称RESET)出现2个机器周期以上的高电平时,单片机就执行复位操作。如果RST持续为高电平,单片机就处于循环复位状态。
根据应用的要求,复位操作通常有两种基本形式:上电复位和上电或开关复位,单片机的复位是由RESET引脚来控制的,此引脚与高电平相接超过24个振荡周期后,51单片机即进入芯片内部复位状态,而且一直在此状态下等待,直到RESET引脚转为低电平后,才检查EA引脚是高电平或低电平,若为高电平则执行芯片内部的程序代码,若为低电平便会执行外部程序。当单片机已在运行当中时,按下复位键S1后松开,也能使RST为一段时间的高电平,从而实现上电或开关复位的操作。其电路图3-5如示:
图3-5 开关复位与上电复位
其中VCC接+5v电压,RST接单片机的复位端口RST,具体参数见总原理图。
在这种复位电路中,干扰容易串入复位端,在大多数情况下不会造成单片机错误复位,但是会引起内部某些寄存器错误复位,这时可在复位引脚上一个去耦合电容。如果应用到现场抗干扰严重,或整个系统干扰严重,引起单片机复位,可采用屏蔽的办法解决,如加屏蔽网或移动位置等。
3.4 LCD1602液晶模块功能
液晶显示器以其微功耗、体积小、显示内容丰富、超薄轻巧的诸多优点,在袖珍式仪表和低功耗应用系统中得到越来越广泛的应用。在日常生活中,我们对液晶显示器并不陌生。液晶显示模块已作为很多电子产品的通过器件,如在计算器、万用表、电子表及很多家用电子产品中都可以看到,显示的主要是数字、文字、图形等[4]。
1602可以显示2行16个字符,有8位数据总线D0-D7,和RS、R/W、EN三个控制端口,工作电压为5V,并且带有字符对比度调节和背光。 缺点:不能使用中文,不能显示图形。PCB尺寸:81*37mm 液晶尺寸:69*26mm。
现在的字符型液晶模块已经是单片机应用设计中最常用的信息显示器件了。1602型LCD显示模块具有体积小,功耗低,显示内容丰富等特点。 3.4.1 LCD1602主要参数介绍
表3-1 LCD1602主要技术参数
显示容量 芯片工作电压 工作电流 模块最佳工作电压 字符尺寸 16X2个字符 4.5~5.5V 2.0mA(5.0V) 5.0V 2.95X4.35(WXH)mm 3.4.2 LCD1602基本操作程序
读状态:此时输入端RS=L,RW=H,E=H,输出端D0~D7=状态字。
- 13 -
郭焰昌:基于液晶显示的乘法口诀测试仪的设计
读数据:此时输入端RS=H,RW=H,E=H 输出端:无。
写指令:此时输入端RS=L,RW=L,D0~D7=指令码,E=高脉冲 输出:D0~D7=数据输入[12]。
表3-2 寄存器选择功能 RS 0 0 1 1 R/W 0 1 0 1 操作 指令寄存器(IR)写入 忙标志和地址计数器读出 数据寄存器(DR)写入 数据寄存器读出 1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,如表1所示,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码01000001B(41H),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A” [13]。 3.4.3 LCD1602引脚在设计中如何应用
VSS为地电源。
VDD接5V正电源;为LCD1602提供驱动。
V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。
RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器;按编程原理接到AT89S52的P2.0脚。
RW为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和RW共同为低电平时可以写入指令或者显示地址,当RS为低电平RW为高电平时可以读忙信号,当RS为高电平RW为低电平时可以写入数据;按编程原理接到AT89S52的P2.1脚。
E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令;按编程原理接到AT89S52的P2.2脚。
D0~D7为8位双向数据线;依次接到AT89S52的P0口,作为输入和输出使用,三态双向。
BLA:LED背光正极。需要背光时,BLA串接一个限流电阻接VDD,BLK接地,实测该模块的背光电流为50mA左右。 3.4.4 LCD1602指令系统
1602液晶模块内部的控制器共有11条控制指令。它的读写操作、屏幕和光标的操作都是通过指令编程来实现的[10]。(说明:1为高电平、0为低电平)
指令1:清显示,指令码01H,光标复位到地址00H位置; 指令2:光标复位,光标返回到地址00H;
指令3:光标和显示模式设置I/D:光标移动方向,高电平右移,低电平左移S:屏幕上所有文字是否左移或者右移。高电平表示有效,低电平则无效;
指令4:显示开关控制D:控制整体显示的开与关,高电平表示开显示,低电平表示关显示C:控制光标的开与关,高电平表示有光标,低电平表示无光标B:控制光标是否闪烁,高电平闪烁,低电平不闪烁;
指令5:光标或显示移位S/C:高电平时移动显示的文字,低电平时移动光标;
- 14 -
安徽工程科技学院机电学院毕业设计(论文)
指令6:功能设置命令DL:高电平时为4位总线,低电平时为8位总线N:低电平时为单行显示,高电平时双行显示F:低电平时显示5x7的点阵字符,高电平时显示5x10的点阵字符;(有些模块是DL:高电平时为8位总线,低电平时为4位总线)
指令7:字符发生器RAM地址设置; 指令8:DDRAM地址设置;
指令9:读忙信号和光标地址BF:为忙标志位,高电平表示忙,此时模块不能接收命令或者数据,如果为低电平表示不忙;
指令10:写数据; 指令11:读数据;
液晶显示模块是一个慢显示器件,所以在执行每条指令之前一定要确认模块的忙标志为低电平,表示不忙,否则此指令失效。要显示字符时要先输入显示字符地址,也就是告诉模块在哪里显示字符[8]。 3.4.5 LCD1602液晶显示特性
由于液晶显示器每一个点在收到信号后就一直保持那种色彩和亮度,恒定发光,而不像阴极射线管显示器(CRT)那样需要不断刷新亮点。因此,液晶显示器画质高且不会闪烁。
液晶显示器都是数字式的,和单片机系统的接口更加简单可靠,操作更加方便。液晶显示器通过显示屏上的电极控制液晶分子状态来达到显示的目的,在重量上比相同显示面积的传统显示器要轻得多[7]。
假设LCD显示屏有64行,每行有128列,每8列对应1字节的8位,即每行由16字节,共16×8=128个点组成,屏上64×16个显示单元与显示RAM区1024字节相对应,每一字节的内容和显示屏上相应位置的亮暗对应。 3.4.6 1602LCD的RAM地址映射和复位(初始化)过程
图3-6 1602LCD内部显示地址
例如第二行第一个字符的地址是40H,那么是否直接写入40H就可以将光标定位在第二行第一个字符的位置呢?这样不行,因为写入显示地址时要求最高位D7恒定为高电平1所以实际写入的数据应该:01000000B(40H)+10000000B(80H)=11000000B(C0H)。
第一次延时15ms时,等待LCD电源稳定,前几次延时,读写数据之前不需要忙检测,以后每次读写数据之前都必须要进行LCD忙检测。
- 15 -