实验一 八段数码管显示实验
一、实验目的:
1、了解数码管动态显示的原理。 2、了解74LS164扩展端口的方法。
二、实验要求:
利用实验仪提供的显示电路, 动态显示一行数据。
三、实验电路:
这里只是显示草图,详细原理参见第一章的1.1.15 “8155键显模块”。
四、实验说明:
1、本实验仪提供了8段码数码管LED 显示电路,学生只要按地址输出相应数据,就可以实现对显示器的控制。显示共有6位,采用动态方式显示。8段数码管是由8155的PB0、PB1经74LS164“串转并”后输出得到。6位位码由8155的PA0口输出,经uA2003反向驱动后,选择相应显示位。
74LS164是串行输入并行输出转换电路,串行输入的数据位由8155的PB0控制,时钟位由8155的PB1控制输出。写程序时,只要向数据位地址输出数据,然后向时钟位地址输出一高一低两个电平就可以将数据位移到74LS164中,向显示位选通地址输出高电平就可以点亮相应的显示位。
本实验仪中数据位输出地址为0e102H ,时钟位输出地址为0e102H ,位选通输出地址为 0e101H 。本实验涉及到了8155 I0/RAM扩展芯片的工作原理以及74LS164器件的工作原理。
2
六、实验步骤:
1、将KEIL 仿真器上40芯排线一端和实验箱上51CPU 板上的40芯排针连接起来,将仿真器连接的USB 或串口线与PC 机对应的USB 或串口连接起来,打开实验箱电源。
2、进入KEIL 软件界面,点击项目/打开项目
在C:\KEIL\UV2\次1配套实验例程中选择实验一,内有ASM 和C51两种程序,进入ASM 文件夹打开LED 项目文件
进入如图所示界面
点击“调试/启动/停止调试”,进入调试界面,点击“调试/运行”可看到8段数码管交替显示0—
F
七、实验程序:
OUTBIT equ 0e101h ; 位控制口
CLK164 equ 0e102h ; 段控制口(接164时钟位) DAT164 equ 0e102h ; 段控制口(接164数据位) IN equ 0e103h ; 键盘读入口 LEDBuf equ 60h ; 显示缓冲 Num equ 70h ; 显示的数据 DelayT equ 75h ; org 0000h ljmp Start
LEDMAP: ; 八段管显示码
db 3fh, 06h, 5bh, 4fh, 66h, 6dh, 7dh, 07h db 7fh, 6fh, 77h, 7ch, 39h, 5eh, 79h, 71h Delay: ; 延时子程序 mov r7, #0 DelayLoop:
djnz r7, DelayLoop djnz r6, DelayLoop ret DisplayLED:
mov r0, #LEDBuf
mov r1, #6 ; 共6个八段管 mov r2, #00100000b ; 从左边开始显示 Loop:
mov dptr, #OUTBIT mov a, #00h
movx @dptr, a ; 关所有八段管 mov a, @r0
mov B, #8 ; 送164 DLP:
rlc a mov r3, a mov acc.0, c ANL A, #0FDH mov dptr, #DAT164 movx @dptr, a mov dptr, #CLK164 orl a,#02h movx @dptr, a anl a,#0fDh movx @dptr, a mov a, r3 djnz B, DLP mov dptr, #OUTBIT mov a, r2
movx @dptr, a ; 显示一位八段管 mov r6, #1 call Delay
mov a, r2 ; 显示下一位 rr a mov r2, a inc r0 djnz r1, Loop mov dptr, #OUTBIT mov a, #0
movx @dptr, a ; 关所有八段管 ret
Start: mov dptr,#0e100h mov a,#03h movx @dptr,a mov sp, #40h mov Num, #0 MLoop:
inc Num mov a, Num mov b, a mov r0, #LEDBuf FillBuf:
mov a, b anl a, #0fh mov dptr, #LEDMap
movc a, @a+dptr ; 数字转换成显示码 mov @r0,a ; 显示在码填入显示缓冲 inc r0 inc b
cjne r0, #LEDBuf+6, FillBuf mov DelayT,#30 DispAgain:
call DisplayLED ; 显示 djnz DelayT,DispAgain ljmp MLoop END