显示字形 0 1 2 3 4 5 6 7 8 9 A b C d E F g 0 0 1 1 1 1 1 0 1 1 1 1 0 1 1 1 f 1 0 0 0 1 1 1 0 1 1 1 1 1 0 1 1 e 1 0 1 0 0 0 1 0 1 0 1 1 1 1 1 1 d 1 0 1 1 0 1 1 0 1 1 0 1 1 1 1 0 c 1 1 0 1 1 1 1 1 1 1 1 1 0 1 0 0 b 1 1 1 1 1 0 0 1 1 1 1 0 0 1 0 0 a 1 0 1 1 0 1 1 1 1 1 1 0 1 0 1 1 段码 3fh 06h 5bh 4fh 66h 6dh 7dh 07h 7fh 6fh 77h 7ch 39h 5eh 79h 71h a f e d g b c dp
五、程序框图
开始
输出位选通信号 初始化显示参数
延时
关所有位显示
位选通信号移位
取显示数据
指向下一个显示数据
数据移位输出到164
否 6位完成 输出时钟脉冲到164
否 是 是
8段码完成 返回
34
六、程序清单
OUTBIT equ 0FE02h ; 位控制口
CLK164 equ 0FE04h ; 段控制口(接164时钟位)
DAT164 equ 0FE06h ; 段控制口(接164数据位) IN equ 0FE00h ; 键盘读入口 LEDBuf equ 60h ; 显示缓冲 Num equ 70h ; 显示的数据 DelayT equ 75h ;
0000 020055 ljmp Start
LEDMAP: ; 八段管显示码 0003 3F065B 0006 4F666D
0009 7D07 db 3fh, 06h, 5bh, 4fh, 66h, 6dh, 7dh, 07h 000B 7F6F77 000E 7C395E
0011 7971 db 7fh, 6fh, 77h, 7ch, 39h, 5eh, 79h, 71h Delay: ; 延时子程序 0013 7F00 mov r7, #0 DelayLoop:
0015 DFFE djnz r7, DelayLoop 0017 DEFC djnz r6, DelayLoop 0019 22 ret DisplayLED:
001A 7860 mov r0, #LEDBuf
001C 7906 mov r1, #6 ; 共6个八段管 001E 7A20 mov r2, #00100000b ; 从左边开始显示 Loop:
0020 90FE02 mov dptr, #OUTBIT 0023 7400 mov a, #0
0025 F0 movx @dptr, a ; 关所有八段管 0026 E6 mov a, @r0
0027 75F008 mov B, #8 ; 送164 DLP:
002A 33 rlc a
002B FB mov r3, a
002C 92E0 mov acc.0, c 002E 90FE06 mov dptr, #DAT164
0031 F0 movx @dptr, a 0032 90FE04 mov dptr, #CLK164 0035 D2E0 setb acc.0 0037 F0 movx @dptr, a 0038 C2E0 clr acc.0
003A F0 movx @dptr, a 003B EB mov a, r3 003C D5F0EB djnz B, DLP
35
003F 90FE02 mov dptr, #OUTBIT 0042 EA mov a, r2
0043 F0 movx @dptr, a ; 显示一位八段管 0044 7E01 mov r6, #1
0046 1113 call Delay
0048 EA mov a, r2 ; 显示下一位 0049 03 rr a
004A FA mov r2, a 004B 08 inc r0
004C D9D2 djnz r1, Loop 004E 90FE02 mov dptr, #OUTBIT 0051 7400 mov a, #0
0053 F0 movx @dptr, a ; 关所有八段管 0054 22 ret Start:
0055 758140 mov sp, #40h 0058 757000 mov Num, #0 MLoop:
005B 0570 inc Num 005D E570 mov a, Num 005F F5F0 mov b, a
0061 7860 mov r0, #LEDBuf FillBuf:
0063 E5F0 mov a, b 0065 540F anl a, #0fh
0067 900003 mov dptr, #LEDMap
006A 93 movc a, @a+dptr ; 数字转换成显示码
006B F6 mov @r0,a ; 显示在码填入显示缓冲 006C 08 inc r0 006D 05F0 inc b
006F B866F1 cjne r0, #LEDBuf+6, FillBuf 0072 75751E mov DelayT,#30 DispAgain:
0075 111A call DisplayLED ; 显示
0077 D575FB djnz DelayT,DispAgain 007A 02005B ljmp MLoop end
36
实验六 电子时钟
一、实验要求
利用CPU的定时器和实验仪上提供的数码显示电路,设计一个电子时钟。格式如下:
XX XX XX 由左向右分别为:时、分、秒
二、实验目的
1、 进一步掌握定时器的使用和编程方法。 2、 进一步掌握中断处理程序的编程方法。 3、 进一步掌握数码显示电路的驱动方法。
三、实验电路及连线
本实验连线板上已经接好,无需另外接线。显示电路见图1.
四、实验说明
定时器每100us中断一次,在中断服务程序中,对中断次数进行计数,100us计数10000次就是1秒。然后再对秒计数得到分和小时值,并送入显示缓冲区。显示子程序模块可参照硬件实验十六和硬件实验十七。
五、程序清单
0000 020097 ljmp Start Hour equ 40h Minute equ 41h Second equ 42h
C100us equ 43h Tick equ 10000
T100us equ 256-50 org 000bh T0Int:
000B C0D0 push PSW
000D C0E0 push ACC 000F E544 mov a, C100us+1 0011 7002 jnz Goon 0013 1543 dec C100us Goon:
0015 1544 dec C100us+1 0017 E543 mov a, C100us 0019 4544 orl a, C100us+1
001B 7024 jnz Exit 001D 754327 mov C100us, #high(Tick)
0020 754410 mov C100us+1, #low(Tick) 0023 0542 inc Second 0025 E542 mov a, Second
0027 B43C17 cjne a, #60, Exit 002A 754200 mov Second, #0
37
002D 0541 inc Minute 002F E541 mov a, Minute
0031 B43C0D cjne a, #60, Exit 0034 754100 mov Minute, #0 0037 0540 inc Hour 0039 E540 mov a, Hour
003B B41803 cjne a, #24, Exit 003E 754000 mov Hour, #0 Exit:
0041 D0E0 pop ACC 0043 D0D0 pop PSW 0045 32 reti
OUTBIT equ 0FE02h ; 位控制口
CLK164 equ 0FE04h ; 段控制口(接164时钟位) DAT164 equ 0FE06h ; 段控制口(接164数据位) IN equ 0FE00h ; 键盘读入口 LEDBuf equ 60h ; 显示缓冲 LEDMAP: ; 八段管显示码 0046 3F065B 0049 4F666D
004C 7D07 db 3fh, 06h, 5bh, 4fh, 66h, 6dh, 7dh, 07h 004E 7F6F77 0051 7C395E
0054 7971 db 7fh, 6fh, 77h, 7ch, 39h, 5eh, 79h, 71h Delay: ; 延时子程序 0056 7F00 mov r7, #0 DelayLoop:
0058 DFFE djnz r7, DelayLoop 005A DEFC djnz r6, DelayLoop 005C 22 ret DisplayLED:
005D 7860 mov r0, #LEDBuf
005F 7906 mov r1, #6 ; 共6个八段管 0061 7A20 mov r2, #00100000b ; 从左边开始显示 Loop:
0063 90FE02 mov dptr, #OUTBIT 0066 7400 mov a, #0
0068 F0 movx @dptr, a ; 关所有八段管 0069 E6 mov a, @r0 006A 75F008 mov B, #8 ; 送164 DLP:
006D 33 rlc a
006E FB mov r3, a
006F 92E0 mov acc.0, c 0071 90FE06 mov dptr, #DAT164
0074 F0 movx @dptr, a
38