当前位置:文档之家› 单片机实验键盘显示

单片机实验键盘显示

实验七8255 键盘显示实验【实验目的】1.熟悉8255与单片机的接线和I/O编程方法;2.熟悉数码管的显示原理与编程;3.熟悉8255扫描键盘与读取键值的编程。

【实验内容】使用单片机、8255模块和数码管显示电路,编程实现在数码管上从右至左显示0-5,当有键按下时在数码管最右1位显示按键的键码。

【实验原理与设计】1.硬件电路设计本次实验使用实验箱上的E1、E3和F6模块电路。

如图7.1所示。

E1E3F6图7.1 实验箱(1)8255模块(E3区)PA口作为位扫描口(键扫描口),PB口输出字形码,PC口作为键值读入口,与数码管显示电路和矩阵键盘模块电路(F6区)相应接口连接,8255的数据总线D0-D7、读(/RD)、写(/WR)、端口选择A0、A1和片选/CS已和单片机接好。

各端口地址如下:PA口:0FF28H;PB口:0FF29H;PC口:0FF2AH;控制口:0FF2BH单片机与8255模块电路连接图如图7.2所示。

图7.2 单片机与8255的电路连接(2)数码管显示电路(F6区)实验箱上提供的数码管显示电路如图7.3所示。

实验时需将数码管显示电路中的JLED与8255的PB口相连,JS与8255的PA口相连,JLED和JS分别位于E6区,同时E6区SW3、SW4和SW4红色拨码开关打在“OFF”位置。

图7.3数码管模块连接电路(3)矩阵键盘模块电路(F6区)实验箱上提供的矩阵键盘模块电路如图7.4所示,实验时将该电路中的JR(位于E6区)与8255的PC口相连。

图7.4矩阵键盘模块电路2.程序设计根据实验内容程序主流程图如图7.5所示。

图7.5 主程序流程图(1)初始化MOV A, #81H ;PA口(位扫描口)和PB口(字形码)做输出,PC口(键扫描口)做输入MOV DPTR, #0FF2BH ;实验箱接线决定8255的控制口地址为FF2BHMOVX @DPTR, A ;将命令字82H送给8255控制口确定各口工作方式(2)显示数据子程序显示数据子程序流程图如图7.6所示。

图7.6 显示子程序流程图实验箱数码管是共阴极的,但数码管的接口电路(74LS240,754510)决定了PB口应输出共阳码,将数据共阳码作成数据表利用查表指令得到显示数据的码值;PA口应输出低电平扫描信号,数码管才能正确显示数据;每一位数码管选通时间应保持在1-5ms之内(建议2ms),PA口轮扫一遍的时间不应超过20ms;参考程序如下:DISPLAY:MOV R0, #00H ;显示第一位数据0,R0为显示的数据MOV R1, #0FEH ;位扫描初值,最右位先显示,R1为显示的位数MOV R2, #06 ;6位数码管显示0~5,R2为循环次数NEXT: MOV A, R1 ;位扫描数据送给AMOV DPTR, #0FF28H ;PA口(位扫描口)地址送给DPTRMOVX @DPTR, A ;位扫描数据送给PA口RL AMOV R1, A ;位扫描数据左移准备显示下一个数据MOV A, R0 ;显示数据送A用DPTR查表指令查字形码MOV DPTR, #DMTAB ;共阳码数据表表头赋予DPTRMOVC A, @A+DPTR ;单字节表,因此A里的显示数据即为偏移量MOV DPTR, #0FF29H ;PB口(字形码)地址送给DPTRMOVX @DPTR, A ;输出字形码送PB口LCALL DELAY2MS ;所输出一位数据保持2msMOV A, #0FFHMOV DPTR, #0FF29HMOVX @DPTR, A ;将全灭字形码送当前显示为意于消隐INC R0 ;准备下一个显示数据DJNZ R2, NEXT ;判断6位显示完否?RETDMTAB:DB C0H,0F9H,0A4H, 0B0H,99H,92H, 82H,0F8H,DB 80H, 90H,88H,83H, 0C6H,0A1H,86H,08EH ;0~F共阳码数据表,此表最好放在显示子程序之后DELAY2MS: MOV R6, #4 ; 1×1=1usDly1: MOV R7, #250 ; 1×1×4=4usDJNZ R7, $ ; 2×1×250×4=2msDJNZ R6, Dly1 ; 2×1×4=8usRET ;延时2ms子程序(3)扫描键盘扫描键盘时让PA口输出00H,读PC口数值,通过判断它的值是否等于03H来判断是否有键按下;当检测到有按键后,延时10~20ms再判断一次是否有键按下以消除抖动。

扫描键盘子程序流程图如图7.7所示。

图7.7 扫描键盘子程序流程图判断是否有键需要设置标志位,可以用PSW.5用户标志位F0作有键标志位,由图7.4可知实验箱上16个按键分别接PC0和PC1上,如果有按键这两位肯定不是1,PC的其它位与这16个按键无关可屏蔽清零。

参考程序如下:SCAN_KEY: MOV DPTR, #0FF28HMOV A, #00HMOVX @DPTR, A ;PA口输出00HMOV DPTR, #0FF2AHMOVX A, @DPTR ;读PC口数据ANL A, #03H ;屏蔽PC口高6位PC2~PC7清零CJNE A, #03H, SCAN2 ;16个按键分别接PC0和PC1上,如果有按键这两位肯定不是1SJMP NEXT1 ;等于03H没有按键子程序返回SCAN2: LCALL DELAY20MS ;不等于03H调延时消抖MOVX A, @DPTR ;延时后再次读PC口数据ANL A, #03HCJNE A, #03H, KEY ;延时后不等03H说明真的有键按下将有键标志位置1SJMP NEXT1 ;延时相等说明只是抖动没有真的按键按下子程序返回KEY: SETB F0 ;用户标志位F0作为有键按下标志位置1NEXT1: RET ;子程序返回DELAY20MS: MOV R6, #40 ; 1×1=1usDly1: MOV R7, #250 ; 1×1×40=40usDJNZ R7, $ ; 2×1×250×40=20msDJNZ R6, Dly1 ; 2×1×40=80usRET ;延时20ms子程序(4)读键值PA口8根口线分列输出0,PC口读入,根据PC口读入的数据和扫描的PA口列数值确定键值。

为确保再次判断是否有键按下读键值前要将有键标志位F0清零。

读键值子程序流程图如图7.8所示。

图7.8 读键值子程序流程图因为实验箱按键不是按照4*4标准键盘接的,16个按键只接在2根线上没有规律可循,所以不用按照行号加列号得到键值,因此本实验中将16个按键按照行编成键值表,表中前8位是PC0行上的按键,后8位是PC1行上的按键,由图7.4可知它们分别是07H,04H,08H,05H,09H,06H,0AH,0BH,01H,00H,02H,0FH,03H,0EH,0CH,0DH。

参考程序如下:READ_KEY: CLR F0 ;清有键按下标志位MOV R3, #0FEH ;PA口第0列输出0,从该列开始判断MOV R6, #00H ;列数存R6里MOV R4, #08H ;PA口扫描总列数KEYSM1: MOV A, R3MOV DPTR, #0FF28HMOVX @DPTR, A ;列扫描信号送给PA口RL A ;准备下列扫描信号MOV R3, A ;列扫描信号暂存R3中MOV DPTR, #0FF2AHMOVX A, @DPTR ;读PC口数据按键ANL A, #03H ;屏蔽高6位只判断PC0和PC1CJNE A, #03H, JSADD ;判断所扫描列是否有按键否INC R6 ;列数加1DJNZ R4, KEYSM1 ;相等没键按下扫描下一列SJMP NEXT2 ;所有列扫描完后退出读键值子程序JSADD: JNB ACC.0,KEY_PC0 ;A的值为PC口数据,通过判断ACC.0是否为0来判断按键是否是PC0行的JNB ACC.1,KEY_PC1 ;A的值为PC口数据,通过判断ACC.1是否为0来判断按键是否是PC1行的SJMP NEXT2 ;两行都不是退出读键值子程序KEY_PC0: MOV A, R6 ;PC0行的按键只有扫描列数作为查表偏移量LJMP CJH ;查表获取键号KEY_PC1: MOV A, R6ADD A, #8 ;PC1行的按键查表偏移量是扫描列数加8CJH: MOV DPTR, #KEYTAB ;表头地址赋予DPTRMOVC A, @ A + DPTR ;查表取出键码MOV R5, A ;保存键号到R5中NEXT2: RETKEYTAB:DB 07H,04H,08H,05H,09H,06H,0AH,0BH,01H,00H,02H,0FH,03H,0EH,0CH,0DH(5)显示键码按实验内容要求把键号送最低位(最左边)显示,其它数码管均不显示即可,参考程序如下:DISP_KEY: MOV A, #0FEHMOV DPTR, #0FF28HMOVX @DPTR, AMOV A, R5MOV DPTR, #DMTABMOVC A, @A+DPTRMOV DPTR, #0FF29HMOVX @DPTR, ALCALL DELAY2MSRET【实验操作步骤】1.接线连接各实验模块,SW3、SW4、SW5拨向“OFF”。

连接仿真器,开实验箱电源。

2.查询串口号,设置波特率,打开KEIL3软件,建立工程,并进行工程设置;3. 输入、编辑源程序,编译、连接和调试;4. 程序调试:1) 执行“单步/宏单步”命令,观察记录0-5数字显示的过程;2) 连续运行程序,观察记录数字显示状态;3) 按键,观察记录显示按键的结果;4) 改变扫描周期的时间,观察记录数码管显示的效果。

5.根据实验报告要求,完成实验报告;6. 退出调试软件,关闭实验箱电源,拆线整理实验箱,关闭计算机,完成实验报告并上交。

【实验总结】1.本实验中显示使用的是共阴码还是共阳码,要显示数字6时,8255的PB口应输出的数据时多少?2.键盘可分为哪两类?本实验用的是什么类型键盘?【预习报告】(1)实验题目、实验人姓名、班级、学号、实验时间、实验地点。

(5分)(2)硬件电路的连接,包括各实验模块在实验箱上的位置和各模块电路之间的接线说明。

(15分)(3)实验内容要求、主程序流程图(相关子程序流程图可省略)及源程序(完整连贯程序,不允许分段写)。

(40分)流程图要求图用尺画,程序手写,没有流程图和程序不允许做实验。

【实验报告】在预习报告基础上完成以下内容:(5)实验调试程序的操作步骤和调试过程中出现的问题与解决。

相关主题