单片机实验键盘显示
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验七8255 键盘显示实验
【实验目的】
1.熟悉8255与单片机的接线和I/O编程方法;
2.熟悉数码管的显示原理与编程;
3.熟悉8255扫描键盘与读取键值的编程。
【实验内容】
使用单片机、8255模块和数码管显示电路,编程实现在数码管上从右至左显示0-5,当有键按下时在数码管最右1位显示按键的键码。
【实验原理与设计】
1.硬件电路设计
本次实验使用实验箱上的E1、E3和F6模块电路。如图7.1所示。
E1
E3
F6
图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的控制口地址为FF2BH
MOVX @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 ;位扫描数据送给A
MOV DPTR, #0FF28H ;PA口(位扫描口)地址送给DPTR
MOVX @DPTR, A ;位扫描数据送给PA口
RL A
MOV R1, A ;位扫描数据左移准备显示下一个数据
MOV A, R0 ;显示数据送A用DPTR查表指令查字形码
MOV DPTR, #DMTAB ;共阳码数据表表头赋予DPTR
MOVC A, @A+DPTR ;单字节表,因此A里的显示数据即为偏移量
MOV DPTR, #0FF29H ;PB口(字形码)地址送给DPTR
MOVX @DPTR, A ;输出字形码送PB口
LCALL DELAY2MS ;所输出一位数据保持2ms
MOV A, #0FFH
MOV DPTR, #0FF29H
MOVX @DPTR, A ;将全灭字形码送当前显示为意于消隐
INC R0 ;准备下一个显示数据
DJNZ R2, NEXT ;判断6位显示完否?
RET
DMTAB: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=1us
Dly1: MOV R7, #250 ; 1×1×4=4us
DJNZ R7, $ ; 2×1×250×4=2ms
DJNZ R6, Dly1 ; 2×1×4=8us
RET ;延时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, #0FF28H
MOV A, #00H
MOVX @DPTR, A ;PA口输出00H
MOV DPTR, #0FF2AH
MOVX A, @DPTR ;读PC口数据
ANL A, #03H ;屏蔽PC口高6位PC2~PC7清零
CJNE A, #03H, SCAN2 ;16个按键分别接PC0和PC1上,如果有按键这两位肯定不是1
SJMP NEXT1 ;等于03H没有按键子程序返回
SCAN2: LCALL DELAY20MS ;不等于03H调延时消抖
MOVX A, @DPTR ;延时后再次读PC口数据
ANL A, #03H
CJNE A, #03H, KEY ;延时后不等03H说明真的有键按下将有键标志位置1
SJMP NEXT1 ;延时相等说明只是抖动没有真的按键按下子程序返回
KEY: SETB F0 ;用户标志位F0作为有键按下标志位置1