找回密码
 注册
关于网站域名变更的通知
查看: 158|回复: 3
打印 上一主题 下一主题

单片机教程23LED数码管静态显示接口与编程

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2022-8-9 09:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
  在单片机系统中,常常用LED数码数码管显示器来显示各种数字或符号。由于它具有显示清晰、亮度高、使用电压低、寿命长的特点,因此使用非常广泛。引言:还记得我们小时候玩的“火柴棒游戏”吗,几根火柴棒组合起来,能拼成各种各样的图形,LED数码管显示器实际上也是这么一个东西。
" N& ?% ]2 M8 b) r6 L. D$ R八段LED数码管显示器
; f$ g' V, {% Q( W* H& u% [; Y9 j9 H2 a! H% w/ c; d; J
<单片机静态显示接口>9 p& m, P" Q5 w( l: ^$ R
   八段LED数码管显示器由8个发光二极管组成。基中7个长条形的发光管排列成“日”字形,另一个贺点形的发光管在数码管显示器的右下角作为显示小数点用,它能显示各种数字及部份英文字母。LED数码管显示器有两种不一样的形式:一种是8个发光二极管的阳极都连在一起的,称之为共阳极LED数码管显示器;另一种是8个发光二极管的阴极都连在一起的,称之为共阴极LED数码管显示器。如下图所示。`* R% I  G( x; Y8 W: Z
   共阴和共阳结构的LED数码管显示器各笔划段名和安排位置是相同的。当二极管导通时,对应的笔划段发亮,由发亮的笔划段组合而显示的各种字符。8个笔划段hgfedcba对应于一个字节(8位)的D7 D6 D5 D4 D3 D2 D1 D0,于是用8位二进制码就能表示欲显示字符的字形代码。例如,对于共阴LED数码管显示器,当公共阴极接地(为零电平),而阳极hgfedcba各段为0111011时,数码管显示器显示"P"字符,即对于共阴极LED数码管显示器,“P”字符的字形码是73H。如果是共阳LED数码管显示器,公共阳极接高电平,显示“P”字符的字形代码应为10001100(8CH)。这里必须注意的是:很多产品为方便接线,常不按规则的办法去对应字段与位的关系,这个时候字形码就必须根据接线来自行设计了,后面我们会给出一个例程。# j3 m2 W, l7 M9 n$ y8 D; ?5 D
   在单片机应用系统中,数码管显示器显示常用两种办法:静态显示和动态扫描显示。所谓静态显示,就是每一个数码管显示器都要占用单独的具有锁存功能的I/O接口用于笔划段字形代码。这样单片机只要把要显示的字形代码发送到接口电路,就不用管它了,直到要显示新的数据时,再发送新的字形码,因此,使用这种办法单片机中CPU的开销小。能供给单独锁存的I/O接口电路很多,这里以常用的串并转换电路74LS164为例,介绍一种常用静态显示电路,以使大家对静态显示有一定的了解。
9 r# q6 z6 o: X: u   MCS-51单片机串行口方式押为移们寄存器方式,外接6片74LS164作为6位LED数码管显示器的静态显示接口,把8031的RXD作为数据输出线,TXD作为移位时钟脉冲。74LS164为TTL单向8位移位寄存器,可实现串行输入,并行输出。其中A、B(第1、2脚)为串行数据输入端,2个管脚按逻辑与运算规律输入信号,公一个输入信号时可并接。T(第8脚)为时钟输入端,可连接到串行口的TXD端。每一个时钟信号的上升沿加到T端时,移位寄存器移一位,8个时钟脉冲过后,8位二进制数全部移入74LS164中。R(第9脚)为复位端,当R=0时,移位寄存器各位复0,只有当R=1时,时钟脉冲才起作用。Q1…Q8(第3-6和10-13管脚)并行输出端分别接LED数码管显示器的hg---a各段对应的管脚上。关于74LS164还能作如下的介绍:所谓时钟脉冲端,其实就是需要高、低、高、低的脉冲,不管这个脉冲是怎么来的,比如,我们用根电线,一端接T,一端用手拿着,分别接高电平、低电平,那也是给出时钟脉冲,在74LS164获得时钟脉冲的瞬间(再讲清楚点,是在脉冲的沿),如果数据输入端(第1,2管脚)是高电平,则就会有一个1进入到74LS164的内部,如果数据输入端是低电平,则就会有一个0进入其内部。在给出了8个脉冲后,最先进入74LS164的第一个数据到达了最高位,然后再来一个脉冲会有什么发生呢?再来一个脉冲,第一个脉冲就会从最高位移出,就象车站排队买票,栏杆就那么长,要从后面进去一本人,前面必须要从前面走出去一本人才行。
6 ]9 a9 e" @( J0 N    搞清了这一点,下面让我们来看电路,6片7LS164首尾相串,而时钟端则接在一起,这样,当输入8个脉冲时,从单片机RXD端输出的数据就进入到了第一片74LS164中了,而当第二个8个脉冲到来后,这个数据就进入了第二片74LS164,而新的数据则进入了第一片74LS164,这样,当第六个8个脉冲完成后,首次送出的数据被送到了最左面的164中,其他数据依次出现在第一、二、三、四、五片74LS164中。有个问题,在第一个脉冲到来时,除了第一片74LS164中接收数据外,其他各片在干吗呢?它们也在接收数据,因为它们的时钟端都是被接在一起的,可是数据还没有送到其他各片呢,它们在接收什么数据呢?。。。。。。其实所谓数据不过是一种说法而已,实际就是电平的高低,当第一个脉冲到来时,第一片164固然是从单片机接收数据了,而其它各片也接到前一片的Q8上,而Q8是一根电线,在数字电路中它只可能有两种状态:低电平或高电平,也就是“0”和“1”。所以它的下一片74LS164也相当于是在接收数据啊。只是接收的全部是0或1而已。这个问题放在这儿说明,可能有朋友不屑一顾,而有的朋友可能还是不清楚,这实际上涉及到数的本质的问题,如果不懂的,请仔细思考,并找一些数字电路的数,理解164的工作原理,再来看这个问题,或者去看看我的另一篇文章《27课:关于单片机的一些基本概念》的文章。务必搞懂,搞懂了这一点,你的级别就高过开始学习者,可谓入门者了。- ^! K! E  M7 ]/ E! n  C; }0 t
入口:把要显示的数分别放在显示缓冲区60H-65H共6个单元中,并且分别对应各个数码管LED0-LED5。
; Q7 p# t5 `4 n3 F$ {, Z* a出口:将预置在显示缓冲区中的6个数成对应的显示字形码,然后输出到数码管显示器中显示。, \1 S/ Z5 E$ a& n
单片机led显示程序如下:( F$ Q- G4 T/ G# T
DISP: MOV SCON,#00H ;初始化串行口方式06 `/ z: ]4 u% U; s) f. O
MOV R1,#06H ;显示6位数
/ I* }" O- w' t( x1 ~; W2 L9 O! NMOV R0,#65H ;60H-65H为显示缓冲区
  t2 }, _, V. M+ r' o6 JMOV DPTR,#SEGTAB ;字形表的入口地址6 L9 d  P7 q3 N% m+ A5 e
LOOP:
( B7 d' R- }7 S) M! ~. y) WMOV A,@R0 ;取最高位的待显示数据8 E+ x# X/ S0 \5 O( t) S0 k
MOVC A,@A+DPTR ;查表获取字形码
7 |& n4 d. J: I, t" P$ eMOV SBUF,A ;送串行口显示) j+ G8 A  m; T$ u8 u1 H9 C; e3 h3 O
DELAY: JNB TI,DELAY ;等待发送完毕
/ ?: a/ X9 ]& p4 _6 Z, ~CLR TI ;清发送标志
9 B3 E6 J  o1 f( bDEC R0 ;指针下移一位,准备取下一个待显示数
1 F( }( d8 j8 |1 Q. Z! X4 zDJNZ R1,LOOP ;直到6个数据全显示完。
7 u6 c* P9 c" v% I0 }' qRET
0 i1 w5 h' X# ESETTAB: ;字形表,前面有介绍,以后我们再介绍字形表的制作。) ^- ^6 t' L3 Y: _3 y
DB 03H 9FH 27H 0DH 99H 49H 41H 1FH 01H 09H 0FFH
7 ]& \+ o! L) a8 f$ m0 T; 0 1 2 3 4 5 6 7 8 9 消隐码( L, ?: I* G  y& K. W  a
单片机显示测试用主程序  l, x) N3 e/ |0 T- `! q' ]
ORG 0000H
! w% @- B6 V3 v7 g! EAJMP START& v- t3 o, U. |# v: H
ORG 30H
0 e  M1 H  w6 }) s/ l6 l: a& g, SSTART: MOV SP,#6FH% M& ]) ^9 d, L, @) z, Q
MOV 65H,#0& w( A8 ~5 ^8 [8 t1 f0 F
MOV 64H,#1
/ w& N, Y1 ^6 p1 OMOV 63H,#2
/ A, v" H3 {9 [6 FMOV 62H,#3
/ w+ e9 f1 {& T" |9 ~" \" UMOV 61H,#4
/ b3 h8 A0 g  Q* L+ dMOV 60H,#5
4 r( I+ w/ {4 p( \, P) QLCALL DISP, x4 N+ ~6 ^! V  }. D2 i5 \4 a
SJMP $
, n- N& I; v- w. L" `1 F# h# M' s   如果按图示数码管排列,则以上主程序将显示的是543210,想想看,如果要显示012345该怎样送数?0 D6 y! M' X1 E% I8 b
   下面我们来分析一下字形表的制作问题。先就上述“标准”的图形来看吧。写出数据位和字形的对应关系并列一个表如下(设为共阳型,也就是对应的输出位为0时笔段亮)
4 p0 b9 _  R# v; o/ i如何,字形表会做了吧,就是这样列个表格,根据要求(0亮或1亮)写出对应位的0和1,就成了。做个练习,写出A-F的字形码吧。
) A* w) n. l% C$ h0 F: J$ r# |1 J* _如果为了接线方便而打乱了接线的次序,那么字形表又该如何接呢?也很简单,一样地列表啊。以新实验板为例,共阳型。接线如下:  Q% l% W5 B) x. A6 W6 f( X! H
P0.7 P0.6 P0.5 P0.4 P0.3 P0.2 P0.1 P0.0  N6 @, R8 b' e* O
C E H D G F A B
# s$ @4 [' Y3 i" e5 S+ A则字形码如下所示:( P4 M% }( B" \: z1 B
;0 00101000 28H; s' x9 l7 ?4 K4 F, w
;1 01111110 7EH! {: w; l  l0 ^) p- G
;2 10100100 0A4H4 k$ `0 V% p8 J* Q
;3 01100100 64H: R/ o4 u1 n; L0 }8 A
;4 01110010 72H% t$ W* c4 G8 l9 C- w' G; f6 O
;5 01100001 61H; I( ?' w4 `& l) i
;6 00100001 21H
2 |6 V7 S2 o1 S;7 01111100 7CH
" G/ g* K$ F, }" C, @% m) U1 z1 J;8 00100000 20H2 z' e7 d$ x: `5 T- ?: k
;9 01100000 60H
- E4 v' y; s) H9 u作为练习,大家写出A-F的字形代码。
- e2 B( |. c2 g   本来这里是讲解单片机数码管显示器的静态接口的,到此应当可算结束了,但是我还想接着上面讲到的数的本质的问题再谈一点。单片机中有一些术语、名词本来是帮助我们理解事物的,但有时我们会被这些术语的相关语义所迷惑,以致不能进一步认清他们的本质,由此一般陷入困惑的境界。只有深入地了解了74LS164的工作特性,才能真正理解何谓串行的数据。
, O' ~  k) P- _! B1 {) z7 B

该用户从未签到

2#
发表于 2022-8-9 10:48 | 只看该作者
谢谢分享谢谢分享,学习学习

该用户从未签到

3#
发表于 2022-8-9 13:16 | 只看该作者
感谢,这东西好啊

该用户从未签到

4#
发表于 2022-8-9 15:19 | 只看该作者
好东西,帮顶上去,感谢楼主无私的精神.
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-6-29 09:45 , Processed in 0.078125 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表