采用AT89C2051的智能时钟

发布者:MysticDreamer最新更新时间:2018-01-22 来源: eefocus关键字:AT89C2051  智能时钟 手机看文章 扫描二维码
随时随地手机看文章



 

智能电子钟的功能:

1。 全日历计时。
2。 12/24小时转换。
3。 8路定时输出(可关/开控制)
4。 误差:15S+1uS
5。 大、小月,润年,周,自动追踪

二、 调校:

上电后,电子钟显示“1:00”。

1。 8路定时时间查询

按下K1键依此显示8路定时时间。星期位显示:“H”表示:打开当前定时输出;“L” 表示:关闭当前定时输出。此时按K2键可进行“H”、“L”的切换。所有输出,均由蜂鸣器输出!

2。 显示状态的控制

按下K2键可进入以下工作状态:
1)12小时/ 日月交替显示。
2)12小时固定显示。
3)24小时/ 日月交替显示。
4)24小时固定显示。

3。 校时

    按下K2键3S后,进入校时菜单。按下K1键依次进入校时状态:分、时、天、月、年、微调系数。此时按K2键,完成+1。当显示“d”时,表示要调整微调系数(0-99),其值越小,时钟走时越慢。当使用的6MHz晶振偏差大时,应仔细调整微调系数!当显示“out”时,按K2键,即可退出!退出后,按任意键即可启动时钟。

4。 设置定时时间

    按下K1键3S后,进入设置菜单。按下K1键依次进入8路定时调整状态:时、分。此时按K2键,完成+1。当显示“out”时,按K2键,即可退出!

 

;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 cLOC
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;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,#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 ;;求平均值(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 ;;四舍五入
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_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

;********************************
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,aCC.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,1d
db 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, 28d, 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


关键字:AT89C2051  智能时钟 引用地址:采用AT89C2051的智能时钟

上一篇:单片机LED显示驱动
下一篇:8279显示电子钟的设计与程序源代码

推荐阅读最新更新时间:2024-03-16 15:53

基于AT89C2051的红外遥控学习器源程序
源程序 ORG 0000H AJMP MAIN ORG 0003H AJMP KEYPRESS ORG 000BH AJMP TIMEOUT ORG 001BH AJMP TIMEOUT SENDDUAN BIT P3.0 JIEDUAN BIT P3.1 INTRPO BIT P3.2 JIEXUAN BIT P3.3 SENDLIGHT BIT P3.4 JIELIGHT BIT P3.5 CS BIT P3.7 DATADUAN BIT P1
[单片机]
深圳科晶参加“2016第二届锂电及关键原材料配会/技术交流会”
  7月7日至8日,由中国化学与物理电源行业协会指导,鑫椤资讯主办,锂电世界杂志、赛迪顾问、大智慧、新材料在线、信达证券、新能源Leander和领栋中国共同合作举办的“2016第二届锂电及关键原材料采配会/技术交流会”,在天津如期进行。深圳科晶应邀参加了此次会议,并在会议厅外搭有简单的展台,展台位置正对会议室出口大门,欢迎有兴趣的用户前来咨询。   据了解,此次会议主要是针对电池相关材料在产量与价格方面的变动进行讨论,会议期间设有原料、材料、锂电三个专场,为参会者提供不同的采购配对服务平台。
[新能源]
自主检机器人降低检疫接触风险
南丹麦大学(SDU)、Norken Foundaon、REInvest RoboTIcs共创的丹麦机器人新创Lifeline RoboTIcs,开发能全自动化、强化、规模化COVID-19(新冠肺炎)检体采集作业的自主喉咙采检机器人,可降低采检人员与被采检者暴露于交叉感染的风险、提高采检效率与质量。 根据报导,许多健康照护与传染病专家认为大规模筛检是解封关键,丹麦有世界级水平的医疗、机器人、安全技术,以使用者为中心的产品设计传统,结合Universal Robots等合作伙伴的专业与经验,由10个研究人员以一个月时间开发出自主喉咙采检机器人原型,也将用最短时间商品化并在数月内上市。 目前的人工检体采集作业效率低且风险较高
[机器人]
埃孚推出mStars系统,底盘也开始模块化
模块化在汽车行业是一个说新不新的概念了。从大众推出MQB到现在,模块化开发的概念早已被各大整车厂所接受。在这之后,「模块化」并没有停下渗透的脚步,比如说发动机,就有沃尔沃的Drive-E系列和宝马的B系列,再比如说电池,模块化电池的概念也很早被提出,现在已经有车企开始着手研发。 但其实,模块化给研发和生产带来的好处并不只有车企看到了,零部件供应商也看到了。相较之下,如果零部件供应商能够更熟练地掌握这个技能,那么对整个汽车行业带来的好处只会更大。 在第19届亚太汽车工程学会(APAC19)与中国汽车工程学会年会暨展览会(2017 SAECCE)上,采埃孚展示了一款产品,名叫mSTARS,中文名称是“模块化半拖曳臂式后悬架”。根据采埃
[汽车电子]
51单片机做的智能时钟具有闹钟功能(DS1302+DS18B20+LCD1602)
本贴针对学完单片机并且有读懂代码的非新手同学。本人目前放寒假,这个是本人在上个学期的单片机课上要求做的综合实验,现在重新修改了下增加了菜单目前测试毫无问题可以完美使用。有志向做闹钟的同学可以参考一下,原码上由本人写的大量注释可以方便看懂。 使用了LCD1602、DS1302、DS18B20用来测试温度、内部含闹钟系统但本人没有做EEPROM有需要的同学可以自行添加。 单片机源程序如下: #include reg52.h #include key.h #include LCD1602.h #include DS1302.h #include music.h #include DS18B20.H #define no
[单片机]
基于AT89C205l的开水器智能检测控制电路
采用AT89C205l单片计算机芯片设计制作了一个用于该开水器的“智能检测控制电路”,可实时监控水箱水位和各组电热管的工作状态,一旦水箱水位异常或电热管发生故障,均可自动完成保护动作并给出相应的声、光报警信号,提示维修管理人员及时进行检修。该电路具有结构简单、制作容易、使用方便等优点。 1、主要功能与特点 (1)电路简单,全部电路使用一个“单片机”芯片和两个辅助芯片,配合少量外围分立元件,即可完成相关控制功能。 (2)初始加电时,系统将检测水箱水位,只有水箱水位正常(水位开关SVV闭合)时,才会使三相固态继电器SSR导通,电热管加电工作。此后,系统将循环监测水箱水位,一旦出现水箱水位低于预设最低水位{即自动补水管道系统出现故障)
[单片机]
基于AT89C205l的开水器<font color='red'>智能</font>检测控制电路
50%提速 埃孚全球首发模块化电驱动组件
最近车坛焦点大多集中在德国慕尼黑车展上,而身为德国知名汽车零部件与科技大厂 ZF 采埃孚,当然得在自家拿出硬货参展,答案就是全球首发的模块化电驱动组件,以及 ProAI 采睿星! 缩短开发周期 50% 全球首发的模块化电驱动组件,是将采埃孚整个电驱动团队在系统解决方案、零部件和软件控制方面的技术特长集合于一个灵活的平台上。经过优化的齿轮传动模组,加上高效冷却和润滑方案,可以确保机械损耗减少 70%。 通过共有技术基础和零部件的跨平台开发以及协同效应,ZF 能把新电驱动单元的开发时间缩短 50%。并且还能让制造商在设计时在性能最大化和效率最大化之间灵活选择,从紧凑车型到豪华车型:参数上从 75 到 400 千
[汽车电子]
50%提速 <font color='red'>采</font>埃孚全球首发模块化电驱动组件
高通骁龙845处理器将改良10纳米制程,年底问世
  相对于 11 日之时,苹果 iOS11 的开发者爆料出新一代 iPhone 智能手机将采用全新 6 核心设计的 A11 处理器,内含类似 ARM big.LITTLE 的异质平台架构,分别拥有 2 个高性能的 Monsoon 核心,以及 4 个低性能的 Mistral 核心,具备高效能的运算能力。在此消息之后,不惶多让的是安卓 (Android) 阵营的 高通  (Qualcomm) 新一代骁龙 845 处理器,相关消息也得到曝光。下面就随网络通信小编一起来了解一下相关内容吧。   根据国为媒体 《Benchlife》 的报导, 高通 有望于 2017 年 10 月中旬,在香港举办的 4G/5G 高峰大会上,首次公布骁龙 8
[网络通信]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved