|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
编者按:移位寄存器的串行扩展技术是单片机串行口扩展的一种常用方法。对于MCS-51系列单片机而言,将串口置为工作方式0,串口便工作在移位寄存器方式下了。此时,单片机的RXD口作串行数据的发送/接收口,TXD口作移位脉冲输出口。利用单片机串口的这一特性,可以十分方便地扩展I/O口线,本文便是一例。通过本例,读者除了可以加深对串口工作方式0的理解外,还可以举一反三,将之用于其他需要进行I/O口扩展的场合,比如用串口扩展键盘等。
/ y. W* K1 W# f) g* `0 N遥控数码报时闹钟
; ^5 @' G( x, I4 n" ?; M! B CD4094是带输出锁存和三态控制的串入/并出高速转换器,具有使用简单、功耗低、驱动能力强和控制灵活等优点。
& W% [0 h6 ~0 k5 b6 S% b CD4094的引脚定义如图1。其中{1}脚为锁存端,{2}脚为串行数据输入端,{3}脚为串行时钟端。{1}脚为高电平时,8位并行输出口Q1~Q8在时钟的上升沿随串行输入而变化;{1}脚为低电平时,输出锁定。利用锁存端可方便地进行片选和级联输出控制。{15}脚为并行输出状态控制端,{15}脚为低电平时,并行输出端处在高阻状态,在用CD4094作显示输出时,可使显示数码闪烁。{9}脚QS、{10}脚Q′S是串行数据输出端,用于级联。QS端在第9个串行时钟的上升沿开始输出,Q′S端在第9个串行时钟的下降沿开始输出。7 P; {8 T. P& s% V. m
当CD4094电源为5 V时,输出电流大于3.2mA,灌电流为1 mA。串行时钟频率可达2.5MHz。
( x" P* Y x* s5 g; [ 1. CD4094作静态LED显示驱动器
0 R) e) N! |& g0 U 图2为用CD4094作驱动器的三位数码管静态显示电路略图。单片机串口工作在方式0,即移位寄存器方式。输出数据首先送到IC1,第二次输出的数据移至IC1时,先前输出数据则移到IC2,依此类推。输出三次后,在IC1、IC2、IC3的Q1~Q8口分别得到数据3、数据2、数据1。' A- O- M. X+ c |
程序如下:(DISP为显示子程序)
. ^0 ~- q$ T" A* @) J ..................+ R) X) \' t! I- \; ?' G
MOV SCON,#00H ;置串口为方式0
+ o' k; v% a2 N! s ..................+ D" t. f* ?, P2 p/ F" P0 _ A
DISP: CLR P3.7 ;输出锁存
! N1 ~( z7 I# O) ?6 X% g- A MOV R0,#33H ;显示值送33H、34H、35H* u; S. S( U& @! K3 L: C( d) x [
MOV R7,#03H ;置数码管个数3
2 N1 Y9 i4 m4 Z qLP:MOV A,@R0
+ i ?1 _" ^! l0 n7 z; A. Q MOV DPTR,#TAB ;置字段码表首址( S6 {3 Y. i/ F3 }. K% b k9 j
MOVC A,@A+DPTR ;查字段码表
5 ~2 E! u6 `# P8 H* X" Z6 ` MOV SBUF,A ;送字段码
& S- D+ Z' |3 d- n" q$ C/ D: ~ JNB TI,$ ;等待传送结束7 n1 ^( X( y% C2 Y# N/ z L
CLR TI ;清串行中断标志8 z3 A/ P# U" j
INC R0 ;显缓区地址加1
9 q8 N& ~1 W$ D0 I9 E DJNZ R7,LP ;显示数码是否取完?
" P8 b9 V/ `2 K# t SETB P3.7 ;允许输出显示
2 ^: D: D& R" U: c NOP
, T8 n5 ?* k! y5 w, S) C CLR P3.7 ;输出锁存
' r* W1 S2 {% {5 o RET + q# i v; `2 V% s2 M, G
TAB:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH
, |5 J9 r. v) j5 b" O DB 6FH,00H
$ Q. W! L1 g7 B5 t d( W {; U 说明:在串行口不作为其他使用,且显示的更新速度很低时,STROBE端可以始终接高;也可将P3.7口接到CD4094的{15}脚,从P3.7口输出一定频率的脉冲,使显示闪烁。
6 ~+ O3 `" Q n5 Q 2. CD4094作LED动态显示驱动器; Q- i. v% a. N
用一片CD4094作段驱动,一片CD4094作位驱动,驱动8位带小数点的数码管(见图3)。
0 `8 J& }' X! f5 L 程序如下:(DISP为显示子程序); s4 l- {4 d) g/ u+ F8 ?
MOV SCON#00H ;置串口为方式0
9 k- z( u6 f, A! b/ w7 v9 ` ……! t2 b: ?# |) Z! y) x) z
DISP:CLR P3.7 ;输出锁存
1 c! H; u8 \! @ u+ E9 A& _6 ?/ A3 e MOV R0, #30H ;显缓区首址送R0
' S9 W, U# v( c% ~ MOV R4, #08H ;置数码管个数为81 ~4 o: a" ^# k- ^4 J; W
MOV R5, #0FEH ;送位码初值! w! L8 [- a- _
LP: MOV A, R5 ;取位码
" G9 p- Q3 F* p( t" V MOV SBUF, A ;送位码+ K: W; T( l L) a9 L) T3 m% u1 v6 S
JNB T1 ;等待传送结束
( R7 j# R" h4 B, X6 e- f CLR T1 ;清串行中断标志5 [7 A4 i% }, X& w
MOV A, @R0 ;取段码/ [" F+ x: P) [5 m* D* p) I* k7 C
MOV DPTR, #TAB ;置段码表首址
; n( z6 ^6 E/ a6 ~1 {5 [: m MOVC A, @A+DPTR ;查段码表
M6 i+ Q* q( t6 t( ^8 | MOV SBUF,A ;送段码' x% S Q2 j5 `3 C
JNB T1 ;等待传送结束
; ~% a4 }3 q" v$ [; G0 P4 g6 L CLR T1 ;清串行中断标志
: }9 `* Q0 P( b1 K$ C STB P3.7 ;允许输出显示
' W* W$ [/ g# S% _5 ^ LCALL DEL ;延时1ms( j, s2 |$ Y% m5 Y5 e
MOV A, R5 ;取位码% N( i% ]# J) M$ L2 K
RL A ;位码左移一位
; Q6 q5 o: x/ s MOV R5, A$ j/ |* O6 q+ z- n) X# w5 `* {6 N
INC R0 ;显缓区地址加1
' w/ Q8 \( @! l CLR P3.7 ;输出锁存1 |" G% P/ q: `7 H1 ~
DJNZ R4, LP ;8位显示完否?
9 E9 P+ M- B5 A' R9 D1 O* z RET
0 ]5 y- {8 g, }/ J9 g( H( b1 ?1 ADEL: MOV R7, #02H ;延时1ms (fosc=12MHz)6 P% m X7 Y- h# U( {' X& W
DL: MOV R6,#0F8H% w' y, D6 `# y: M) {! [
DJNZ R6, $' K$ D1 x0 }, h
DJNZ R7, DL
/ p0 I9 V" W( ]: w2 u4 e* a7 u RET
1 I* L! z1 K a# q. U4 |3 TTAB: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H
0 E. X' L3 R* x7 y$ i DB 7FH,6FH |
|