51单片机电子时钟
时间:11-29
来源:互联网
点击:
直在电脑前,写了三天,这才完成了第二步,可以调时间 了,接下来就是闹钟的事情,也就是最后一步,继续努力!
org 0000hajmp mainorg 000bhajmp inti0org 0030hmain:mov tmod,#01hmov ie,#82hmov th0,#4chmov tl0,#00hmov sp,#60hmov r0,#20setb tr0loop:lcall displaylcall keysanajmp loopinti0:push pswpush accclr eamov th0,#4chmov tl0,#00hdjnz r0,out ;1秒计数是否到mov r0,#20 inc 31h ;秒加1mov a,31hcjne a,#60,out ;60秒计数是否到mov 31h,#00inc 32h ;分加1mov a,32hcjne a,#60,out ;60分计数是否到mov 32h,#00inc 33h ;时加1mov a,33hcjne a,#24,out ;24时是否到mov 33h,#00out: setb eapop accpop pswretidisplay:mov a,31h ;秒显示mov b,#10div abmov 20h,amov 21h,bdisp1: mov a,20h ;秒十位显示mov dptr,#tablemovc a,@a+dptrmov p0,aclr p2.6lcall del1mssetb p2.6disp2: mov a,21h ;秒个位显示mov dptr,#tablemovc a,@a+dptrmov p0,aclr p2.7lcall del1mssetb p2.7disp4: mov a,32h ;分显示mov b,#10div abmov 22h,amov 23h,bdisp5: mov a,22h ;分十位显示mov dptr,#tablemovc a,@a+dptrmov p0,aclr p2.3lcall del1mssetb p2.3disp6: mov a,23h ;分个位显示mov dptr,#tablemovc a,@a+dptrmov p0,aclr p2.4lcall del1mssetb p2.4disp7: mov a,33h ;时显示mov b,#10div abmov 24h,amov 25h,bdisp8: mov a,24h ;时十位显示mov dptr,#tablemovc a,@a+dptrmov p0,aclr p2.0lcall del1mssetb p2.0disp9: mov a,25h ;时个位显示mov dptr,#tablemovc a,@a+dptrmov p0,aclr p2.1lcall del1mssetb p2.1disp10: mov 34h,#0bfh ;"-"显示mov a,34hmov p0,aclr p2.5lcall del1mssetb p2.5disp11: mov 35h,#0bfh ;"-"显示mov a,35hmov p0,aclr p2.2lcall del1mssetb p2.2ret table:db 0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h ;数字0—9 del1ms:mov r7,#10 ;1ms延时子程序del1: mov r6,#50del2:djnz r6,del2djnz r7,del1retdel20ms:mov r5,#40 ;20ms延时子程序del3: mov r4,#250del4: djnz r4,del4djnz r5,del3retkeysan:jnb p3.4,key0 ;秒、分、时选择jnb p3.2,key1 ;秒、分、时加1按钮jnb p3.3,key4 ;秒、分、时减1按钮sjmp keyoutkey0: lcall del20ms ;20ms延时消抖jb p3.4,keyout ;按下按键就往下,否则返回jnb p3.4,$ ;等待按键放开clr ea ;关定时器中断inc 36h ;36h为秒、分、时选择计数单元mov a,36hcjne a,#4,keyoutmov 36h,#00 ;清36h,位下次做准备setb easjmp keyoutkey1: lcall del20ms ;20ms延时消抖jb p3.2,keyout ;按下按键就往下,否则返回主程序clr ea ;关定时器中断jnb p3.2,$ ;等待按键放开mov a,36h cjne a,#3,key2inc 33h ;第三次为时加1mov a,33hcjne a,#24,keyoutmov 33h,#00setb easjmp keyoutkey2:mov a,36hcjne a,#2,key3inc 32hmov a,32hcjne a,#60,keyoutmov 32h,#00setb easjmp keyoutkey3:inc 31hmov a,31hcjne a,#60,keyoutmov 31h,#00setb easjmp keyoutkeyout:retkey4: lcall del20msjb p3.3,keyoutclr eajnb p3.3,$mov a,36hcjne a,#3,key5dec 33h ;时减1mov a,33hcjne a,#24,keyoutmov 33h,#23setb easjmp keyoutkey5:mov a,36hcjne a,#2,key6dec 32h ;分减1mov a,32hcjne a,#60,keyoutmov 32h,#59setb easjmp keyoutkey6:dec 31h ;秒减1mov a,31hcjne a,#60,keyoutmov 31h,#59setb easjmp keyoutend
51单片机电子时 相关文章:
- 51单片机电子时钟程序(12-01)
- 通过51单片机实现电子时钟功能并通过LCD1602显示(11-26)
- 用51单片机做的电子时钟(11-23)
- 关于51单片机电子时钟精度的问题(11-19)
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)