单片机教案(数码管显示器接口技术)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数码管显示器接口技术
一、 LED数码管的结构
由8段发光二极管组成。其中7段组成“8”字,1段组成小数点。通过不同的组合,可用来显示数字0~9、字母A~
F及符号“.”。
LED数码管有共阴极和共阳极两种结构。
二、 LED数码管的工作原理
发光二极管导通→亮,不导通→暗。这样就构成了字符的显示。其十六进制的编码表如下:
三、数码管接口电路
1、静态显示方式(硬件接口方法)
这就是我们在数字电路中所学的内容,在数据总线上的信号须经I/O接口电路并锁存,然后通过译码器,就可以驱动LED 显示器中的段发光。
这种方式使用的硬件较多(显示器的段数和位数越多,电路越复杂),缺乏灵活性,且只能显示十六进制数。
2、动态显式方式(软件接口方法)
这种接口方法是以软件查表来代替硬件译码,既省去了译码器,又能显示更多段的字符和更多位的LED显示器。所以广泛应用于单片机系统的显示。
⑴连接方式
①将单片机的输出送入可编程的8155芯片,然后利用8155的I/O
口提供两路输出信号(一路是段控信号,另一路是位控信号)。
②将各位数码管的a~h端分别并在一起(若有6个数码管,则将
它们6个a对a,6个b对b......6个h对h相并接),再和上面的一路I/O口输出的8位段控信号相连,以获得显示代码,对应要发光的段。
③将各位数码管的公共端(共阴极或共阳极)分别与上面的另一路
I/O口相连(每一位公共端对应I/O口中的一位),以获得位控信号使该位LED发亮。
④为了存放显示的数字或字符,通常在8155的内部RAM中设置显
示缓冲区,其存储单元个数与LED显示器的位数相同。
⑵显示原理
①每一时刻只有一位LED被点亮,在显示代码的作用下显示信息。
②各位LED轮流被点亮,在各自的显示代码的作用下分别显示各自的信息。
③只要利用发光二极管的余光和人眼的驻留效应
(即适当调整每位LED的
点亮时间和时间间隔),就可以获得稳定的显示输出。
[应用实例]
使用并行接口芯片8155扩展6位动态数码管显示电路,轮流点亮各LED数码管,每位点亮2ms,重复此过程。
[硬件设计]
1、将8155的PA口和PB口选择在基本输出方式,PA口输出位选码,
PB口输出段显示代码。
2、设定PA口(位控口)地址为7F01H,PB口(段控口)地址为7F02H,
命令寄存器地址为7F00H。
3、设显示缓冲区地址(8155片内RAM)为:60H~65H(显示器有6位),
每一个单元对应一位LED显示器。因为动态扫描是从右向左进行
的,所以缓冲区的首地址为60H。用R0存放当前位控码的地址,用R2存放位控码的初值及递增值。若要显示“ . d 6 a 5 0 ”
则按下面的顺序依次进行。
[软件设计]
1、编程说明:
①在动态扫描过程中,调用延时子程序DELAY,其延迟时间为2ms,
这是为了让扫描到的那位显示器稳定的亮(驻留)一段时间以保证显示亮度。
②显示数据是以查表方法得到其字形代码,故在程序中设置了字形
代码表DSEG,因此在编程中采用了查表指令MOVC A,@A+PC,由PC提供16位基址,由A提供变址rel。
③在实用单片机系统中,LED显示程序都是作为一个子程序供监控
程序调用,因此在扫描完各位LED后,就返回监控程序,然后再由监控程序调用显示子程序。通过反复调用实现动态扫描。
2、显示程序流程图
START:MOV A,#03H ;将命令字0000 0011B送入A(即将送入8155的命令寄存器)
MOV DPTR,#7F00H ;对8155的命令寄存器初始化
MOVX @DPTR,A ;设置PA口、PB口为输出方式
MOV R0,#60H ;设置显示缓冲区的首地址
MOV R2,#01H ;设置位选码的初值
MOV A,R2 ;将位控码的初值0000 0001B 送入单片机
LOOP: MOV DPTR,#7F01H ;设置PA口(位控码通道)的地址MOVX @DPTR,A ;将位控码输出到PA口
INC DPTR ;设置PB口(段控码通道)的地址
MOV A,@R0 ;从段控码取出显示数据送入单片机
ADD A,rel ;形成查表的偏移地址(在本程序中rel=0DH,即14个单元)
MOVC A,@A+PC ;查表取字形代码(在程序下面14个单元DSEG处查表,取字形码用于段控)
DIR:MOVX @DPTR, A ;取出段控码[1个字节]
ACALL DELAY ;转延时子程序[2个字节]
INC R0 ;转向下一个缓冲单元
[1个字节]
MOV A,R2 ;将递增值送入 A [1个字节]
JB ACC.5,LOOP1 ;判断第6位是否显示完毕,是
则返回到LOOP1处[3个字节]
RL A ;不是,则向(高位)左移
[1个字节]
MOV R2,A ;将位控码送R2保存
[1个字节]
AJMP LOOP ;程序回到LOOP处重复上过程
[2个字节]
LOOP1:RET ;返回监控主程序
[1个字节]
DSEG: DB 3FH,06H,5BH,4FH,66H,6DH
DB 7DH,07H,7FH,6FH,77H,7CH
DB 39H,5EH,79H,71H
DELAY: MOV R7,#04H ;以下是延时2ms的子程序
DELAY1: MOV R6,#0FFH ;
DELAY2: DJNZ R6,DELAY2 ;
DELAY2: DJNZ R7,DELAY1 ;
RET ;返回上面的调子程序