📄 clock.asm
字号:
;2001.5.24
;***************
;clk_program 2000-10-12
;***************
;********************************************************
t_h_100ms equ 01eh ;100 ms for 6MHz 1e
t_l_100ms equ 038h ;100 ms for 6MHz 38
timer_no equ 229d ;3c90+30d=3cb0h
mod equ 50d
fl_250ms bit 00h
fl_500ms bit fl_250ms+1
set_clk_f bit fl_500ms+1
set_al4_f bit set_clk_f+1
am_f bit set_al4_f+1
fl_3s bit am_f+1
al1_f bit fl_3s+1
set_over bit al1_f+1
ha_f bit set_over+1
ha_over bit ha_f+1
set_f bit ha_over+1
d2_f bit set_f+1
;**************************************************
key_data equ 08h
timers equ key_data+1
t_30ms equ timers+1
t_20ms equ t_30ms+1
t_1s equ t_20ms+1
k1_data equ t_1s+1
k2_data equ k1_data+1
stat_work equ k2_data+1
stat_led equ stat_work+1
t_1ms equ stat_led+1
t_20m equ t_1ms+1
beep equ t_20m
al1 equ beep+1
al2 equ beep+2
al3 equ beep+3
al4 equ beep+4
al5 equ beep+5
al6 equ beep+6
al7 equ beep+7
al8 equ beep+8
ret_timer equ al8+1
d1 equ ret_timer+1
;**************************************************
sec equ 23h
min equ sec+1h
hour equ min+1h
day equ hour+1h
mon equ day+1h
year equ mon+1h
w_adj equ year+1h
week equ w_adj+1h
;***************************************
al1_h equ week+1h
al1_m equ al1_h+1h
al2_h equ al1_m+1h
al2_m equ al2_h+1h
al3_h equ al2_m+1h
al3_m equ al3_h+1h
al4_h equ al3_m+1h
al4_m equ al4_h+1h
al5_h equ al4_m+1h
al5_m equ al5_h+1h
al6_h equ al5_m+1h
al6_m equ al6_h+1h
al7_h equ al6_m+1h
al7_m equ al7_h+1h
al8_h equ al7_m+1h
al8_m equ al8_h+1h
d2 equ al8_m+1
;**************************************
led1 equ d2+1h
led2 equ led1+1
led3 equ led2+1
led4 equ led3+1
led5 equ led4+1
sp_data equ led5+1
;**************************************
led_1 bit p3.5
led_2 bit p3.4
led_3 bit p3.3
led_4 bit p3.2
led_5 bit p3.1
beep_f BIT P3.7
key_f bit p3.0
w_adj_dat equ 50d
;*********************************************************
blk_led equ 20d
dot_led equ 21d
f_led equ 22d
n_led equ 23d
u_led equ 24d
t_led equ 25d
b_led equ 26d
d_led equ 27d
oRG 0000H; ;
sJMP start
ORG 0003H; ;
reti;
ORG 000BH ;
;ajmp t0
reti ;
ORG 0013H
reti ;
ORG 001BH ;
aJMP T1 ;
ORG 0023H ;
RETI; AJMP RS_485 ;
;**************************************
start:
call clr_ram
MOV SP,#sp_data ;
call timer_int
stq:
call week_auto
call led_jmp
call key_bord
mov a,key_data
;jz stq
call int_t0
setb key_f
mov key_data,#0
;call timer_20ms
STAR_BI:
call clock
call week_auto
call al_out
CALL KEY_bord1
call set_clk_al
call key_jmp
call reback
call led_jmp
call del
sjmp star_bi
del:
inc d1
mov a,d1
jnz del_end
setb d2_f
inc d2
mov a,d2
cjne a,#mod,del_end
mov d2,#0
mov d1,#0
del_end:
jbc d2_f,f3_1
ret
f3_1:
mov a,d2
mov b,#12d
jnb fl_3s,za1
mov b,#5d
za1:
div ab
mov a,b
jnz se1
cpl fl_3s
se1:
ret
;*******************************************
reback:
mov a,stat_work
jz reback_end
jb al1_f ,ka1
mov ret_timer,d2
setb al1_f
sjmp reback_end
ka1:
mov a,ret_timer
add a,#10d
mov b,#mod
div ab
mov a,d2
cjne a,b,reback_end
clr al1_f
mov stat_work,#00d
reback_end:
ret
key_jmp:
mov a,key_data
jz key_jmp_end
kio1:
mov ret_timer,d2
cjne a,#01d,kk1
mov a,stat_work
inc a ;k1_key
cjne a,#9d,kka1 ;stat_work=al way
clr a
kka1:
mov stat_work ,a
sjmp key_jmp_end
kk1:
mov a,stat_work ;k2_key stat_led led clock mode
jnz kk2
mov a,stat_led
inc a
cjne a,#04d,kka2
clr a
kka2:
mov stat_led,a
sjmp key_jmp_end
kk2:
acall all1
cpl a
mov @r0,a
key_jmp_end:
ret
all1:
mov r0,#al1
mov a,stat_work
dec a
add a,r0
mov r0,a
mov a,@r0
ret
led_jmp:
mov a,stat_work
jnz led_al1
;call led_black
mov a,stat_led
call led_t_d
mov led1,week
sjmp led_jmp_end
led_al1:
acall all1
mov led1,#f_led
jnz le_t2
mov led1,#n_led
le_t2:
jb fl_250ms ,le_t4
mov led1,#blk_led
le_t4:
acall al_led
led_jmp_end:
jmp led
;*************************************
time_24:
mov a,hour
acall bcd_8
mov led2,a
jnz tim4
mov led2,#blk_led
tim4:
mov led3,b
jb fl_500ms,tim1
mov a,b
add a,#10d
mov led3,a
tim1:
call led_min
time_12_end:
ret
;***********************************
led_min:
mov a,min
call bcd_8
jb fl_500ms ,tim2
add a,#10d
tim2:
mov led4,a
mov led5,b
ret
;*************************************
date_led:
;call led_black
mov a,mon
acall bcd_8
mov led2,a
jnz da1
mov led2,#blk_led
da1:
mov led3,b
mov a,day
acall bcd_8
mov led4,a
jnz da2
mov led4,#blk_led
da2:
mov led5,b
date_led_end:
ret
;*************
; D_8=>BCD
;*************
BCD_8:
MOV B,#10D
DIV AB
RET
;****************************************
LED:
mov p1,#0
mov dptr,#led_asc
mov r0,#led1 ;2001.9.29
;***************************led1
mov a,@r0
movc a,@a+dptr
mov p1,a
clr led_1
acall timer_1ms
acall timer_1ms
;acall timer_1ms
;acall timer_1ms
;acall timer_1ms
setb led_1
;*************************led2
led_led2:
mov a,led2
movc a,@a+dptr
mov p1,a
clr led_2
acall timer_1ms
setb led_2
;*************************led3
led_led3:
mov a,led3
movc a,@a+dptr
mov p1,a
clr led_3
acall timer_1ms
setb led_3
;*************************led4
led_led4:
mov a,led4
movc a,@a+dptr
mov p1,a
clr led_4
acall timer_1ms
setb led_4
;*************************led5
led_led5:
mov a,led5
movc a,@a+dptr
mov p1,a
clr led_5
acall timer_1ms
setb led_5
;*************************
led_end:
mov p1,#0
;mov p1,#0ffh
;mov a,p3
;orl a,#01111000b
;mov p3,a
ret
;************************************
; bafhcdeg
led_asc:
db 11101110B;0
db 10001000B;1
db 11000111B;2
db 11001101B;3
db 10101001B;4
db 01101101B;5
db 01101111B;6
db 11001000B;7
db 11101111B;8
db 11101101B;9
db 11111110B;0. =>10d
db 10011000B;1.
db 11010111B;2.
db 11011101B;3.
db 10111001B;4.
db 01111101B;5.
db 01111111B;6.
db 11011000B;7.
db 11111111B;8.
db 11111101B;9.
DB 00000000B;BLACK=>20d
DB 00010000B;dot=>21d
DB 00100110b;l=>22d
dB 10101011B;h=>23d
DB 10101110B;u=>24d
DB 00100111B;t=>25d
dB 00101111B;b=>26d
dB 10001111B;d=>27d
; bafhcdeg
;**********************************
;delay
;********************************
timer_1ms:
mov t_1ms,#050d
r2_1:
djnz t_1ms , r2_1
ret
timer_20ms:
setb p3.1
setb p3.2
mov t_20m,#030d
r2_2:
call clock
call led
djnz t_20m , r2_2
call week_auto
call al_out
ret
;************************************
week_auto:
mov a,YEAR
DEC A
MOV R7,A
MOV B,#04D
DIV AB
;MOV A,B
ADD A,R7
MOV R7,A
MOV DPTR,#MON_ASC
MOV A,MON
dec a
MOVC A,@A+DPTR
MOV R6,A
ADD A,R7
MOV B,DAY
ADD A,B
MOV B,#07D
DIV AB
MOV R7,B
MOV A,MON
CJNE A,#02D,WEEK_1
SJMP WEEK_2
WEEK_1:
JC WEEK_2
MOV A,R6
mov b,#02d
mul ab
MOV B,YEAR
CJNE A,B,WEEK_2
INC R7
WEEK_2:
MOV WEEK,R7
mov a,week
jnz week_end
mov week,#07h
week_end:
RET
MON_ASC:
DB 0d, 3d, 3d, 6d, 1d, 4d, 6d, 2d, 5d, 0d, 3d, 5d
;*************************************************************
clr_ram:
MOV R7,#78h ;
MOV R0,#0bH ;
CLR A ;
CR: INC R0 ;
MOV @R0,A ;
djnz r7,cr ;CLR RAM
ret
;************** INT_CTRL
int_t0:
setb et1
MOV TMOD,#00010001b ;
mov w_adj,#w_adj_dat
setb ea
jmp adj_w
;**********************************************
al_led:
mov r0,#al1_h
mov a,stat_work
dec a
rl a
add a,r0
mov r0,a
mov a,@r0
acall bcd_8
mov led2,a
jnz al_1
mov led2,#blk_led
al_1:
mov a,b
add a,#10d
mov led3,a
inc r0
mov a,@r0
acall bcd_8
add a,#10d
mov led4,a
mov led5,b
al_led_end:
ret
;****************************
; key_pragm
;****************************
key_bord:
call re_k
mov a,key_data
jz key_bord_end
call sf_key
key_bord_end:
ret
;************************************
re_k:
mov key_data,#00h
mov p1,#00h
clr p3.1
clr p3.2
jnb key_f ,you_key
re_k_end:
setb p3.1
setb p3.2
setb key_f
ret
you_key:
call timer_20ms
clr p3.1
clr p3.2
jb key_f ,re_k_end
you_key1:
clr p3.1
setb p3.2
jb key_f,key_kb
mov key_data,#02h
sjmp re_k_end
key_kb:
clr p3.2
setb p3.1
jb key_f,re_k_end
mov key_data,#01h
sjmp re_k_end
;*******************************
sf_a:
setb key_f
setb p3.1
setb p3.2
call clock
call week_auto
call al_out
call led
mov p1,#00h
clr p3.1
clr p3.2
ret
sf_key:
call sf_a
jnb key_f,sf_key
jmp sf_beep
sf_beep:
clr beep_f
call timer_20ms
call timer_20ms
call timer_20ms
setb beep_f
ret
;********************************
key_bord1:
call re_k
mov a,key_data
jz key_bord1_end
acall psf_key0
key_bord1_end:
ret
psf_key0:
mov t_30ms,#06h
sf_key2:
mov t_20ms,#0f0h
sf_key1:
call sf_a
jnb key_f,sf_out
sjmp sf_12
sf_out:
djnz t_20ms,sf_key1
djnz t_30ms,sf_key2
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -