微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 51单片机电子时钟

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

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top