490 likes | 673 Views
第六章 单片机并行 I/O 口扩展. 6.1 单片机 I/O 接口技术概述. 一、 为什么要扩展 I/O 接口. 锁存器. 实质是触发器。 锁存信号有效时,输出随输入变化;无效时,输出不随输入变化,而保持上次的结果,即锁存。 用于单片机输出口扩展。. 三态缓冲器. 控制信号. 实质是门电路。不能保存数据。 使能有效时,输出随输入变化;无效时,输出呈现高阻状态,相当于和总线隔离。 用于单片机输入口扩展。. 二、单片机 I/O 扩展编址技术. MOVX. 三、 I/O 数据传送方式. 6.2 单片机简单 I/O 扩展.
E N D
6.1 单片机I/O接口技术概述 一、为什么要扩展I/O接口
锁存器 实质是触发器。 锁存信号有效时,输出随输入变化;无效时,输出不随输入变化,而保持上次的结果,即锁存。 用于单片机输出口扩展。
三态缓冲器 控制信号 实质是门电路。不能保存数据。 使能有效时,输出随输入变化;无效时,输出呈现高阻状态,相当于和总线隔离。 用于单片机输入口扩展。
二、单片机I/O扩展编址技术 MOVX
6.2单片机简单I/O扩展 常用的MCS-51并行I/O扩展方法有: 采用74系列器件扩展简单的I/O口; 采用可编程的的并行接口电路(如8255)扩展I/O口。
RD 8051 74LS244 Y P0 数据输入 外设 A 1G 2G 74LS244与单片机接口电路 只扩展了一片74LS244,也没有外部RAM。当读外部RAM时,就选中244,进行数据输入。 MOVX A, @DPTR DRTP可以任意,即0000~FFFFH。
实验3.3 电路 要访问74LS244,P2.7必须为0,故74LS244的地址范围为 0000~7FFFH。 MOVX A, @DPTR
8051 G G G G G D800H ~ DFFFH F000H ~ F7FFH E800H ~ EFFFH B800H ~ BFFFH 7800H ~ 7FFFH
6.2.2简单输出口扩展 典型芯片:74LS273 带复位功能的8D触发器。
WR 8051 74LS273 MR P0 D 数据输出 外设 Q CLK 74LS273与单片机接口电路 只扩展了一片74LS273,也没有外部RAM。当写外部RAM时,就选中273,进行数据输出。 MOVX @DPTR, A DPTR可以任意,即0000~FFFFH。
实验3.3电路 要访问74LS273,P2.7必须为0,故273的地址范围为 0000~7FFFH。 MOVX @DPTR, A
8051 CLK MR 输出口----利用锁存器扩展; 输入口----利用缓冲器扩展
6.3单片机LED数码管接口技术 6.3.1 LED结构及原理 D7 D6 D5 D4 D3 D2 D1 D0 如共阳极时,输出1 1 1 1 1 0 0 0即F8H时,显示数字7
8051 P0.0 P0.7
I/O(1) I/O(2) a b c d e f g dp a b c d e f g dp 6.3.2 LED显示方式 一、静态显示 公共端直接接地(共阴极)或接电源(共阳极); 各段选线分别与I/O口线相连. 要显示字符,直接在I/O线送相应的字段码。
查表程序结构 MOV A,#00 MOV DPTR, #TAB MOVC A, @A+DPTR MOV P0, A SJMP $ TAB: DB 3FH, 06H, 5BH, 4FH, 66H, 6DH, 7DH, 07H DB 7FH, 6FH, 77H, 7CH, 39H, 5EH, 79H, 71H
采用延时程序:0~9每隔1s循环显示 ORG 0000H START:MOV 50H,#00 MOV DPTR,#TABLE ;DPTR指向段码表首地址 S1: MOV A,50H MOVC A,@A+DPTR ;查表取得段码 CJNE A,#01H,S2 ;判断段码是否为结束符 SJMP START S2: MOV P0,A ;段码送数码管显示 LCALL DELAY ;延时 INC 50H SJMP S1 DELAY: MOV R5,#50 ;延时子程序 D2: MOV R6,#20 D1: MOV R7,#248 DJNZ R7,$ DJNZ R6,D1 DJNZ R5,D2 RET TABLE: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH ;段码表 DB 01H ;结束符
采用中断方式:0~9每隔1s循环显示 ORG 0000H AJMP START ORG 000BH AJMP TIMET0 START: MOV R3,#20 MOV TMOD,#01H MOV TH0,#9EH MOV TL0,#58H SETB EA SETB ET0 SETB TR0 MOV 50H,#00H ; MOV A,50H MOV DPTR,#TABLE MOVC A,@A+DPTR MOV P0,A SJMP $ TIMET0: MOV TH0,#9EH MOV TL0,#58H DJNZ R3, OVFLOW MOV R3,#20 INC 50H MOV A,50H CJNE A,#0AH,NEXT MOV 50H,#00H NEXT:MOV A,50H MOVC A,@A+DPTR MOV P0,A OVFLOW: RETI TABLE: DB 3FH,06H,5BH DB 4FH, 66H,6DH,7DH DB 07H,7FH,6FH END
2位数码管静态显示 a P0 Dp a P1 Dp
利用74LS273扩展I/O口进行2位数码管静态显示 273 a Q0 WR P2.7 P2.6 P0 D Q7 Dp CLK ≥1 1 273 a Q0 D Q7 Dp CLK ≥1 1
LE LE LE LE 为高电平时,Q 随 D 而变。当 LE 为低电平时,Q被锁存。
I/O(1) D3 D2 D1 D0 I/O(2) 二、动态扫描显示
动态扫描显示 将所有数码管的段选线并接在一起,用一个IO口控制; 公共端不是直接接地(共阴极)或电源(共阳极),而是通过相应的I/O口线控制. 编程时,需要输出段选和位选信号。位选信号选中其中一个数码管,然后输出段码,使该数码管显示所需要的内容,其它数码管处于熄灭状态,延时一段时间后,再选中另一个数码管,并输出对应段码,高速交替。 从计算机的角度看, LED是一个一个的显示,但由于人的视觉暂留作用,只要交替显示的时间足够快,看起来所有的数码管都是一起显示的。
P0.7 P0.6 P0.5 P0.4 P0.3 P0.2 P0.1 P0.0 8051 P1.5 P1.4 P1.3 P1.2 P1.1 P1.0
显示缓冲区:55H~50H 要显示的数所存放的RAM地址; 显示缓冲区指针:R0,初始值为50H; 位选控制:R1,初始值为0FEH。
注意: 在轮流显示过程中,每位数码管的点亮时间为1~2ms。若延时时间长,会出现闪烁现象,若延时时间太短,则会出现显示暗且有重影。 随时更新显示缓冲区内容,再调用显示子程序即可显示。
6.4单片机键盘接口技术 键盘上闭合键的识别由专用的硬件编码器实现,并产生键编码号或键值的称为编码键盘,如计算机键盘. • 非编码键盘又分为: 独立键盘和行列式(又称为矩阵式)键盘。
VCC P1.1 K GND 6.4.1 独立按键 I/O口用于输入; 按键的一端接地,另一端与单片机的任一I/O口相连。 开始时先给I/O赋一高电平,然后让单片机不断地检测该I/O口是否变为低电平,一旦检测到低电平说明按键按下,就可执行相应的指令。
VCC VCC 8051 P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 8051 GND GND 与 INT0 独立按键与单片机的接口电路 独立按键就是各按键相互独立,每个按键各接一根I/O口线,每根I/O口线上的按键都不会影响其它的I/O口线。 查询方式 中断方式
查询方式独立按键程序 START:MOV P1,#0FFH MOV A, P1 JNB ACC.0,K0 ;检测0号键 JNB ACC.1,K1 ;检测1号键 JNB ACC.2,K2 ;检测2号键 JNB ACC.3,K3 ;检测3号键 JNB ACC.4,K4 ;检测4号键 JNB ACC.5,K5 ;检测5号键 JNB ACC.6,K6 ;检测6号键 JNB ACC.7,K7 ;检测7号键 JMP START ;无键按下返回,再顺次检测 K0: AJMP KEY0 ;入口地址表 K1: AJMP KEY1 …… K7: AJIMP KEY7
KEY0:…… ;0号键功能程序 JMP START ;0号键功能程序执行完返回 KEY1:…… ;1号键功能程序 JMP START ;1号键功能程序执行完返回 …… KEY7:…… ;7号键功能程序 JMP START ;7号键功能程序执行完返回
6.4.2 矩阵式键盘 矩阵式键盘又叫行列式键盘。用I/O口线组成行、 列结构,键位设置在行列的交点上。 例如4×4的行、列结构可组成16个键的键盘,比一个键位用一根I/O口线的独立式键盘少了一半的I/O口线。
P1.0 P1.1 P1.2 P1.3 P2.0 P2.1 P2.2 P2.3 P2.4 P2.5 P2.6 P2.7 矩阵式键盘及其接口 8051 4×4 4×8
矩阵式键盘的工作过程 第一步是CPU首先检测键盘上是否有键按下; 第二步是再识别是哪一个键按下。 一、判断是否有键按下 方法是:将列线送入全扫描字0,读行线状态判别。 列线输出0000,然后读入行线状态, 若没有键按下,则行线状态为全1( 1111 ); 若有任一键按下,则行线状态不为全(1111)。
二、识别哪一个键按下 • 方法是:逐列扫描。 • 列线逐列输出0,然后读入行线状态, • 若行线状态为全1,则此列没有键按下,继续扫描下一列。 • 若行线状态不为全为1,则有一键按下。 • 键号:将所有键从左到右从上到下的顺序进行编号。 键号=行号×8+列号
说明 按键都是机械弹性开关,由于机械触点的弹性作用,一个按键在闭合和断开的瞬间伴随有一连串的抖动,抖动时间长短一般为5~10ms。抖动过程中不能进行状态输入,需要进行去抖动处理。 单片机应用系统常采用软件延时方法去抖动。
入口 ① 键号入栈保存 有键按下? N 按键抬起? N Y 延时12ms Y 键号送A N 有键按下? 返回 Y ① 键盘扫描程序流程图