Functions of the smart electronic clock:
1. Full calendar timing.
2. 12/24 hour conversion.
3. 8-way timing output (can be turned on/off)
4. Error: 15S+1uS
5. Automatic tracking of large and small months, leap years, weeks 2.
Adjustment:
After power on, the electronic clock displays "1:00".
1. 8-way timing time query
Press K1 key to display 8-way timing time in turn. Week position display: "H" means: turn on the current timing output; "L" means: turn off the current timing output. At this time, press K2 key to switch between "H" and "L". All outputs are output by the buzzer!
2. Display status control
Press K2 key to enter the following working states:
1) 12 hours/sun and moon alternate display.
2) 12 hours fixed display.
3) 24 hours/sun and moon alternate display
. 4) 24 hours fixed display.
3. Time adjustment
Press K2 key for 3S to enter the time adjustment menu. Press K1 to enter the time calibration state in sequence: minute, hour, day, month, year, fine-tuning coefficient. Press K2 at this time to complete +1. When "d" is displayed, it means that the fine-tuning coefficient (0-99) needs to be adjusted. The smaller the value, the slower the clock runs. When the 6 MHz crystal oscillator used has a large deviation, the fine-tuning coefficient should be carefully adjusted! When "out" is displayed, press K2 to exit! After exiting, press any key to start the clock.
4. Set the timing time
. Press K1 for 3S to enter the setting menu. Press K1 to enter the 8-way timing adjustment state in sequence: hour, minute. Press K2 at this time to complete +1. When "out" is displayed, press K2 to exit!
;2001.5.24
;******************
;all_clk1 _program 2000-10-12
;****************
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
al2_f bit fl_3s+2
al3_f bit fl_3s+3
al4_f bit fl_3s+4
set_over bit al4_f+1
ha_f bit set_over +1
ha_over bit ha_f+1
fl_ms_f bit ha_over+1
fl_s_f bit fl_ms_f+1
key_over bit fl_s_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
;************************************************ ***
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
beep_t equ al8_m+1
frist equ beep_t+1
;**************************** ************
led1 equ frist+1
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
;************************************ *************************
t_h_100ms equ 05dh ;100 ms for 6MHz
t_l_100ms equ 07fh ;c6 for 100ms
timer_no equ 8d ;3c90+30d=3cb0h
w_adj_dat equ 50d
key_da equ 00000110b
;****************************************************** ********
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 int_t0
call timer_int
call timer_20ms
STAR_BI:
call c LOC k
call week_auto
call al_out
CALL KEY_bord
call key_del
call set_clk_al
call key_jmp
call reback
call led_jmp
sjmp star_bi
;************************* ******************
reback:
mov a,stat_work
jz reback_end
jb al1_f ,ka1
mov ret_timer,sec
setb al1_f
sjmp reback_end
ka1:
mov a,ret_timer
add a,#05d
mov b,#60d
div ab
mov a,sec
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
mov ret_timer,sec
cjne a,#01d,kk1
mov a,stat_work
inc a ;k1_key
cjne a,#9d,kka1
mov a,#00d
kka1:
mov stat_work ,a
sjmp key_jmp_end
kk1:
mov a,stat_work ;k2_key
jnz kk2
mov a,stat_led
inc a
cjne a,#05d,kka2
mov a,#00d
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 stat_work,#01d
;mov stat_tw,#01d
mov a,stat_work
jnz led_al1
mov a,stat_led
acall 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 :
acall led
ret
;*************************************
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:
acall led_min
time_12_end:
ret
; ***********************************
led_min:
mov a,min
acall bcd_8
jb fl_500ms ,tim2
add a, #10d
tim2:
mov led4,a
mov led5,b
ret
;************************************ *
date_led:
mov a,mon
acall bcd_8
mov led2,a
jnz da1
mov led2,#blk_led
da1:
mov a,b
add a,#10d
mov led3,a
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
;*** ************************led1
mov a,led1
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
ret
;************************************
; bafhcdeg
led_asc:
db 11101110B;0
db 10001000B;1
db 11000111B;
2db 11001101B;
3db 10101001B;
4db 01101101B;5db
01101111B;6db
11001000B;7db
11101111B;8db
11101101B;9db
11111110B;0.
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,#030h
r2_1:
djnz t_1ms , r2_1
ret
timer_20ms:
mov t_20m,#050d
r2_2:
call clock
call led
djnz t_20m , r2_2
call week_auto
call al_out
ret
;########################################## ##
;if mon<=2 and year=4Z(0,1,2,3...)
;gs1=>week=mod([5/4]*year+mon_asc(mon)+day-1)/ 7
;else
; gs2=>week=mod([5/4]*year+mon_asc(mon)+day)/7
week_auto:
mov a,YEAR
mov b,#05
mul ab
mov r4,b
mov r5,a
mov r7,#04
call mul_2
MOV DPTR,#MON_ASC
MOV A,MON
dec a
MOVC A,@A+DPTR
ADD A,r3
;************************
MOV B,DAY
ADD A ,B
mov r3,a;r3=gs2
;************jb mon<=2 ******
MOV A,MON
CJNE A,#02D,WEEK_1
SJMP WEEK_2
WEEK_1:
JC WEEK_2
week_3:
mov a ,r3
mov b,#07
div ab
mov a,b
sjmp week_4
WEEK_2:
;*****jb year=4N ******
mov a,year
mov b,#04
div ab
mov a,b
jnz week_3
mov a,r3
dec a
mov b,#07
div ab
mov a,b
week_4:
MOV WEEK,a
jnz week_end
mov week,#07h
week_end:
RET
MON_ASC:
DB 6d, 2d, 2d, 5d, 0d, 3d, 5d, 1d, 4d, 6d, 2d, 4d ;2002.5.5
;r4r5/r7=r3
mul_2:
D457: CLR C
MOV A,R4
SUBB A,R7
JC DV50
SETB OV
RET
DV50: MOV R6,#8 ;; Average value (R4R5/R7-→R3)
DV51: MOV A,R5
RLC A
MOV R5,A
MOV A,R4
RLC A
MOV R4,A
MOV F0,C
CLR C
SUBB A,R7
ANL C,/F0
JC DV52
MOV R4,A
DV52: CPL C
MOV A,R3
RLC A
MOV R3,A
DJNZ R6,DV51
MOV A,R4 ;;Round
ADD A,#0;R4
JC DV53
SUBB A,R7
JC DV54
DV53: INC R3
DV54: CLR OV
RET
;*************** ************************************************
clr_ram:
MOV R7 ,#78h ;
MOV R0,#0bH ;
CLR A ;
CR: INC R0 ;
MOV @R0,A ;
djnz r7,cr ;CLR RAM
ret
;************** INT_ CTR L
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
;****************************** *******
set_clk_al:
jnb set_clk_f,see1
call set_clock
clr set_clk_f
sjmp see2
see1:
jnb set_al4_f,see2
call set_al4
clr set_al4_f
see2:
ret
;************************************
proc led_t_d
led_t_d:
mov dptr,#led_ord_3
mov b,#02h
mul ab
jmp @a+dptr
led_ord_3: ajmp led_k0_2
ajmp led_k1_2
ajmp led_k2_2
ajmp led_k3_2
ajmp led_k4_2
led_k0_2: ; timer_12 and date to led
acall time_12
jnb fl_3s,lk1
acall date_led
lk1:
ajmp led_jmp_5_end
led_k1_2: ; timer_12 to led
acall time_12
ajmp led_jmp_5_end
led_k2_2: ;timer_24and date to led
acall time_24
jnb fl_3s ,lk2
acall date_led
lk2:
ajmp led_jmp_5_end
led_k3_2: ;timer_24to led
acall time_24
ajmp led_jmp_5_end
led_k4_2: ;sec to led
mov led1,#blk_led
mov led2,#blk_led
mov led3,#dot_led
mov a,sec
acall bcd_8
add a,#10d
mov led4,a
mov led5,b
led_jmp_5_end:
ret
end
;****************************************
proc set_al4
set_al4:
mov k1_data,#01d
mov k2_data,#01d
clr set_over
acall led_al
acall key_bord
call sf_key
mov key_data,#0
mov frist,#0
set_al41:
call clock
call week_auto
acall led_al
acall key_bord
call key_del
acall key_al
jnb set_over,set_al41
clr a
mov k1_data,a
mov k2_data,a
mov key_data,a
mov frist,a
ret
end
;****************** ***********************
proc key_al
key_al:
mov a,key_data
jz key_al_end
cjne a,#01d,k2_al
inc k1_data ;(1-9)
mov a,k1_data
cjne a,#19d,key_al_end
mov k1_data,#01d
sjmp key_al_end
k2_al:
mov a,k1_data
cjne a,#018d,ke2
setb set_over
sjmp key_al_end
ke2:
mov r0,#al1_h
dec a
add a,r0
mov r0,a
inc @r0
acall jj_bit
mov b,#24d
jnz ke3
mov b,#60d
ke3:
mov a,@r0
div ab
mov a,b
mov @r0,a
key_al_end:
ret
end
jj_bit :
mov a,k1_data
mov b,#02d
div ab
mov a,b ;(a=1,0)
ret
;************************ *********
led_out1:
mov led2,#00h
mov led3,#u_led
mov led4,#t_led
mov led5,#blk_led
mov led1,#blk_led
ret
;************************ ***********
led_al:
mov a,k1_data
cjne a,#017d,lo1
acall beep_timer
sjmp led_al_end
lo1:
cjne a,#18d,ld1
acall led_out1
sjmp led_al_end
ld1:
inc a
mov b,#02d
div ab
;************
mov led1,a
;************
dec a
rl a
mov r0,#al1_h
add a,r0
mov r0,a
mov a,@r0
acall bcd_8
mov led2,a
jnz ld2
mov led2,#blk_led
ld2:
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
;****************************flash bit
jb fl_250ms,led_al_end
acall jj_bit
jnz led_al_e
mov led4,#blk_led
mov led5,#blk_led
sjmp led_al_end
led_al_e:
mov led2,#blk_led
mov led3,#blk_led
led_al_end:
acall led
ret
;************************************ *******
proc set_clock
set_clock:
mov k1_data,#01d
mov k2_data,#01d
clr set_over
call led_cl
call key_bord
call sf_key
mov key_data,#0
mov frist,#0
set_al41:
call clock
acall week_auto
call al_out
acall led_cl
acall key_bord
call key_del
acall key_cl
jnb set_over,set_al41
;acall key_bord
clr a
mov k1_data,a
mov k2_data,a
mov key_data,a
mov frist,a
ret
end
;********************************** *******
proc key_cl
key_cl:
mov a,key_data
jz key_al_end
cjne a,#01d,k2_al
inc k1_data ;(1-8)
mov a,k1_data
cjne a,#9d,key_al_end
mov k1_data,#01d
sjmp key_al_end
k2_al:
mov a,k1_data
cjne a,#08d,ke2
setb set_over
sjmp key_al_end
ke2:
dec a
mov dptr, #asc_h
movc a,@a+dptr
mov b,a
;************************************
mov r0,# sec
mov a,k1_data
dec a
add a,r0
mov r0,a
inc @r0
mov a,@r0
div ab
mov a,b
mov @r0,a
key_al_end:
ret
end
asc_h:
db 60d,60d,24d,32d,13d ,100d,100d
proc led_cl
led_cl:
mov dptr,#led_ord_3
mov a,k1_data
dec a
mov b,#02h
mul ab
jmp @a+dptr
led_ord_3: ajmp led_k0_2
ajmp led_k1_2
ajmp led_k2_2
ajmp led_k3_2
ajmp led_k4_2
ajmp led_k5_2
ajmp led_k6_ 2
ajmp led_k7_2
led_k0_2: ; led sec
mov led2,#blk_led
mov led3,#dot_led
mov a,sec
acall bcd_8
add a,#10d
mov led4,a
mov led5,b
jb fl_250ms ,lk1
mov led4,#blk_led
mov led5,#blk_led
lk1:
ajmp led_jmp_5_end
led_k1_2: ; led min,hour
acall led_hour
jb fl_250ms ,lk2
mov led4,#blk_led
mov led5,#blk_led
lk2:
ajmp led_jmp_5_end
led_k2_2: ;led min,hour
acall led_hour
jb fl_250ms ,lk3
mov led2,#blk_led
mov led3,#blk_led
lk3:
ajmp led_jmp_5_end
led_k3_2: ; led day,mon
acall led_mon
jb fl_250ms ,lk4
mov led4,#blk_led
mov led5,#blk_led
lk4:
ajmp led_jmp_5_end
led_k4_2: ; led day,mon
acall led_mon
jb fl_250ms ,lk5
mov led2,#blk_led
mov led3,#blk_led
lk5:
ajmp led_jmp_5_end
led_k5_2: ; led year
mov led2,#2d
mov led3,#0d
mov a,year
acall bcd_8
mov led4,a
mov led5,b
jb fl_250ms ,lk6
mov led4,#blk_led
mov led5,#blk_led
lk6:
ajmp led_jmp_5_end
led_k6_2: ;led w_adj
mov led2,#d_led
mov led3,#blk_led
mov a,w_adj
acall bcd_8
mov led4,a
mov led5,b
jb fl_250ms ,lk7
mov led4,#blk_led
mov led5,#blk_led
lk7:
ajmp led_jmp_5_end
led_k7_2: ;led out
acall led_out1
led_jmp_5_end:
mov led1,week
acall led
ret
end
led_hour:
mov a,hour
acall bcd_8
mov led2,a
jnz lj1
mov led2,#blk_led
lj1:
mov a,b
add a,#10d
mov led3,a
;******* ******************
mov a,min
acall bcd_8
add a,#10d
mov led4,a
mov led5,b
ret
led_mon:
mov a,mon
jnz lj5
inc mon
mov a,mon
lj5:
acall bcd_8
mov led2,a
jnz lj2
mov led2,#blk_led
lj2:
mov led3,b
;************************
mov a,day
jnz lj4
inc day
mov a,day
lj4:
acall bcd_8
mov led4,a
jnz lj3
mov led4 ,#blk_led
lj3:
mov led5,b
ret
;****************************************** *****
al_out:
jb ha_over,al_out_end
mov r7,#8d
mov r1,#al8_m
al_ch_1:
mov r0,#min
mov r6,#02d ;min hour
al_l:
mov a,@r0
mov b,@r1
cjne a ,b ,al_ch
inc r0
dec r1
djnz r6 ,al_l
;****************************************** *************
mov a,r7
dec a
mov r0,#al1
add a,r0
mov r0,a
mov a,@r0
mov c,a CC .0
cpl c
anl c,fl_250ms
cpl c
mov beep_f,c
acall beep_out
al_ch:
clr c
mov a,r1
subb a,r6
mov r1,a
djnz r7,al_ch_1
al_out_end:
ret
beep_out:
jb ha_f,ba1
mov beep,sec
setb ha_f
ba1:
mov a,beep
add a,beep_t
mov b,#60d
div ab
mov a,sec
cjne a,b,beep_out_end
setb beep_f
setb ha_over
clr ha_f
beep_out_end:
ret
timer_int:
MOV T_1S,#TIMER_no
mov beep_t,#15d
mov year ,#01d
mov mon , #011d
mov day , #06d
mov hour ,#13d
mov min , #00d
mov sec , #00d
mov r7,#16
mov dptr ,#al_asc
mov r0,#al1_h
al_read:
clr a
movc a,@a+dptr
mov @r0,a
inc r0
inc dptr
djnz r7,al_read
ret
;**********************************
beep_timer:
mov led1,#blk_led
mov led2,#b_led
mov led3,#blk_led
mov a,beep_t
acall bcd_8
mov led4,a
mov led5,b
jb fl_250ms,ft1
mov led4,#blk_led
mov led5,#blk_led
ft1:
ret
time_12:
mov dptr,#asc_12
mov a,hour
rl a
movc a,@a+dptr
mov led2,a
jnz iu2
mov led2,#blk_led
iu2:
inc dptr
mov a,hour
rl a
movc a,@a+dptr
jb fl_500ms ,iu1
add a,#10d
iu1:
mov led3,a
;************************************ *** min to led
acall led_min
time_24_end:
ret
asc_12:
db 11d,2d,21d,1d,21d,2d,21d,3d,21d,4d,21d,5d,21d,6d,21d,7d
db 21d,8d, 21d,9d,11d,0d,11d,
1ddb 1d,2d,0d,1d,0d,2d,0d,3d,0d,4d,0d,5d,0d,6d,0d,7d,0d,8d,0d,9d
db 1d,0,1d,1d
clock:
;**********************************
mov a,sec
cjne a,#60d,clock_end;!!! !!!!!!!!!!!!!!!!!!
mov sec,#00h
inc min
;************
clr ha_over ;2001.5.6
mov a,min
cjne a,#60d,clock_end
mov min,#00h
inc hour
mov a,hour
cjne a,#24d,clock_end
mov hour ,#00h
mov a,mon
xrl a,#02d
jnz mm_1
mov dptr,#year_d
mov a, year
movc a,@a+dptr
sjmp mm_2
mm_1:
mov a,mon
dec a
mov dptr,#mou_12
movc a,@a +dptr
mm_2:
mov b,a
inc b
inc day ;******************day+1
mov a,day
cjne a ,b ,clck_end
sjmp clck1
clck_end:
jc clock_end
clck1:
mov day,#01h
inc mon
mov a,mon
cjne a,#13d ,clock_end
mov mon,#01d
inc year
mov a,year
cjne a,#100d ,clock_end
mov year,#00d
clock_end:
call fl_out
ret
mou_12:
db 31d, 28d, 31d, 30d, 31d,30d
db 31d, 31d, 30d,31d, 30d,31d
year_d :
db 29d, 28d, 28d, 28d, 29d, 28d , 28d, 28d, 29d, 28d
db 28d, 28d, 29d, 28d, 28d, 28d , 29d, 28d, 28d, 28d
db 29d, 28d, 28 d, 28d, 29d, 28d , 28d, 28d, 29d, 28d
db 28d, 28d, 29d, 28d, 28d, 28d , 29d, 28d, 28d, 28d
db 'li jie 2000.5.15'
;**************** ****************************
t1:
push a
push psw
push b
clr fl_ms_f
djnz t_1s ,t1_end
clr fl_s_f
inc sec
call adj_w
;*** *******************************
t1_end:
pop b
pop psw
pop a
reti
adj_w:
clr tr1
mov a,#T_L_100ms
add a, w_adj ;*******have 5 order
mov tl1 ,a
mov a,#T_H_100ms
addc a, #00h
mov th1,a
mov t_1s,#timer_no
setb tr1
ret
fl_out:
jb fl_ms_f ,fl_out_end
setb fl_ms_f
mov a,t_1s
mov b,#02d
div ab
mov a,b
jnz to_d1
cpl fl_250ms
to_d1:
mov a,t_1s
mov b,#04d
div ab
mov a,b
jnz to_d2
cpl fl_500ms
to_d2:
fl_out_end:
call sec_out
ret
sec_out:
jb fl_s_f ,sec_out_end
setb fl_s_f
mov a,sec
mov b,#07d
jnb fl_3s,za1
mov b,#02d
za1:
div ab
mov a,b
jnz sec_out_end
cpl fl_3s
sec_out_end:
ret
;*** *******************************
key_del:
mov a,key_data
jnz kl_12
mov a,frist
jnz kl_13
ret
kl_13:
mov key_data,frist
mov frist,#0
clr key_over
jmp sf_beep
kl_12:
jnb key_over,kl11
mov a,t_30ms
add a,#03
mov b,#60d
div ab
mov a,sec
cjne a,b,key_del_end
clr key_over
jmp set_key
kl11:
mov t_30ms,sec
setb key_over
key_del_end:
call sf_a
cjne a,#key_da,sfg_12
clr key_over
jmp sf_beep
sfg_12:
mov frist,key_data
mov key_data,#0
ret
;***** *************************************
key_bord:
acall re_k
mov a,key_data
jz key_bord1_end
;acall psf_key0
key_bord1_end:
setb key_f
ret
set_key:
mov a,key_data
cjne a,#01h,set_cc1
setb set_al4_f
sjmp sf23
set_cc1:
cjne a,#02h,sf23
setb set_clk_f
sf23:
ret
;********* ***************************
sf_key:
call clock
call week_auto
call al_out
setb key_f
call led
call sf_a
cjne a,#key_da,sf_key
call sf_beep
ret
sf_beep:
clr beep_f
call timer_20ms
setb beep_f
ret
;**********************************
re_k:
mov key_data,#00h
mov p1, #00h
mov a,p3
orl a,#01111111b
mov p3,a
clr key_f
mov a,p3
setb key_f
mov p1,#0ffh
anl a ,#00000110b
cjne a,#00000110b,you_key
re_k_end:
ret
you_key:
call timer_20ms
;call led
mov p1,#00h
mov a,p3
orl a,#01111111b
mov p3,a
clr key_f
mov a,p3
setb key_f
mov p1,#0ffh
anl a,#key_da
cjne a,#key_da,you_key1
ret;sjmp re_k_end
you_key1:
jb acc.1,key_kb
mov key_data,#02h
key_kb:
jb acc.2,sf_key0
mov key_data,#01h
sf_key0:
ret
sf_a:
mov p1,#00h
mov a,p3
orl a,#01111111b
mov p3,a
clr key_f
mov a,p3
setb key_f
anl a ,#key_da
ret
al_asc:
db 06d,40d, 06d,50d, 07d,00d, 07d ,10d;am 4_al
db 07d,15d, 013d,40d, 13d,45d, 14d,15d;pm 4_al
Previous article:MCU LED display driver
Next article:Design and source code of 8279 display electronic clock
- Popular Resources
- Popular amplifiers
- Learning MCU Technology from Scratch (Liu Jianqing)
- Wireless doorbell alarm based on AT89C2051 single chip microcomputer
- Infrared remote control LED electronic clock using real-time clock chip DS1302+AT89C2051
- Infrared remote control LED electronic clock using real-time clock chip DS1302+AT89C2051.rar
Professor at Beihang University, dedicated to promoting microcontrollers and embedded systems for over 20 years.
- Innolux's intelligent steer-by-wire solution makes cars smarter and safer
- 8051 MCU - Parity Check
- How to efficiently balance the sensitivity of tactile sensing interfaces
- What should I do if the servo motor shakes? What causes the servo motor to shake quickly?
- 【Brushless Motor】Analysis of three-phase BLDC motor and sharing of two popular development boards
- Midea Industrial Technology's subsidiaries Clou Electronics and Hekang New Energy jointly appeared at the Munich Battery Energy Storage Exhibition and Solar Energy Exhibition
- Guoxin Sichen | Application of ferroelectric memory PB85RS2MC in power battery management, with a capacity of 2M
- Analysis of common faults of frequency converter
- In a head-on competition with Qualcomm, what kind of cockpit products has Intel come up with?
- Dalian Rongke's all-vanadium liquid flow battery energy storage equipment industrialization project has entered the sprint stage before production
- Allegro MicroSystems Introduces Advanced Magnetic and Inductive Position Sensing Solutions at Electronica 2024
- Car key in the left hand, liveness detection radar in the right hand, UWB is imperative for cars!
- After a decade of rapid development, domestic CIS has entered the market
- Aegis Dagger Battery + Thor EM-i Super Hybrid, Geely New Energy has thrown out two "king bombs"
- A brief discussion on functional safety - fault, error, and failure
- In the smart car 2.0 cycle, these core industry chains are facing major opportunities!
- The United States and Japan are developing new batteries. CATL faces challenges? How should China's new energy battery industry respond?
- Murata launches high-precision 6-axis inertial sensor for automobiles
- Ford patents pre-charge alarm to help save costs and respond to emergencies
- New real-time microcontroller system from Texas Instruments enables smarter processing in automotive and industrial applications
- RSL10 drives ink screen
- GoKit Case Study: Gizwits IoT Development Platform’s Pet House Transformed into an Air Quality Detector
- Embedded licensing: why not and why not?
- I found a 1963 "Electron Tube Handbook"
- How to extract the effective value of fundamental wave and each harmonic in MATLAB?
- Analysts predict Bluetooth location services will grow at a CAGR of 32% by 2025
- TI blog post - Introduction to basic parameters of analog switches and multiplexers
- [Mil MYB-YT507 development board trial experience] Unboxing + HELLOWORLD
- How many versions of the C language main function are there? Which one is right?
- stm32f4 serial port 3 prompts NE error