第八章 MCS-51与数码显示器和键盘的接口 一、MCS-51与数码显示器接口 数码显示器是单片机应用产品中最常用的廉价的输 出设备,它由8个发光二极管按一定规律排列而成, 当某一发光二极管导通时,则会被点亮,控制不同 组合的二极管导通,就能显示出各种字符。 1.显示器的结构 常用的显示器结构如图所示: A.共阳极显示器
B.共阴极显示器 2.显示器的工作方式: A.静态显示方式 所谓静态显示,是指显示器显示一字符时,相应的 发光二极管恒定地导通或截止。这种显示方式的每 一个数码显示器,需要一个8位输出口控制。所以 硬件较多,但字符较亮。
a.采用8位锁存器74LS273作为静态显示器接口
b.采用移位寄存器74LS164作为静态显示器接口
MCS-51串行口工作于方式0输出 显示段码:F9H 显‘1’ 更新显示器子程序: DIR:MOV R7,#08H MOV R0,#7FH DL0:MOV A,@R0 ADD A,#0BH MOVC A,@A+PC MOV SBUF,A 2 DL1:JNB T1,DL1 3 CLR T1 2 DEC R0 1 DJNZ R7,DL0 2 RET 1 TAB: DB C0H,F9H,A4H,B0H,99H
B.动态显示方式 所谓动态显示是指一位一位地轮流点亮各位显示器。 对于每一位显示器来说,每隔一段时间点亮一次, 通常点亮时间为1mS左右,相隔时间为20mS 6位共阴显示器和8155的接口逻辑如图所示:
其中:8155 A口作为段数据口,8155A口扫描输出总 是只有一位为高电平。 对于6位显示器,在MCS-51RAM中,设置了6个单元的显 示缓冲区即79H-7FH,它用来存放显示数据。 更新显示器子程序如下: DIR:MOV R0,#79H MOV R3,#01H MOV A,R3 LD0:MOV DPTR,#7F01H MOVX @DPTR,A INC DPTR MOV A,@R0 ADD A,#0DH MOVC A,@A+PC
DIR1:MOVX @DPTR,A ACALL DL1 INC R0 MOV A,R3 JB ACC DIR1:MOVX @DPTR,A ACALL DL1 INC R0 MOV A,R3 JB ACC.5,LD1 RL A MOV R3,A SJMP LD0 LDI:RET DSEG:DB 3FH,06H,5BH, DL1:MOV R7,#02H DL:MOV R6,#FFH DL6:DJNZ R6,DL6 DJNZ R7,DL RET
二、拨码盘接口 1.BCD拨码盘的构造 BCD拨码盘具有0~9十个位置,每个位置都有相应 的指示,一个拨码盘可以输入1个十进制数据。每 个BCD拨码盘后面有5位引出线,其中一位为输入控 制线(编号为A),另外4位是数据线(编号为8,4,2,1)。 拨码被拨到某一个位置时,输入控制线(A)分别与4 位数据线中的某几位接通。如果把接通的位定义为1, 不通的线定义为0,则拨码盘数据线的状态就是拨盘 位置所指示的BCD码。
2.接口电路
3. 拨码盘数据输入程序 INBCD:MOV R0,#30H MOV A,P1 MOV P1,#7FH XCHD A, @RO 3.拨码盘数据输入程序 INBCD:MOV R0,#30H MOV A,P1 MOV P1,#7FH XCHD A, @RO MOV A,P1 RET SWAP A MOV @R0,A MOV P1,#0BFH MOV A,P1 XCHD A,@R0 INC R0 MOV P1,#0DFH MOV A,P1 XCH A,@R0 MOV P1,#0EFH
三、键盘接口 键盘是由若干个按键组成的开关矩阵,它是单片机 最简单的输入设备,操作员可以通过键盘输入数据 或命令,实现人机通信。 1.键盘工作原理 一个4X4的键盘结构如图所示:
A.按键与否的判别 我们使所有行为低自列线读入数据,若列线中有一位 为低,则可判为有键按下,否则全为高为无键按下。 B.按键的识别 由于矩阵网络上每一个键都可以由它所在的行与列 来定位。所以,我们可使第一行至第四行逐行为低, 通过读入数据来识别是何键按下。 例如:当使行2为低,读入列值时,其列2值为低, 则可判是键5按下。
C.键抖动及消除 键按下和释放时存在着机械抖动,其对应的列线电 压波形如图示,通常抖动时间为5-10mS。 为了保证CPU对键的闭合只作一次处理,必须消除抖 动,消除抖动可采用硬件方法即用R-S触发器隔离, 但为了节省硬件,目前都用软件方法来实现,即增 加一延时程序,在键稳定闭合和断开时才去读取键 的状态。
2.键盘接口电路
3.键输入程序 A.键输入程序功能 a.判别键盘上有无键闭合 使PA0-7输出为“0”,读PC口,若PC0-3为全“1”, 则无键闭合,否则为有键闭合。 b.消键抖动 当判别到有键闭合时,延时10mS 后再判别键盘状 态,若仍有键闭合,则为有键按下,否则认为是键 的抖动。 c.确定闭合键的键号 设第一列至第四列的列值为00H、08H、10H、18H 则键号 N=行号+列值 d.对键的一次闭合仅作一次处理 等待闭合键释放后进行键处理。
e.各按键对应的键值如下:
B.程序清单: KEY1:ACALL KS1 KS1:MOV DPTR,#7F01H B.程序清单: KEY1:ACALL KS1 KS1:MOV DPTR,#7F01H JNZ LK1 MOV A,#00H NI:ACALL DIR MOVX @DPTR,A AJMP KEY1 INC DPTR LK1:ACALL DIR INC DPTR ACALL DIR MOVA,@DPTR ACALL KS1 CPL A JNZ LK2 ANL A,#0FH ACALL DIR RET AJMP KEY1 LK2:MOV R2,#FEH MOV R4,#00H LK4:MOV DPTR,#7F01H MOV A,R2 MOVX @DPTR,A
INC DPTR LK3: ACALL DIR. INC DPTR. ACALL KS1. MOVX A,@DPTR JNZ LK3 INC DPTR LK3: ACALL DIR INC DPTR ACALL KS1 MOVX A,@DPTR JNZ LK3 JB ACC.0, LONE POP ACC MOV A, #00H RET AJMP LKP NEXT:INC R4 LONE:JB ACC.1, LTW0 MOV A, R2 MOV A, #08H JNB ACC.7,KND AJMP LKP RL A LTWO: JB ACC.2, LTHR MOV R2, A MOV A, #10H AJMP LK4 AJMP LKP KND: AJMP KEY1 LTHR:JB ACC.3, NEXT MOV A, #18H LKP:ADD A, R4 PUSH ACC
C.键输入程序的改进 前面程序主要存在以下问题: a.无键按下,程序将进入死循环 b.按键不抬起,程序也将进入死循环,且显示不亮。 c C.键输入程序的改进 前面程序主要存在以下问题: a.无键按下,程序将进入死循环 b.按键不抬起,程序也将进入死循环,且显示不亮。 c. 键位置不能灵活放置。 键输入程序可作如下更改: ST: MOV DPTR,#7F01H LK0:CLR 00H MOV A,#00H LK1:MOV A,#FFH MOVX @DPTR,A RET INC DPTR INC DPTR MOVX A,@DPTR CPL A ANL A,#0FH JNZ LK2
LK2:ACALL DIR ACALL DIR MOV R2,#08H MOV R3,#FEH LK3:MOV DPTR,#7F01H MOV A,R3 MOVX @DPTR,A RL A MOV R3, A INC DPTR INC DPTR MOVX A,@DPTR CPL A ANL A,#0FH JNZ LK4 DJNZ R2,LK3
SJMP LK0 LK4:SWAP A ORL A,R2 MOV B,A JB 00H,LK1 MOV DPTR,#TAB MOV R3,#1FH LK5:MOV A,R3 MOVC A,@A+DPTR CJNE A,B,LK7 LK6:SETB 00H MOV A,R3 RET LK7:DJNZ R3,LK5 SJMP LK6 TAB:DB 88H,48H,47H,…
d.各按键对应的键值与键号如下: