一直在电脑前,写了三天,这才完成了第二步,可以调时间 了,接下来就是闹钟的事情,也就是最后一步,继续努力!
org 0000h ajmp main org 000bh ajmp inti0 org 0030hmain:mov tmod,#01h mov ie,#82h mov th0,#4ch mov tl0,#00h mov sp,#60h mov r0,#20 setb tr0loop:lcall display lcall keysan ajmp loopinti0:push psw push acc clr ea mov th0,#4ch mov tl0,#00h djnz r0,out ;1秒计数是否到 mov r0,#20 inc 31h ;秒加1 mov a,31h cjne a,#60,out ;60秒计数是否到 mov 31h,#00 inc 32h ;分加1 mov a,32h cjne a,#60,out ;60分计数是否到 mov 32h,#00 inc 33h ;时加1 mov a,33h cjne a,#24,out ;24时是否到 mov 33h,#00out: setb ea pop acc pop psw retidisplay: mov a,31h ;秒显示 mov b,#10 div ab mov 20h,a mov 21h,bdisp1: mov a,20h ;秒十位显示 mov dptr,#table movc a,@a+dptr mov p0,a clr p2.6 lcall del1ms setb p2.6disp2: mov a,21h ;秒个位显示 mov dptr,#table movc a,@a+dptr mov p0,a clr p2.7 lcall del1ms setb p2.7disp4: mov a,32h ;分显示 mov b,#10 div ab mov 22h,a mov 23h,bdisp5: mov a,22h ;分十位显示 mov dptr,#table movc a,@a+dptr mov p0,a clr p2.3 lcall del1ms setb p2.3disp6: mov a,23h ;分个位显示 mov dptr,#table movc a,@a+dptr mov p0,a clr p2.4 lcall del1ms setb p2.4disp7: mov a,33h ;时显示 mov b,#10 div ab mov 24h,a mov 25h,bdisp8: mov a,24h ;时十位显示 mov dptr,#table movc a,@a+dptr mov p0,a clr p2.0 lcall del1ms setb p2.0disp9: mov a,25h ;时个位显示 mov dptr,#table movc a,@a+dptr mov p0,a clr p2.1 lcall del1ms setb p2.1disp10: mov 34h,#0bfh ;"-"显示 mov a,34h mov p0,a clr p2.5 lcall del1ms setb p2.5disp11: mov 35h,#0bfh ;"-"显示 mov a,35h mov p0,a clr p2.2 lcall del1ms setb p2.2 rettable:db 0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h ;数字0—9 del1ms:mov r7,#10 ;1ms延时子程序del1: mov r6,#50del2:djnz r6,del2 djnz r7,del1 retdel20ms:mov r5,#40 ;20ms延时子程序del3: mov r4,#250del4: djnz r4,del4 djnz r5,del3 retkeysan: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,36h cjne a,#4,keyout mov 36h,#00 ;清36h,位下次做准备 setb ea sjmp keyoutkey1: lcall del20ms ;20ms延时消抖 jb p3.2,keyout ;按下按键就往下,否则返回主程序 clr ea ;关定时器中断 jnb p3.2,$ ;等待按键放开 mov a,36h cjne a,#3,key2 inc 33h ;第三次为时加1 mov a,33h cjne a,#24,keyout mov 33h,#00 setb ea sjmp keyoutkey2:mov a,36h cjne a,#2,key3 inc 32h mov a,32h cjne a,#60,keyout mov 32h,#00 setb ea sjmp keyoutkey3:inc 31h mov a,31h cjne a,#60,keyout mov 31h,#00 setb ea sjmp keyoutkeyout:retkey4: lcall del20ms jb p3.3,keyout clr ea jnb p3.3,$ mov a,36h cjne a,#3,key5 dec 33h ;时减1 mov a,33h cjne a,#24,keyout mov 33h,#23 setb ea sjmp keyoutkey5:mov a,36h cjne a,#2,key6 dec 32h ;分减1 mov a,32h cjne a,#60,keyout mov 32h,#59 setb ea sjmp keyoutkey6:dec 31h ;秒减1 mov a,31h cjne a,#60,keyout mov 31h,#59 setb ea sjmp keyoutend
-电子元器件采购网(www.ruidan.com)是本土元器件目录分销商,采用“小批量、现货、样品”销售模式,致力于满足客户多型号、高质量、快速交付的采购需求。 自建高效智能仓储,拥有自营库存超过50,000种,提供一站式正品现货采购、个性化解决方案、选型替代等多元化服务。