一、实验目的
1、掌握数字、字符转换成显示段码的软件译码方法
2、动态显示的原理和相关程序的编写
二、实验说明
动态显示,也称扫描显示。显示器由6个共阴极LED数码管构成。单片机的P0口输出显示段码,经由一片74LS245驱动输出给LED管,由PB口输出位码,经由74LS06输出给LED管。
三、实验内容及步骤
单片机P0输出段码,P1口输出位控码,输出6个字符。
1、单片机最小应用系统1的P0口接段码口a~h,P1口接位码口S1~S6。
2、用串行数据通信线连接计算机与仿真器,把仿真器插到模块的锁紧插座中,请注意仿真器的方向:缺口朝上。
3、打开Keil uVision2仿真软件,首先建立本实验的项目文件,接着添加 扫描显示.ASM源程序,进行编译,直到编译无误。
4、进行软件设置,选择硬件仿真,选择串行口,设置波特率为38400。
5、打开模块电源和总电源,点击开始调试按钮,点击RUN按钮运行程序。
6LED显示“168168”。程序停止运行后,显示随之变化,说明运态扫描显示模块不具有数据锁存的功能。
四、流程图及源程序
1、源程序
DBUF EQU 30H ;置存储区首址
TEMP EQU 40H ;置缓冲区首址
ORG 0000H
LJMP START
ORG 0030H
START:
MOV 30H, #1 ;存入数据
MOV 31H, #6
MOV 32H, #8
MOV 33H, #1
MOV 34H, #6
MOV 35H, #8
MOV R0, #DBUF
MOV R1, #TEMP
MOV R2, #6 ;6位显示器
MOV DPTR, #SEGTAB ;置段码表首址
DP00: MOV A, @R0 ;将段码存入缓冲区
MOVC A, @A+DPTR ;查表取段码
MOV @R1, A ;存入暂存器
INC R1
INC R0
DJNZ R2, DP00
DISP0:MOV R0, #TEMP ;显示子程序
MOV R1, #6 ;扫描8次
MOV R2, #01H ;决定数据动态显示方向
DP01: MOV A,@R0
MOV P0,A ;段码输出
MOV A, R2 ;取位码
CPL A ;低电平驱动
MOV P1,A ;位码输出
ACALL DELAY ;调用延时
MOV A, R2
RL A
MOV R2, A
INC R0
DJNZ R1, DP01
SJMP DISP0
SEGTAB:DB 3FH,06H,5BH,4FH,66H,6DH ;0,1,2,3,4,5
DB 7DH,07H,7FH,6FH,77H,7CH ;6,7,8,9,A,b
DB 58H,5EH,7BH,71H,00H,40H ;C,d,E,F, ,-
DELAY: ;延时子程序
MOV R4, #03H
AA1: MOV R5, #0FFH
AA: DJNZ R5, A
DJNZ R4, AA1
RET
END
五、思考题
1、如何修改程序,实现六位LED数码管只显示其中的两位?