今日很快乐,一次性就把这个电子时钟写了出来(今晚的单片机试验,记住上一年自学单片机的时分,这个还真是写不出来,不过这个时钟仅仅静态的,不能够用手艺来修正,这点仍是不行完善,今后有时间了的话,我从头写一下,呵呵)
count equ 9217 ;界说1s计数值,关于11.0592的晶振来说,延时10ms
second equ 30h ;界说暂时变量区
second_ge equ 31h
second_shi equ 32h
minute equ 33h
minute_ge equ 34h
minute_shi equ 35h
hour equ 36h
hour_ge equ 37h
hour_shi equ 38h
org 0000h
sjmp main ;进入主程序
org 0003h
reti
org 000bh ;time0(定时器/计数器T0进口地址)
ljmp int_time0 ;跳转到中止0服务程序
org 001bh
reti
org 0023h
reti
main:
mov r0,#0 ;初始化程序(本程序初始值设为13:33:22)
mov second,#22
mov second_ge,#0
mov second_shi,#0
mov minute,#33
mov minute_ge,#0
mov minute_shi,#0
mov hour,#13
mov hour_ge,#0
mov hour_shi,#0
mov tmod,#00000001b
mov th0,#high(65536-count) ;取高八位数据
mov tl0,#low(65536-count) ;取底五位
clr tf0
setb ea
setb et0
setb tr0 ;开端计时
loop:
lcall digitor_display ;调用数码管扫描显现程序
sjmp loop ;程序在此循环
;定时器0中止
int_time0:
push acc
push psw
clr tf0
mov th0,#high(65536-count) ;取高八位数据
mov tl0,#low(65536-count) ;取底五位
inc r0
cjne r0,#100,ret_loop ;秒值加一
sjmp second_add
second_add: ;秒值处理
mov r0,#0
inc second
mov a,second
cjne a,#60, ret_loop
sjmp minute_add
minute_add: ;分值处理
mov second,#0
inc minute
mov a,minute
cjne a,#60, ret_loop
sjmp hour_add
hour_add: ;小时处理
mov minute,#0
inc hour
mov a,hour
cjne a,#24,ret_loop
sjmp hour_reset
hour_reset:
mov hour,#0
ret_loop:
pop psw
pop acc
reti ;中止回来
digitor_display: ;数码管扫描
push acc
push psw
mov a,second
mov b,#10
div ab
mov second_shi,a
mov second_ge,b
mov a,minute
mov b,#10
div ab
mov minute_shi,a
mov minute_ge,b
mov a,hour
mov b,#10
div ab
mov hour_shi,a
mov hour_ge,b
mov p1,#11011111b ;显现秒钟的个位
mov a,second_ge
mov dptr,#table
movc a,@a+dptr
mov p2,a
lcall delay
mov p1,#11101111b ;显现秒钟的十位
mov a,second_shi
mov dptr,#table
movc a,@a+dptr
mov p2,a
lcall delay
mov p1,#11110111b ;显现分钟的个位
mov a,minute_ge
mov dptr,#table
movc a,@a+dptr
mov p2,a
lcall delay
mov p1,#11111011b ;显现分钟的十位
mov a,minute_shi
mov dptr,#table
movc a,@a+dptr
mov p2,a
lcall delay
mov p1,#11111101b ;显现小时的个位
mov a,hour_ge
mov dptr,#table
movc a,@a+dptr
mov p2,a
lcall delay
mov p1,#11111110b ;显现小时的十位
mov a,hour_shi
mov dptr,#table
movc a,@a+dptr
mov p2,a
lcall delay
pop psw
pop acc
ret ;扫描程序回来
table: ;共阴极数码管扫描码
DB 3FH ;0
DB 06H ;1
DB 5BH ;2
DB 4FH ;3
DB 66H ;4
DB 6DH ;5
DB 7DH ;6
DB 27H ;7
DB 7FH ;8
DB 6FH ;9
delay: mov r4,#5 ;延时函数(延时大约5*255*2=25ms)
l1: mov r5,#0ffh
l2: djnz r5,$
djnz r4,l1
ret
end