用AT89C2051单片机制作的智能时钟
一 、智能电子钟的功能 1、全日历计时。 2、12/24小时转换。 3、8路定时输出(可关/开控制) 4、误差:15S+1uS 5、大、小月,润年,周,自动追踪 http://www.go-gddq.com/upload/2010-01/100102120228391.jpg 二、 调校 上电后,电子钟显示“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键,即可退出! 三、原理图和PCB图http://www.go-gddq.com/upload/2010-01/100102120228392.jpghttp://www.go-gddq.com/upload/2010-01/100102120228393.jpg 【内容导航】 第1页:第2页:AT89C2051的智能时钟的内部程序以下为AT89C2051的智能时钟的内部程序;2001.5.24;***************;all_clk1 _program 2000-10-12;***************fl_250ms bit 00hfl_500ms bit fl_250ms+1set_clk_f bit fl_500ms+1set_al4_f bit set_clk_f+1am_f bit set_al4_f+1fl_3s bit am_f+1al1_f bit fl_3s+1al2_f bit fl_3s+2al3_f bit fl_3s+3al4_f bit fl_3s+4set_over bit al4_f+1 ha_f bit set_over+1ha_over bit ha_f+1fl_ms_f bit ha_over+1fl_s_f bit fl_ms_f+1 key_over bit fl_s_f+1;************************************************** key_data equ 08htimers equ key_data+1t_30ms equ timers+1t_20ms equ t_30ms+1t_1s equ t_20ms+1k1_data equ t_1s+1k2_data equ k1_data+1stat_work equ k2_data+1stat_LED equ stat_work+1t_1ms equ stat_led+1t_20m equ t_1ms+1 beep equ t_20mal1 equ beep+1al2 equ beep+2al3 equ beep+3al4 equ beep+4al5 equ beep+5al6 equ beep+6al7 equ beep+7al8 equ beep+8ret_timer equ al8+1;************************************************** sec equ 23hmin equ sec+1hhour equ min+1hday equ hour+1hmon equ day+1hyear equ mon+1hw_adj equ year+1h week equ w_adj+1h;***************************************al1_h equ week+1hal1_m equ al1_h+1hal2_h equ al1_m+1hal2_m equ al2_h+1hal3_h equ al2_m+1hal3_m equ al3_h+1hal4_h equ al3_m+1hal4_m equ al4_h+1hal5_h equ al4_m+1hal5_m equ al5_h+1hal6_h equ al5_m+1hal6_m equ al6_h+1hal7_h equ al6_m+1hal7_m equ al7_h+1hal8_h equ al7_m+1hal8_m equ al8_h+1hbeep_t equ al8_m+1frist equ beep_t+1;************************************** led1 equ frist+1led2 equ led1+1led3 equ led2+1led4 equ led3+1led5 equ led4+1sp_data equ led5+1;************************************** led_1 bit p3.5led_2 bit p3.4led_3 bit p3.3led_4 bit p3.2led_5 bit p3.1beep_f BIT P3.7key_f bit p3.0;******************************************************** t_h_100ms equ 05dh ;100 ms for 6MHzt_l_100ms equ 07fh ;c6 for 100ms timer_no equ 8d ;3c90+30d=3cb0hw_adj_dat equ 50dkey_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 27doRG 0000H; ;sJMP start ORG 0003H; ;reti;ORG 000BH ;;ajmp t0reti ;ORG 0013H reti ;ORG 001BH ;aJMP T1 ;ORG 0023H ;RETI; AJMP RS_485 ;;************************************** start: call clr_ramMOV SP,#sp_data ;call int_t0call timer_intcall timer_20msSTAR_BI:call cLOCk call week_autocall al_outCALL KEY_bordcall key_del call set_clk_alcall key_jmp call rebackcall led_jmpsjmp star_bi ;*******************************************reback:mov a,stat_workjz reback_endjb al1_f ,ka1mov ret_timer,secsetb al1_f sjmp reback_endka1: mov a,ret_timeradd a,#05dmov b,#60ddiv abmov a,seccjne a,b,reback_endclr al1_fmov stat_work,#00dreback_end:retkey_jmp:mov a,key_datajz key_jmp_end mov ret_timer,seccjne a,#01d,kk1mov a,stat_workinc a ;k1_keycjne a,#9d,kka1mov a,#00dkka1: mov stat_work ,asjmp key_jmp_end kk1:mov a,stat_work ;k2_keyjnz kk2mov a,stat_ledinc acjne a,#05d,kka2mov a,#00dkka2:mov stat_led,asjmp key_jmp_endkk2:acall all1cpl amov @r0,akey_jmp_end:retall1:mov r0,#al1mov a,stat_workdec aadd a,r0mov r0,amov a,@r0retled_jmp:;**********************************;mov stat_work,#01d;mov stat_tw,#01dmov a,stat_workjnz led_al1mov a,stat_ledacall led_t_d mov led1,weeksjmp led_jmp_endled_al1:acall all1mov led1,#f_ledjnz le_t2mov led1,#n_ledle_t2:jb fl_250ms ,le_t4mov led1,#blk_ledle_t4:acall al_led led_jmp_end:acall ledret;*************************************time_24:mov a,houracall bcd_8mov led2,ajnz tim4mov led2,#blk_ledtim4:mov led3,bjb fl_500ms,tim1mov a,badd a,#10dmov led3,a tim1: acall led_mintime_12_end:ret;*********************************** led_min:mov a,minacall bcd_8jb fl_500ms ,tim2add a,#10dtim2: mov led4,amov led5,bret;*************************************date_led:mov a,monacall bcd_8mov led2,ajnz da1mov led2,#blk_ledda1: mov a,badd a,#10dmov led3,amov a,dayacall bcd_8mov led4,ajnz da2mov led4,#blk_ledda2: mov led5,bdate_led_end:ret;*************; D_8=>BCD;*************BCD_8: MOV B,#10DDIV ABRET;****************************************LED: mov p1,#0mov dptr,#led_asc;***************************led1mov a,led1movc a,@a+dptrmov p1,aclr led_1acall timer_1msacall timer_1ms;acall timer_1ms;acall timer_1ms;acall timer_1mssetb led_1;*************************led2 led_led2:mov a,led2movc a,@a+dptrmov p1,aclr led_2acall timer_1mssetb led_2;*************************led3 led_led3:mov a,led3movc a,@a+dptrmov p1,aclr led_3acall timer_1mssetb led_3;*************************led4 led_led4:mov a,led4movc a,@a+dptrmov p1,aclr led_4acall timer_1mssetb led_4;*************************led5 led_led5:mov a,led5movc a,@a+dptrmov p1,aclr led_5acall timer_1mssetb led_5;************************* led_end:mov p1,#0ret;************************************; bafhcdeg led_asc:db 11101110B;0db 10001000B;1db 11000111B;2db 11001101B;3db 10101001B;4db 01101101B;5db 01101111B;6db 11001000B;7db 11101111B;8db 11101101B;9db 11111110B;0. =>10ddb 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=>20dDB 00010000B;dot=>21dDB 00100110b;l=>22ddB 10101011B;h=>23dDB 10101110B;u=>24dDB 00100111B;t=>25ddB 00101111B;b=>26ddB 10001111B;d=>27d; bafhcdeg;**********************************;delay;********************************timer_1ms:mov t_1ms,#030hr2_1: djnz t_1ms , r2_1 rettimer_20ms:mov t_20m,#050dr2_2: call clockcall leddjnz t_20m , r2_2 call week_autocall al_outret;#############################################;if monweek=mod(*year+mon_asc(mon)+day-1)/7;else; gs2=>week=mod(*year+mon_asc(mon)+day)/7week_auto:mov a,YEARmov b,#05mul abmov r4,bmov r5,amov r7,#04call mul_2MOV DPTR,#MON_ASCMOV A,MONdec aMOVC A,@A+DPTRADD A,r3;*********************MOV B,DAYADD A,Bmov r3,a;r3=gs2;*******jb mon
页:
[1]