第6章MCS-51单片机的交互通道配置与接口

Download Report

Transcript 第6章MCS-51单片机的交互通道配置与接口

单片机原理与应用
四川文理学院
Email:[email protected]
2015年4月9日
第6章
MCS-51单片机的交互通道
配置与接口
主要内容:
从工程应用角度介绍了MCS-51单片机的交互通道配
置与接口,主要包括人机界面中的键盘、显示器、微型打
印机等。介绍了多种实用方案和设计技巧。
重点:
系统概念的形成、各种接口设计方案和设计技巧
的掌握,熟悉各种交互设备。
难点:
设计。
在于使用动态方法进行键盘和显示的硬件及软件
人机界面
指人与计算机系统进行信息交
互的接口,包括信息的输入和输出。
6.1
MCS-51单片机与键盘的接口技术
键盘:单片机系统中完成控制参数输入及
修改的基本输入设备,是人工干预系统的
重要手段。
键盘的分类:
(1)按编码方式可分为编码键盘与非编
码键盘。
(2)按键组连接方式可分为独立连接式
键盘与矩阵连接式键盘。
6.1.1 概述_键盘分类
1.独立连接式键盘
每键相互独立,各自与一条I/O线相连,
CPU可直接读取该I/O线的高/低电平状态。
其优点是硬件、软件结构简单,判键速度
快,使用方便;缺点是占I/O口线多。
适用场合:多用于设置控制键、功能键。
适用于键数少的场合。
6.1.1 概述_键盘分类
独立连接式键盘
连接图如右图所示。当
没有键被按下时,所有
的数据输入线都为高电
平;当有任意一个键被
按下时,与之相连的数
据输入线将变为低电平;
通过相应指令,可以判
断是否有键按下。
6.1.1 概述_键盘分类
2. 矩阵连接式键盘
–键按矩阵排列,各键处于矩阵行/列的结点
处,CPU通过对连在行(列)的I/O线送已知电平
的信号,然后读取列(行)线的状态信息。逐线
扫描,得出键码。其特点是键多时占用I/O口
线少,硬件资源利用合理,但判键速度慢。
–适用场合:多用于设置数字键,适用于键数
多的场合。
6.1.1 概述_键盘分类
4行4列矩阵式
键盘连接图如右图所
示。这种键盘适合采
取动态扫描的方式进
行识别。
扫描方式:低电平扫
描(回送线必须被上
拉为高电平)、高电
平扫描(回送线需被
下拉为低电平)。右
图中给出了低电平扫
描的电路。
6.1.1 概述_键盘分类
3. 薄膜开关
•特点:不需要进行导线与开关间的焊接,结
构简单、体积小、防尘、防水、防有害气体侵
蚀、寿命长、可靠性高。
•应用:与按键式键盘类似,多个薄膜开关也
可按照独立式或矩阵式设计内部电路,其原理
与普通键盘相同。
6.1.2
使用键盘时必须解决的问题
(1)开关状态的可靠输入。必须消除键抖
动。可以采用硬件和软件两种方法,硬件方法
就是在按键输入通道上添加去抖动电路;软件
方法则采用延迟10~20ms
(2)键盘状态的监测方法——中断方式还是
查询方式
(3)键盘编码方法
(4)键盘控制程序的编制
6.1.3 键盘接口
 功能:对键盘上所按下的键进行识别。
 分类:
(1)编码键盘:采用专用的编码/译码器件,被按下
的键由该器件译码输出相应的键码/键值。其特点是
增加了硬件开销,编码固定,但编程简单。适用于规
模大的键盘。
(2)非编码键盘:采用软件编/译码的方式,通过扫描,
对每个被按下的键判别输出相应的键码/键值。其特
点是不增加硬件开销,编码灵活,但编程较复杂,占
CPU时间。适用于小规模的键盘,特别是单片机系统
键盘。
6.1.3 键盘接口
1.键盘接口的工作原理
对于矩阵式键盘,如下页键盘示意图,键
盘的行线X0~X3通过电阻接+5V,当键盘上没
有键闭合时,所有的扫描线和回送线都断开,
无论扫描线处于何种状态,回送线都呈高电平。
当键盘上某一键闭合时,则该键所对应的扫描
线和回送线被短路,可以确定,变为低电平的
回送线与扫描线相交处的键闭合。
6.1.3 键盘接口
6.1.3 键盘接口

CPU对键盘扫描的方式:程序控制的随机方式
( CPU空闲时扫描键盘)、定时控制方式(定
时扫描键盘)、中断方式。

CPU对键盘上闭合键的键号确定方法:根据扫
描线和回送线的状态计算求得,或根据行线和
列线的状态查表求得。
6.1.3 键盘接口
2.键输入程序的设计方法
(1)判断键盘上是否有键闭合;
(2)消除键的机械抖动;
(3)确定闭合键的物理位置;
(4)得到闭合键的编号;
(5)确保CPU对键的一次闭合只做一次处理
6.1.3 键盘接口
3.键盘接口方式
(1)独立式键盘接口(静态方式)
特点:结构简单,每个按键接单片机的一条I/O线,通
过对输入线的查询,可以识别每个按键的状态。
[例题] 在MCS-51 单片机系统中,设计一个含8个按键
的独立式键盘。
解:在MCS-51中,含8个按键的独立式键盘的线路连接
如下页图所示,8个按键经上拉电阻拉高后分别接到
MCS-51单片机P1口的8条I/O线上(P1.0~P1.7)。
6.1.3 键盘接口
在无键按下的情况下,P1.0~P1.7线上输入均为高电平。
当有键按下时,与被按键相连的I/O线将得到低电平输入,其他
位按键的输入线上仍维持高电平输入。
6.1.3 键盘接口
注: P1口8条I/O线经与非门74LS30实现逻辑与非
后,再经过1个非门74LS04进行信号变换,然后接至
MCS-51的
INT0
引脚上,可通过中断的方式处理键盘。
在中断服务程序中,先延时20 ms消除键抖动,再对各
键进行查询,找到所按键,并转到相应的处理程序中
去。
6.1.3 键盘接口
主程序如下:
ORG
0000H
LJMP
MAIN
ORG 0003H ; 外部中断0中断服务入口地址
LJMP INT
; 转中断服务
ORG
0100H
MAIN: SETB EA
SETB EX0
SETB IT0
……
; 开总中断允许
; 开INT0中断
; 下降沿有效
6.1.3 键盘接口
中断服务程序清单如下:
CLOSE:
INT0:
D20
; 延时去抖动
INT:
CALL
MOV
P1, #0FFH
; P1口送全1值
MOV
A, P1
; 读P1口各引脚
CJNE
A, #0FFH,CLOSE
AJMP
INT0
; 验证是否确实有键闭合
; 无键按下
JNB
ACC.7, KEY 7
; 查询7号键
JNB
ACC.6, KEY 6
; 查询6号键
JNB
ACC.5, KEY5
; 查询5号键
JNB
ACC.4, KEY4
; 查询4号键
JNB
ACC.3, KEY 3
; 查询3号键
JNB
ACC.2, KEY 2
; 查询2号键
JNB
ACC.1, KEY 1
; 查询1号键
JNB
ACC.0,KEY 0
; 查询0号键
RETI
6.1.3 键盘接口
……
MOV
A, P1
JNB ACC.7, FUNC71
RETI
KEY 6: ……
……
D20: ……
……
END
KEY 7:
KEY 71:
; 7号键处理程序
; 再读P1口各引脚
; 确认键是否释放
; 其他键处理程序
; 20ms延时子程序
6.1.3 键盘接口
(2)矩阵式键盘接口——行反转法
矩阵式键盘按键识别方法有行反转法和扫描法等。
行反转法需要两个双向I/O口分别接行、列线。步骤
如下:
(1)由行线输出全“0”,读入列线,判有无键按下。
(2)若有键按下,再将读入的列线输出,读行线的值。
(3)第一步读进的列线值与第二步读进的行线值运
算,从而得到代表此键的唯一的特征值。
行反转法因输入与输出线反过来用而得名。优点
是判键速度快,两次即可。
6.1.3 键盘接口
[例题]请为8051微处理器设计一个由4行4列键
阵构成的键盘。
解:4×4矩阵键盘的线路连接如下页图所示。
其中P2口的低4位作为输出线。P1口的低4位
作为输入线,输入线通过74LS21进行逻辑相
与后作为8051的一个外部中断源输入。当有键
按下时就将引起中断。中断服务程序要对所按
的键进行判别。
6.1.3 键盘接口
6.1.3 键盘接口
(a)查询闭合键的位置子程序KEYR
KEYR子程序用以确定每组线中哪一位为0,是否有
多个0。在调用前,应将读某组线的数据存入累加器A
中。 KEYR子程序返回时,某组线中0的位置(0~3)保
存在R3中。按键闭合引起中断后,执行中断服务程序。
6.1.3 键盘接口
KEYR子程序如下:
KEYR:
CJNE A, #0FEH, TESTP11
MOV
R3, #0
LJMP
FINISH
; 返回
A, #0FDH, TESTP12
; 测试P1.1
TESTP11: CJNE
MOV
R3, #1
LJMP
FINISH
TESTP12: CJNE
R3, #2
LJMP
FINISH
MOV
RET
; P1.0=0,说明被按键的输入线为P1.0
A, #0FBH, TESTP13
MOV
TESTP13: CJNE
FINISH:
; 测试P1.0
A, #0F7H, FINISH
R3, #3
; 测试P1.2
; 测试P1.3
6.1.3 键盘接口
(b)中断服务程序
中断服务程序开始部分应利用软件延时消除键抖
动,然后再对所按的键做出处理。
中断服务程序如下:
ORG 1000H
INT11: LCALL DELAY
; 延时去抖动
MOV A, P1
; 读输入线
ANL A, #0FH ; 判断是否有键闭合
CJNE A, #0FH, TEST
; 有键闭合,转判断按键程序
RETI
; 无键闭合,返回
6.1.3 键盘接口
TEST:
MOV B, A
LCALL KEYR
MOV
40H, R3
MOV
P2, #0FFH
MOV
P1, B
MOV
A, P2
LCALL KEYR
XCH
A, R3
SWAP
A
ORL
40H, A
RETI
; 暂存
; 调用读取子程序
; 暂存在40H单元
; 输出线写1
; 输入线写入数据
; 读输出线
; 调用读取子程序
; 得按键特征值
6.1.3 键盘接口
中断程序结束后,键的特征值存放在40H单元中。
此键的输出线号位于40H单元的高4位,其输入线号位于
低4位。此后,根据40H单元的内容去查表,得到相应键
的代码,可进行显示或其他处理。
6.1.3 键盘接口
(c)去抖动的延时子程序DELAY
利用CPU的空闲方式,通过定时器T1实现延时, T1
必须预先置初值,以得到需要的延迟时间。
设晶振频率为6MHz,欲延时20ms,定时时间为:
(216-TC)×6/12=20×103μs,
初值:
TC=25536=63C0H。
6.1.3 键盘接口
DELAY:
MOV
TOMD, #11H ; 方式1定时
MOV TL1, #0C0H ; 定时器1定时初值
MOV TH1, #63H
SETB EA
; 开中断
SETB ET1
; 开定时器1中断
SETB PT1
; 定时器1为高级中断(因被键盘中断调用)
SETB TR1
; 启动定时器
ORL PCON,#1
; 启动空闲方式,实际CPU在此处等待
CLR TR1
;以下四条指令只有在延时后,定时器被唤醒,才能执行
CLR PT1
CLR ET1
RET
END
6.1.3 键盘接口
(3)矩阵式键盘接口动态扫描法
行反转法适用于扩展键阵。而动态扫描法不仅可
以扫描键阵,也可以实现显示,应用较广泛。
动态扫描法原理:采用输出“移动”信号,轮流对各
行按键进行检测来实现的。设置行线为输出,列线为
输入,当无按键按下时,列输入全为“1”。设计时,
将某一行输出为“0”,读取列线值,若其中某一位为
“0”,则表明行、列交叉点处的按键被按下,否则无
按键按下;继续扫描下一行(将下一行输出为“0”),
直至全扫描完为止。
6.1.3 键盘接口
[例题] 用8155实现4行8列的32键键盘接口。
解:电路如下页图所示,8155的PA设定为输出口,称
其为扫描线。PC3~PC0设定为输入口,称其为回送
线。8155与MCS-51单片机的接口略,设PA口的端口
地址为7F01H,PC口的端口地址为7F03H。
6.1.3 键盘接口
键值编码形式:回送线PC0, PC1, PC2, PC3上的键值(每条回
送线上有8个键,顺序从左到右)分别为00H +(00H~07H)、
08H +(00H~07H)、10H +(00H~07H)、18H +(00H~
07H)。其中,(00H~07H)的具体内容由扫描线决定,存放
在R4中。
6.1.3 键盘接口
(a)扫描是否有键按下子程序KEY1,回扫线的值存放在A中。
程序如下:
ORG 1000H
KEY1: MOV DPTR, #7F01H ; 将PA口地址送DPTR,PA口作为扫描线
MOV A, #00H
; 所有扫描线均为低电平
MOVX @DPTR, A
; PA口向列线输出00H
INC
DPTR
INC
DPTR
; 指向PC口
MOVX A, @DPTR
; 取回送线状态
CPLA
; 行线状态取反
ANL A, #0FH
; 屏蔽A的高半字节
RET
; 返回
6.1.3 键盘接口
(b)判断是否有键按下子程序KEY,如果有,识别按键的键码。其
中DELAY1是延时子程序。
程序如下:
KEY:
ACALL KEY1
JNZ
LKEY1
ACALL DELAY1
; 检查有键闭合否
; A非0说明有键按下
; 执行一次延时子程序(延时6 ms)
AJMP KEY
LKEY1: ACALL DELAY1
ACALL DELAY1
; 有键闭合延时2×6ms=12ms以去抖动
ACALL KEY1
; 延时以后再检查是否有键闭合
JNZ
; 有键闭合,转LKEY2
LKEY2
ACALL DELAY1
; 无键闭合,说明是干扰信号,不作处理
AJMP KEY
; 延时6ms后转KEY继续等待键入
6.1.3 键盘接口
LKEY2: MOV R2, #0FEH ; 扫描初值送R2,设定PA0为当前扫描线
MOV R4, #00H
; 回送初值送R4
LKEY4: MOV DPTR, #7F01H
; 指向PA口
MOV A, R2
MOVX @DPTR, A ; 扫描初值送PA口
INC
DPTR
INC
DPTR
; 指向PC口
MOV A, @DPTR
; 取回送线状态
JB
; ACC.0=1,第0行无键闭合,转LONE
ACC.0, LONE
MOV A, #00H
; 装第0行行值
AJMP LKEYP
; 转计算键码
LONE: JB ACC.1, LTWO
; ACC.1=1,第1行无键闭合,转LTWO
6.1.3 键盘接口
LTWO:
LTHR:
LKEYP:
LKEY3:
MOV A, #08H
AJMP LKEYP
JB ACC.2, LTHR
MOV A, #10H
AJMP LKEYP
JB ACC.3, NEXT
MOV A, #18H
ADD A, R4
PUSH ACC
ACALL DELAY1
ACALL KEY1
JNZ LKEY3
POP ACC
RET
; 装第1行行值
; 转计算键码
; ACC.2=1,第2行无键闭合,转LTHR
; 装第2行行值
; ACC.3=1,第3行无键闭合,转NEXT
; 装第3行行值
; 计算键码
; 保存键码
; 延时6ms
; 判断键是否继续闭合,若闭合再延时
; 若键释放,则键码送A
6.1.3 键盘接口
NEXT:
INC
; 列号加1
R4
MOV A, R2
JNB ACC.7, KND
; 第7位为0,以扫描到最高列,转
KND
RL A
MOV R2, A
AJMP LKEY4
KND:
AJMP KEY
DELAY1:
··· ···
END
; 循环右移一位
; 进行下一列扫描
; 扫描完毕,开始新的一轮
; 延时子程序,略
6.1.3 键盘接口
(4)通过串行口扩展键盘接口
MCS-51系列单片机的串行口与串/并转换芯片配
合(如串入并出芯片74LS164 )可以扩展键盘。
6.1.3 键盘接口
[例题] 利用MCS-51的串行口与串/并转换芯片配合,扩
展2行8列的键盘接口,键号为0~15。要求给出其硬
件连接和键盘查询子程序。
解:串口与串/并转换芯片配合扩展键盘的线路连接如
下图所示。
6.1.3 键盘接口
其中,P1.0和P1.1作为行线。键盘
的 编 码 为 : P1.0线 上 的 8个键 分别为
00H+(00H~07H),P1.1线上的8个键
分 别 为 08H+ ( 00H ~ 07H ) 。 扫 描 线
(00H~07H)的具体值存放在R4中。
程序采取查询方式读取键号,并且考
虑了键的抖动问题。 DLY1是延时子程
序。
6.1.3 键盘接口
程序如下:
SERKEY:
CHK:
CHK0:
CHEN:
ORG 1000H
MOV SCON, #00H ; 设置串行口
MOV A, #00H
; 键盘初始化,送00H到列线上
LCALL VARTO ; 发送数据
JNB P1.0, CHK0 ; 检查是否有键按下
JNB P1.1, CHK0 ; 检查是否有键按下
AJMP CHK
; 无键按下,继续查找
LCALL DLY1
; 调用10ms延时子程序,去抖
JNB P1.0, CHEN ; 确实有键按下,转CHEN
JNB P1.1, CHEN
AJMP CHK
; 无键按下,继续查找
MOV R2, #0FEH ; 首列扫描字送R2,查键号,最低位为0
MOV R4, #00H
; 首列偏移值送R4
6.1.3 键盘接口
CHKN:
MOV A, R2
LCALL VARTO
JB P1.0, CH1
MOV A, #0
AJMP CKEY
CH1: JB P1.1, NEXT
MOV A, #8H
CKEY: ADD A, R4
RET
; 发送列扫描字
; 检查P1.0有无键按下;若无,转CH1
; 第一行首列值送A,00H+(R4)
; 转求键号
; 检查P1.1有无键按下;若无,转NEXT
; 第二行首列值送A
; 求键号,并入栈保护
6.1.3 键盘接口
INC R4
; 指向下一列
MOV A, R2
; 取出原扫描字
JNB ACC.7,KEND ; 是否已检查完8列?
RL A
; 8列未完,指向下一列
MOV R2, A
; 列扫描字送R2
AJMP CHKN
; 8列未完,检查下一列
KEND: AJMP SERKEY
; 8列查完,未查到有键按下,等待
VARTO: MOV SBUF, A
; 发送A中数据
JNB TI, $
; 发送等待
CLR TI
; 清除
RET
DLY1:……
; 延时10ms子程序(略)
END
; 结束
NEXT:
6.2
MCS-51单片机与显示器的接口技术
显示器用于实现单片机应用系统中的数
据输出和状态的反馈。单片机系统中常用的
显示器有发光二极管、七段数码显示器、液
晶显示器等。
6.2.1 LED显示器及其接口
发光二极管简称LED(Light Emitting Diode)。LED显示
器从外观可分为 “8”字形的七段数码管、米字形数码管、点阵
块、矩形平面显示器、数字笔划显示器等。
1.七段LED数码显示器
七段LED数码管显示器能够显示十进制或十六进制数字及
某些简单字符。但控制简单,使用方便,在单片机系统中应用
较多。其结构如下页图所示。
6.2.1 LED显示器及其接口
上图中的a~g七个笔划(段)及小数点dp均为发
光二极管。数码管显示器根据公共端的连接方式,可
以分为共阴极数码管(将所有发光二极管的阴极连在
一起)和共阳极数码管(将所有发光二极管的阳极连
在一起)。
单片机系统扩展LED数码管时多用共阳LED。共
阳数码管每个段笔画是用低电平(“0”)点亮的,要求驱动
功率很小;而共阴数码管段笔画是用高电平(“0”)点亮
的,要求驱动功率较大。通常每个段笔画要串一个数
百欧姆的降压电阻。
6.2.1 LED显示器及其接口
七段LED字形码如下表所示。
6.2.1 LED显示器及其接口
2.LED点阵模块显示器
LED点阵模块显示器是指由发光二极管排成一个
m×n的点阵,每个发光二极管构成点阵中的一个点。这
种显示器显示的字形逼真,能显示的字符比较多,但控
制比较复杂。适用于显示汉字、图形和表格,广泛应用
于公共场合的信息发布。
6.2.1 LED显示器及其接口
3. LED的驱动接口
LED工作时需要一定的工作电流,才能正常发光。
单个LED实际上是一个压降为1.2~1.5V的发光二极管,
流过LED的电流大小决定了它的发光强度,R为限流电
阻。适当减小限流电阻可以增加LED的工作电流,使
LED的显示效果更好。但工作电流过大,会对驱动器件、
LED造成损害。通常每个段笔画要串一个数百欧姆的降
压电阻。下图为单个LED的驱动接口电路。
6.2.1 LED显示器及其接口
4.LED数码管的显示与驱动
LED数码管显示器的工作方式:静态和动态两种
显示方式。
(1)静态显示方式
静态显示方式的各数码管在显示过程中持续得到
送显信号,与各数码管接口的I/O口线是专用的。其特
点是显示稳定,无闪烁,用元器件多,占I/O线多,无
须扫描。系统运行过程中,在需要更新显示内容时,
CPU才去执行显示更新子程序,节省CPU时间,提高
CPU的工作效率,编程简单。
6.2.1 LED显示器及其接口
[例题]设计8051通过8255A芯片扩展3位七段共阳
极LED显示器。
解:接口电路如下页图所示,8255A与8051的
接口略。在程序中将相应的字形码写入8255A
的PA, PB, PC口,显示器就可以显示出3位字
符。
8255A的初始化设定为PA, PB, PC为基本
I/O输出方式,待显示的数据存放在内部RAM
的40H~42H单元,数据格式为非压缩BCD码。
6.2.1 LED显示器及其接口
初始化及显示程序如下:
ORG 1000H
DSP8255: MOV DPTR, #7FFFH
MOV A, #80H
; 8255A工作方式设置
MOVX @DPTR, A ; 工作方式字送8255A控制口
6.2.1 LED显示器及其接口
MOV R0, #40H
; 显示数据起始地址
MOV R1, #3H
; 待显示数据个数
MOV DPTR, 7FFCH ; 第一个数据在PA口显示
LOOP :MOV A, @R0
; 取出第一个待显示数据
ADD A, #06H; 加上偏移量,查表指令到表TAB 有6个字节指令
MOVC A, @A+PC
; 查表取出字形码
MOVX @DPTR, A
; 字形码送8255A端口显示
INC
R0
; 指向下一个数据存储位置
INC
DPTR
; 指向下一个七段数码显示器
DJNZ R3, LOOP
; 未显示结束,返回继续
RET
TAB:DB 0C0H, 0F9H, 0A4H, 0B0H ; 0, 1, 2, 3 字形码表
DB 99H, 92H, 82H, 0F8H
; 4, 5, 6, 7
DB 80H, 90H, 88H, 83H
; 8, 9, A, b
DB 0C6H, 0A1H, 86H, 8EH
; C, d, E, F
END
6.2.1 LED显示器及其接口
[例题] 利用在8051串行口扩展多片串行输入并行输出的
移位寄存器74LS164作为静态显示器接口的方法,设计
3位静态显示器接口,并写出显示更新子程序,实现将
7FH ~ 7DH 3 个 单 元 的 数 值 分 别 显 示 在 3 位 LED2 ~
LED0上。
解:接口电路如图下图所示。3个共阳极数码管的公共端
均接Vcc,段码通过串行口,采用串—并转换原理,分
别送出3个数码管的段码(先送出的段码字节在LED2
数码管上显示),图中的电阻值取750。
6.2.1 LED显示器及其接口
6.2.1 LED显示器及其接口
程序如下:
DISPSER:
DL0:
STAB:
ORG
MOV
MOV
MOV
MOV
MOVC
MOV
JNB
CLR
DEC
DJNZ
RET
DB
DB ·
……
END
1000H
R5, #03H
R1, #7FH
A, @R1
DPTR, #STAB
A, @A+DPTR
SBUF, A
T1, $
T1
R1
R5, DL0
; 显示3个字符
; 7FH~7DH存放要显示的数据
; 取出要显示的数据
; 指向段数据表
; 查表取字形数据
; 送出数据,进行显示
; 输出完否?
; 输出完,清中断标志
; 再取下一个数据
; 循环3次
; 返回
0C0H, 0F9H, 0A4H, 0B0H; 段数据表(共阳极)
……
6.2.1 LED显示器及其接口
(2)动态显示方式
动态显示方式是指一位一位地轮流点亮每位显示
器,与各数码管接口的I/O口线是共用的。其特点是
有闪烁,用元器件少,占I/O线少,必须扫描,花费
CPU时间,编程复杂。
6.2.1 LED显示器及其接口
[例题] 设计6位共阴极显示器与8155的接口电路,并写
出与之对应的动态扫描显示子程序。显示数据缓存区
在片内RAM 79H~7EH单元。
解: 设计8155的PA作为扫描口,PB作为段码输出口,
都 工 作 在 基 本 输 出 方 式 下 , PA 口 的 端 口 地 址 为
7F01H,PC口的端口地址为7F03H。进行扫描时,
PA的低6位依次置1,依次选中了从左至右的显示器。
使用ULN2803作为段码输出驱动(反相驱动),所
以共阴极数码管在段数据表中的字形码应与共阳极数
码管的字形码相同。 6位动态显示器接口电路如下页
图所示。
动态扫描子程序如下:
DSP8155:
DISP1:
ORG
MOV
MOV
MOVX
MOV
MOV
1000H
DPTR, #7F00H
;指向8155命令寄存器
A, #00000011B
; 设定PA口、PB口为基本输出方式
@DPTR, A
; 输出命令字
R0, #7EH ; 指向缓冲区末地址
A, #20H
; 扫描字,PA5为1,从左至右扫描
6.2.1 LED显示器及其接口
LOOP: MOV R2, A
; 暂存扫描字
MOV DPTR, #7F01H
; 指向8155的PA
MOVX @DPTR, A
; 输出位选码
MOV A, @R0
; 读显示缓冲区一字符
MOV DPTR, #PTRN
; 指向段数据表首地址
MOVC A, @A+DPTR
; 查表,得段数据
MOV DPTR, #7F02H
; 指向8155的PB
MOVX @DPTR, A
; 输出段数据
CALL D1MS
; 延时1ms
DEC R0
; 调整指针
MOV A, R2
; 读回扫描
CLR C
; 清进位标志
RRC A
; 扫描字右移
JC
PASS
; 结束
AJMP LOOP
; 继续显示
PASS: RET
; 返回
D1MS: MOV R7, #02H
; 延时1ms子程序
DMS: MOV R6, #0FFH
DJNZ R6, $
DJNZ R7, DMS
RET
PTRN: DB
0C0H, 0F9H, 0A4H, 0B0H, 99H ; 段数据表
DB
……
DB
……
……
END
6.2.2
LCD显示器及其接口
液晶显示器简称LCD(Liquid Crystal Diodes)是
利用液晶经过处理后能够改变光线传输方向的特性,
达到显示字符或者图形的目的。其特点是体积小、重
量轻、功耗极低、显示内容丰富等特点,在单片机应
用系统中有着日益广泛的应用。
6.2.2
LCD显示器及其接口
1.LCD的分类及特点
分类:笔段式和点阵式(可分为字符型和图像型)。
笔段式LCD显示器:
类似于LED数码管显示器。
每个显示器的段电极包括a,
b, c, d, e, f, g七个笔划(段)
和 一 个 背 电 极 BP ( 或
COM)。可以显示数字和
简单的字符。
点阵式LCD显示器:
段电极与背电极呈正交带
状分布,液晶位于正交的
带状电极间。点阵式LCD
的控制一般采用行扫描方
式,如图右所示为显示字
符“A”的情况。
6.2.2
LCD显示器及其接口
2.笔段式LCD液晶显示器的驱动
在LCD的公共极(一路为背电极)加上恒定的交
变方波信号,通过控制段极的电压变化,在LCD两
极间产生所需的零电压或二倍幅值的交变电压,以达
到LCD亮、灭的控制。在笔段式LCD的段电极与背
电极间施加周期地改变极性的电压(通常为4 V或5
V),可使该段呈黑色。
6.2.2
LCD显示器及其接口
3.LCD显示模块LCM (Liquid Crystal Display Module)
在实际应用中,用户很少直接设计LCD显示器
驱动接口,一般是直接使用专用的LCD显示驱动器
和LCD显示模块LCM 。
LCM是把LCD显示屏、背景光源、线路板和驱
动集成电路等部件构造成一个整体,作为一个独立部
件使用。其特点是功能较强、易于控制、接口简单,
在单片机系统中应用较多。其内部结构如下页图所示。
LCM一般带有内部显示RAM和字符发生器,只要输
入ASCII码就可以进行显示。
6.2.2
LCD显示器及其接口
LCD显示模块LCM按显示功能可分为:LCD段式显示模块、
LCD字符型显示模块、LCD图形显示模块三类。
HD44780字符显示模块是较常用的LCD显示模块,共有14个
引脚,其中,8个数据引脚,3个控制引脚,3个电源引脚。每个
HD44780可控制的字符可达每行80个,具有驱动16×40点阵的能
力。具有其自身的11条指令构成的指令系统,用户对模块写入适
当的控制命令,即可完成清屏、显示、地址设置等操作。
6.2.2
LCD显示器及其接口
各引脚功能定义如下表所示。
6.2.2
LCD显示器及其接口
[例题] 设计8051单片机驱动HD44780显示模块的接口电路。
解:8051单片机与HD44780显示模块的线路连接如下图所示,
8051的P1口与HD44780的数据线相连,HD44780的 R / W 端信号
由8051的P3.5提供,HD44780的通信允许信号E由8051的P3.3
提供,HD44780的寄存器选择信号RS由8051的P3.4提供。
HD44780 初 始 化 的 方 法 主 要
有以下两种:
(1)利用模块内部的复位电路
进行初始化,完成清除显示、
功能设置、开/关显示、设置光
标状态及闪烁功能、方式设置。
(2)利用软件编程实现初始化。
6.3 MCS-51单片机键盘和显示器接口设计实例
6.3.1 利用8155芯片实现键盘和显示器接口
1.接口电路
下页图是一个典型实用的采用8155并行扩展接口构成的键
盘显示电路,图中只设置了32个键,如果增加PC口线,可以增
加按键,最多可达48个键。LED显示器采用共阴极,段选码由
8155 PB口提供,位选码由PA口提供。键盘的列输入由PA口提
供,行输出由PC0~PC3提供,8155的RAM地址为7E00H~
7EFFH,I/O地址为7F00H~7F05H。图中的8155也可以用
8255A来替代。
2.软件设计
由于键盘与显示设计成一个接口电路,因此在软件中合并
考虑键盘查询与动态显示,键盘消抖的延时子程序用显示程序
替代。8155动态显示子程序DSP8155参照动态显示的例题。
6.3 MCS-51单片机键盘和显示器接口设计实例
程序如下:
ORG
KD1:
MOV
PC输入方式
MOV
MOVX
KEY1: ACALL
JNZ
ACALL
AJMP
LK1:
ACALL
ACALL
ACALL
JNZ
ACALL
AJMP
LK2:
MOV
MOV
1000H
A, #0000 0011B ; 8155初始化,PA,PB基本输出方式,
DPTR, #7F00H
@DPTR, A
KS1
LK1
DSP8155
KEY1
DSP8155
DSP8155
KS1
LK2
DSP8155
KEY1
R2, #0FEH
R4, #00H
; 调用判断是否有键闭合子程序
; 有键闭合转LK1
; 调用8155动态显示子程序,延时6ms
; 调用两次显示,延时12ms
; 调用8155动态显示子程序,延时6ms
6.3 MCS-51单片机键盘和显示器接口设计实例
LK3:
MOV
MOV
MOVX
INC
INC
MOVX
JB
MOV
AJMP
LONE:JB
LTWO:
LTHR:
LKP:
LK4:
MOV
AJMP
JB
MOV
AJMP
JB
MOV
ADD
PUSH
ACALL
ACALL
JNZ
POP
DPTR, #7F01H
A, R2
@DPTR, A
DPTR
DPTR
A, @DPTR
ACC.0, LONE
A, #00H
LKP
ACC.1, LTWO
A, #08H
LKP
ACC.2, LTHR
A, #10H
LKP
ACC.3, NEXT
A, #18H
A, R4
ACC
DSP8155
KS1
LK4
ACC
6.3 MCS-51单片机键盘和显示器接口设计实例
NEXT: INC
MOV
JNB
RL
MOV
AJMP
KND: AJMP
KS1: MOV
MOV
MOVX
INC
INC
MOVX
CPL
ANL
RET
END
R4
A, R2
ACC.7, KND
A
R2, A
LK3
KEY1
DPTR, #7F01H
A, #00H
@DPTR, A
DPTR
DPTR
A, @DPTR
A
A, #0FH
6.3 MCS-51单片机键盘和显示器接口设计实例
6.3.2 利用MCS-51的串行口实现键盘和显示器接
口
1.接口电路
应用MCS-51单片机的串行口方式0的输出方式,在串
行口外接移位寄存器74LS164,构成键盘和显示器接口,
其硬件接口如下页图所示(图中只画出三位LED静态显
示和16个按键,用户根据需要可以扩展)。采用静态显
示,软件设计比较简单,节约CPU的资源。
6.3 MCS-51单片机键盘和显示器接口设计实例
2.软件设计
显示子程序如下:
ORG
1000H
DSPSER:
SETB P3.3
; 开放显示输出
MOV
R7, #03H
; 送出的显示段码个数
MOV
R0, #7FH
; 7FH~7DH为显示缓冲区
DSPS1:
MOV
A, @R0
; 取出要显示的数据
ADD
A, #0DH
; 加上偏移量
MOVC A, @A+PC
; 查段码表TAB1
MOV
SBUF, A
; 经过串行口将段码送出
DSPS2:
JNB TI, DSPS2 ; 数据发送完?
CLR TI
DEC R0
; 指向下一个数据单元
DJNZ R7, DSPS1
; 三个显示器是否全部显示?
CLR P3.3
; 三个数据显示完,关闭送显示数据通
道
RET
TAB1: DB
……
; 段码表
6.3 MCS-51单片机键盘和显示器接口设计实例
键盘扫描子程序如下:
KEYS1:
MOV
MOV
KSY0:
JNB
CLR
KSY1:
JNB
JB
PKS1:
ACALL
JNB
JB
PKS2:
MOV
MOV
MOV
MOV
KSY2:
MOV
KSY3:
JNB
CLR
JNB
JB
MOV
AJMP
PKONE:
MOV
A,#00H
SBUF, A
; 扫描键盘全部输出0
TI, KSY0
; 数据发送完?
TI
P3.4, PKS1
; 有键闭合吗?有则转PKS1处理
P3.5, KSY1
; 第二行有键闭合吗?
DELAY10; 调用延时10ms子程序,键盘去抖
P3.4, PKS2
; 有键闭合吗?
P3.5, KSY1
; 无键闭合,是抖动
R7, #08H
; 不是抖动引起的
R6, #0FEH
; 判断是哪个键按下?
R3, #00H
A, R6
SBUF, A
TI, KSY3
; 等待串行口发送完
TI
P3.4, PKONE
; 是第一行的某键按下?
P3.5, NEXT
; 是第二行的某键按下?
R4, #08H
; 第二行有键按下
PKS3
R4, #00H
; 第一行有键按下
6.3 MCS-51单片机键盘和显示器接口设计实例
PKS3:
KSY4:
KSY5:
NEXT:
DELAY10:
MOV
JNB
CLR
JNB
JNB
MOV
ADD
RET
MOV
RL
MOV
INC
DJNZ
AJMP
……
RET
END
SBUF, #00H
TI, KSY4
TI
P3.4, KSY5
P3.5, KSY5
A, R4
A, R3
; 等待键的释放
;
A, R6
A
R6, A
R3
R7, KSY2
KEYS1
; 判断下一列是否有键按下
; 是第一行的某键按下?
; 8列是否全部扫描完?
; 扫描完成
; 延时10ms子程序
6.3 MCS-51单片机键盘和显示器接口设计实例
6.3.3
利用专用芯片实现键盘和显示器接口
键盘的处理和显示的处理可由专用芯片完成,键盘和显
示器管理专用芯片种类较多,常用的键盘和显示器管理专
用芯片有Intel公司的8279芯片,可实现64个按键、 16位
LED显示器的管理。
6.4
术
MCS-51单片机与微型打印机的接口技
常用的微型打印机有TPμP-16A/40A和LASER-PP40描
绘器等。
6.4.1 微型打印机的特点
1.LASER PP40的特点
LASER PP40是四色描绘式打印机。具有文本模式和
图案模式两种工作模式。可用来描绘字符及其图形,具
有较强的绘图功能。可在多种智能仪表及实时控制系统
中作为微型绘图机使用。
2. TPμP-16A/40A的特点
TPμP-16A/40A是一种超小型的智能点阵式打印机。
TPμP-40A与TPμP-16A的接口与时序要求完全相同,操
作方式相近,硬件电路及插脚完全兼容,只是指令代码
不完全相同。TPμP-16每行可打印16个字符。TPμP-40A
每行可打印40个字符,字符点阵码为5×7,内部有一个
240种字符的字库,并有绘图功能。
6.4.1 微型打印机的特点
3. TPμP-40A的主要技术性能
① 具有2KB控制程序及标准的Centironic并行接口。
② 具有较丰富的打印命令,格式简单。
③ 可产生全部标准的ASCII代码字符,以及128个非标准字符和图
符。
④ 打印格式比较灵活。
⑤ 字符、图符和点阵图可以在宽和高的方向放大为2、3或4倍。
⑥ 每行字符的点行数(包括字符的行间距)可用命令更换,即字符
行间距及每行字符的空点行在0~255间任选。
⑦ 带有水平和垂直制表命令,便于打印表格。
⑧ 具有重复打印同一字符命令,以减少输送代码的数量。
⑨ 带有命令格式的检错功能,当输入错误命令时,打印机立即打
印出错误信息代码。
6.4.2
接口技术
1. 与单片机的连接
TPμP-40A微型打印机与计算机应用系统通过机匣后部
的接插件及20芯扁平电缆相连,打印机接插件引脚信号如
下图所示。
引脚功能如下:
DB0~DB7:单向数据线,由计算机输入打印机。
STB (STROBE):数据选通信号。在该信号的上升沿,
数据线上的8位并行数据被打印机读入机内锁存器。
BUSY:打印机“忙”状态信号。高电平时表示打印机
正在打印数据。它可作为中断请求信号,也可供CPU查
询。
ACK
(ACKNOW-LEDGE):打印机的应答信号。低电平时表明打印机已
取走数据线上的数据。
ERR
(ERROR):出错信号。当输入打印机的命令格式有错误时,打印机立
即打印出一行出错信息,以提示操作者注意。
2.接口信号时序
TPμP-40A微型打印机的接口时序如下图所示。选通信号 STB的宽度应大
ACK
于0.5μs,应答信号
可以不使用,而采用BUSY信号进行操作。
3. TPμP-40A/16A与
MCS-51单片机接口
TPμP-40A/16A
是智能打印机,输入
电路有锁存器,输出
电路有三态门控制。
可以直接与单片机应
用系统的总线( P0
口)相连接,如右上
图所示。也可通过扩
展I/O口与打印机相
连的。如右下图所示
采用8155并行I/O口
作打印机的接口。
6.4.3 字符代码及打印命令
1. 打印机代码
TPμP-40A/16A 全 部 代 码 共 256 个 , 其 中 : 00H 无 效 ;
01H~0FH为打印命令;10H~1FH为用户自定义命令;20H~
7FH为标准ASCII码;80H~FFH为非标准ASCII代码,包括
少量汉字、希腊字母、块图图符和一些特殊的字符。
TPμP-16A 的 有 效 代 码 与 TPuP-40A 的 不 同 之 处 仅 在 于
01H~0FH中的指令代码,前者为16个,后者为12个,功能也
不尽相同。
TPμP-40A/16A中全部字符代码为10H~FFH,字符串的
结束代码,或称回车换行代码为0DH。但是,当输入代码满
40/16个时,打印机自动回车。
字符代码中的10~1F为用户自定义代码,其格式如下:
05 XX YYl YY2 YY3 YY4 YY5 YY6
其中:05——命令字节;
XX——被定义代码,10~1FH有效;
YYl~YY6——6个点阵字节。
如打印 “32.8cm”的代码为:33,32,2E,38,63,6D,0D。
2. 打印机命令
TPμP-40A控制打印的命令由一个命令字节和若干参数字节组
成,其格式为:
CC XX0…XXn
其中:CC——为命令代码字节,01H~0FH;
XXn——为n个参数字节,n=0~250,随不同命令而异。
命令结束代码为0DH,除下页表中代码为06H的命令必须用
0DH结束外,其他均可省略。TPμP-40A的命令代码及功能如
下页表所示。
6.4.4
打印程序实例
[例题] 编制程序,打印字符串。打印格式如下:
DATE: 年 月 日
NO.
解:程序如下:
LP1:
LP2:
LP3:
ORG 1000H
MOV DPTR, #7FFFH
MOVX A, @DPTR
JB ACC.7, LP1
MOV R4, #13
MOV A, R4
MOVC A, @A+PC
MOVX @DPTR,A
MOVX A, @DPTR
JB ACC.7, LP3
INC R4
TAB:
MOV A, R4
XRL A, #40
JNZ LP2
SJMP $
DB 03, 02, 44,
DB 54, 45, 3A, 20
DB 20, 20, 20, 8C
DB 20, 20, 8D, 20
DB 20, 8E, 08, 01
DB 4E, 4F, 2E, 20
DB 20, 20, 20, 0D
END
; 宽高同时增加,打印字增高,D,A
; T,E,:, ,
; , , ,年
; , ,月, ,
; ,日,跳行,增宽
; N,O,.,
; , , ,回车
作业与练习:
6.1
6.5
6.9
6.13
6.4
6.6
6.12
6.14