(1)LED数码管的动态显示
数码管静态显示稳定,但占用单片机I/O接口较多。在多位数码管显示的情况下,为节省口线,简化电路,将所有数码管段选线一一对应并联在一起,由同一个8位I/O接口控制(有时要通过驱动元件);而位选线独立,分别由各I/O接口线控制(一般要通过驱动元件)。如图6-25所示,四个数码管的段选码共用一个P2的I/O接口,在每个瞬间,数码管的段码相同。要达到多位显示的目的就要在每一瞬间只有一位com端有效,即只选通一位数码管。段码由共用I/O接口送来,各位数码管依次轮流选通,使每位显示该位的字符,并保持(延时)一段时间,以适应视觉暂留的效果。
(2)延时时间的估算
延时可由人眼视觉暂留时间来估算。一般地,1s内对四位数码管扫描24次就可看到不闪烁的显示。也就是扫描一次时间约42ms。由此算出对应于每位数码管显示延时时间约11ms。经实验,每位延时超过18ms则观察到明显闪烁。这里选择每位数码管延时时间为10ms。
(3)数码管LED限流(保护)电阻的估算
数码管由LED发光管组成。一般数码管的电压降(VLED)为1.8V左右。若电源电压(V)为5V,数码管每段LED的电流为10mA,则估算的限流电阻R为:R=(V-VLED)/0.010=320Ω。
(4)接口电路设计
接口电路典型原理图如图6-25所示,晶振频率为12MHz。设计采用动态显示数码管方式,采用共阳极数码管,与其相串的7只限流电阻根据计算取值为300Ω。
图6-25 数码管接口典型电路原理图
(5)接口程序设计
程序设计的目的是使4个数码管稳定显示“0123”,要求不闪烁。
ORG 0000H
SJMP STAR
ORG 30H
STAR:MOV P1,#0FFH;关闭位选口
MOV P2,#0FFH;关闭段选口
ST1:MOV R0,#0;计数器预设为0
MOV R1,#0FEH;选通P1.0控制的显示器
ST2:MOV A,R0
LCALL SEG7;将R0中数字转换为显示码从P2口输出
CPL A;取反,将阴码变为阳码
MOV P2,A;通过R0得到的显示段码送P2口
MOV A,R1;位选通数据送P1
MOV P1,A
LCALL DLY;延时10ms
MOV P1,#0FFH;关闭位选通
INC R0;计数+1
CJNE R0,#4H,ST3;4位是否扫描完?
SJMP ST1;0~3扫描完,重新开始
ST3:MOV A,R1;0~3依次显示
RL A;更新选通位
MOV R1,A
SJMP ST2;循环,显示下一位
DLY:MOV R7,#20;延时10ms
MOV R6,#0
DLY1:DJNZ R6,$
DJNZ R7,DLY1
RET
SEG7:INC A;将数字转换为显示码
MOVC A,@A+PC
RET
DB 3FH,06H,5BH,4FH;共阴极段码0,1,2,3
DB 66H,6DH,7DH,07H;4,5,6,7
DB 7FH,6FH,77H,7CH;8,9,A,B
DB 39H,5EH,79H,71H;C,D,E,F
END
2 LED数码管的接口扩展技术
单片机与LED数码显示器有以硬件为主和以软件为主的两种接口扩展方法。以硬件为主的LED数码显示器接口扩展电路如图6-26所示。使用单片机连接硬件接口驱动扩展,需要配合使用I/O接口,硬件条件限制了使用范围。
以软件为主的LED数码显示器接口扩展电路如图6-27所示。它是以软件查表代替硬件译码,不但省去了译码器,而且还能显示更多的字符。但是驱动器是必不可少的,因为仅靠接口提供不了较大的电流供LED数码显示器使用。
图6-26 以硬件为主的LED数码显示器接口扩展电路(www.xing528.com)
图6-27 以软件为主的LED数码显示器接口扩展电路
实际使用的LED数码显示器位数较多,为了简化线路、降低成本,大多采用以软件为主的接口方法。对于多位LED数码显示器,通常采用动态扫描显示方法,即逐个循环点亮各位显示器。扩展电路接口连接如图6-28所示。
例6-8:在数码显示器的最左边1位上显示1个“P”字。数码显示器的接口电路如图6-28所示,设8155的端口地址为7F00H~7F05H,数码管为共阳极。试编写相应的显示程序。
解:在同一时刻只显示1种字符,故可采用静态显示的方法。由图6-28可知,当采用共阳极数码管时,应按共阳极规律控制。在程序的开始,应对8155进行初始化编程,设A、B口均为输出。
图6-28 8155作6位LED显示器接口的电路
程序如下:
MOV A,#03H;8155命令字(A、B口均为输出)
MOV DPTR,#7F00H;指向命令口
MOVX @DPTR,A;输出命令字
MOV A,#8CH;取“P”字符的显示段码
INC DPTR;指向A口
MOVX @DPTR,A;输出显示段码
INC DPTR
INC DPTR;指向C口
MOV A,#20H;取位控制字(最左边一位上显示)
MOVX @DPTR,A;输出位控字
SJMP $;暂停
例6-9:开始时在数码显示器的最右边一位上显示1个“0”字,以后每隔0.5s将“0”字左移1位,直到最左边一位后则停止显示。接口电路与端口地址同上例,假设有20ms延时子程序D20MS可供直接调用。试编写相应的程序。
解:本例仍可采用静态显示的方法,程序如下。
MOV A,#03H;8155命令字(A、B口均为输出)
MOV DPTR,#7F00H;指向命令口
MOVX @DPTR,A;输出命令字
MOV A,#C0H;取“0”字的显示段码
INC DPTR;指向A口
MOVX @DPTR,A;输出显示段码
INC DPTR
INC DPTR;指向C口
MOV A,#01H;取位控制字(最右边一位上显示)
LOOP1:MOVX @DPTR,A;输出位控字
MOV R0,#19H;延时0.5s
LOOP2:LCALL D20MS
DJNZ R0,LOOP2
JB A.5,LOOP3;若已到最左边一位则转
RL A;未到,则将位控字左移1位
SJMP LOOP1;继续
LOOP3:MOV A,#00H;停止显示
MOVX @DPTR,A
SJMP $;暂停
例6-10:编制一动态显示程序,使数码显示器同时显示“ABCDEF”6个字符。设显示缓冲区的首地址为7AH,可调用动态扫描显示子程序DIR。
解:编写程序如下。
MOV A,#0FH;取最右边1位字符
MOV R0,#7AH;指向显示缓冲区首地址(最低位)
MOV R1,#06H;共送入6个字符
LOOP:MOV @R0,A;将字符送入显示缓冲区
INC R0;指向下一显示单元
DEC A;取下一个显示字符
DJNZ R1,LOOP;6个数未送完,则重复
MM:LCALL DIR;扫描显示一遍
SJMP MM;重复扫描
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。