|
EDA365欢迎您!
您需要 登录 才可以下载或查看,没有帐号?注册
x
编者按:移位寄存器的串行扩展技术是单片机串行口扩展的一种常用方法。对于MCS-51系列单片机而言,将串口置为工作方式0,串口便工作在移位寄存器方式下了。此时,单片机的RXD口作串行数据的发送/接收口,TXD口作移位脉冲输出口。利用单片机串口的这一特性,可以十分方便地扩展I/O口线,本文便是一例。通过本例,读者除了可以加深对串口工作方式0的理解外,还可以举一反三,将之用于其他需要进行I/O口扩展的场合,比如用串口扩展键盘等。
& h4 w, e2 N; O2 i% g遥控数码报时闹钟
6 X, k3 H9 F- N/ C& G CD4094是带输出锁存和三态控制的串入/并出高速转换器,具有使用简单、功耗低、驱动能力强和控制灵活等优点。6 }3 ]& L- p4 w" p0 A
CD4094的引脚定义如图1。其中{1}脚为锁存端,{2}脚为串行数据输入端,{3}脚为串行时钟端。{1}脚为高电平时,8位并行输出口Q1~Q8在时钟的上升沿随串行输入而变化;{1}脚为低电平时,输出锁定。利用锁存端可方便地进行片选和级联输出控制。{15}脚为并行输出状态控制端,{15}脚为低电平时,并行输出端处在高阻状态,在用CD4094作显示输出时,可使显示数码闪烁。{9}脚QS、{10}脚Q′S是串行数据输出端,用于级联。QS端在第9个串行时钟的上升沿开始输出,Q′S端在第9个串行时钟的下降沿开始输出。# O7 |/ v4 H* T6 `6 s
当CD4094电源为5 V时,输出电流大于3.2mA,灌电流为1 mA。串行时钟频率可达2.5MHz。
# I% F8 `& U3 m: B) G7 u5 `; h 1. CD4094作静态LED显示驱动器* j6 q7 G6 m6 U( v* F( l" J
图2为用CD4094作驱动器的三位数码管静态显示电路略图。单片机串口工作在方式0,即移位寄存器方式。输出数据首先送到IC1,第二次输出的数据移至IC1时,先前输出数据则移到IC2,依此类推。输出三次后,在IC1、IC2、IC3的Q1~Q8口分别得到数据3、数据2、数据1。
/ D8 w' f: z3 X6 W2 ? 程序如下:(DISP为显示子程序)
, G3 s, _+ l! r4 w; \ ..................
+ j$ I* T" l% }1 w* p3 k MOV SCON,#00H ;置串口为方式0
' z5 \: F) C& F8 i& \3 ]) a8 D ..................
6 ?" ]% [; m# C- o# u' i( jDISP: CLR P3.7 ;输出锁存
/ P8 G0 s& k& S8 z2 t MOV R0,#33H ;显示值送33H、34H、35H
, C8 P4 E# I# ]1 O0 @4 u MOV R7,#03H ;置数码管个数3: F0 F$ i# | l2 J: q8 |
LP:MOV A,@R0 6 \9 A" S0 G4 X, [/ e- Q3 ?
MOV DPTR,#TAB ;置字段码表首址' ?. g1 k0 d# s0 \: Q/ C0 |' A
MOVC A,@A+DPTR ;查字段码表 Q6 Z7 B' [4 f! q4 Q4 w
MOV SBUF,A ;送字段码* j5 N0 _, u2 c0 x1 M6 q+ ^! i2 k
JNB TI,$ ;等待传送结束* H( J$ t3 ~- v2 O) f Y. x D
CLR TI ;清串行中断标志
% q F3 E$ `3 j' {8 N INC R0 ;显缓区地址加1. s) k) I: i1 ^& z6 P1 f0 L
DJNZ R7,LP ;显示数码是否取完?
& D8 b* G$ t( ~* g SETB P3.7 ;允许输出显示
) m& @0 W7 D& E2 e6 u NOP / _7 C2 y+ f) B
CLR P3.7 ;输出锁存
4 F1 r0 j0 [, q1 Z RET ; h! s6 Z! M2 i) @# `+ P4 Y7 B" e
TAB:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH, h) n: v2 m3 j+ r$ `- a' i2 v, A
DB 6FH,00H 4 R, [; g- e, n0 F+ e% n" Y
说明:在串行口不作为其他使用,且显示的更新速度很低时,STROBE端可以始终接高;也可将P3.7口接到CD4094的{15}脚,从P3.7口输出一定频率的脉冲,使显示闪烁。
0 p: }- ~( K) A' j 2. CD4094作LED动态显示驱动器' j5 T7 T- ?& @4 M! ~! y
用一片CD4094作段驱动,一片CD4094作位驱动,驱动8位带小数点的数码管(见图3)。& z+ }" x( G B4 d' }( m% j
程序如下:(DISP为显示子程序); X+ \% h. \% ]* w5 b8 A
MOV SCON?#00H ;置串口为方式0
3 B3 R- t( C- g( f6 n: z ……
( _( K* @$ T. `/ \DISP:CLR P3.7 ;输出锁存
# P4 u* }$ O x# k9 U MOV R0, #30H ;显缓区首址送R0
6 ?2 V5 b8 D+ J& T4 [9 u MOV R4, #08H ;置数码管个数为8
2 z& a, T8 ?) Y! x$ O# h MOV R5, #0FEH ;送位码初值
& N4 g( H$ L! n2 D& S* f. PLP: MOV A, R5 ;取位码
& ^1 n# [' @1 ^! I9 m/ Z' Q MOV SBUF, A ;送位码2 H2 u5 }' Y8 o0 p9 @
JNB T1 ;等待传送结束9 o9 R# `4 P2 P+ C' R# f6 z* G
CLR T1 ;清串行中断标志2 N, f& A% w5 R3 R% ^6 U
MOV A?, @R0 ;取段码- ~& h' C! _! }
MOV DPTR, #TAB ;置段码表首址4 u1 O" H: q- C1 `7 \2 w2 y3 ?
MOVC A, @A+DPTR ;查段码表 [( ^, y+ ]$ ]' Z# G$ ~- r
MOV SBUF?,A ;送段码
4 G% O, o) K% A JNB T1 ;等待传送结束
9 W0 M# ^$ R; U CLR T1 ;清串行中断标志
- J" o2 b2 f7 a1 @" H STB P3.7 ;允许输出显示6 ]. r2 w; D3 E5 P0 Q
LCALL DEL ;延时1ms
! H" A# z! {* R, ?3 p MOV A, R5 ;取位码( Y0 s1 V8 s4 u- }9 U* s- R
RL A ;位码左移一位% s) ]8 q$ Z9 e: S$ _* f5 _
MOV R5, A
& D: g6 c: c6 J8 z" P INC R0 ;显缓区地址加1
! O5 A: r% D5 G5 g( s2 S! o CLR P3.7 ;输出锁存& m! `4 N x& R8 y, x/ E( q
DJNZ R4, LP ;8位显示完否?
: r$ Y$ D# L8 u# R: i, A* C RET8 w" f8 R; x0 H' n" M. s6 g
DEL: MOV R7, #02H ;延时1ms (fosc=12MHz)6 K2 x( j' b3 I# L9 N
DL: MOV R6?,#0F8H
: l4 t4 u1 O( n ]! O DJNZ R6, $4 a( ]$ f2 ~# u1 {, S
DJNZ R7, DL
( w" T7 o1 a8 Y+ O- c RET6 `% F) Y5 p8 {! f; |2 N" W ?
TAB: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H7 Y8 m& F- q4 G7 _6 ?3 N1 W% f1 B
DB 7FH,6FH |
|