[求助]用单片机做时钟,我这个程序可以实现吗?
<P>本人没有实验设备,<BR>用仿真的软件显示很乱。<BR>要求可以显示时,分,秒。刚开始显示全零。<BR>有一个按钮,按一下开始计时,再按一下停止,再按一下清零。<BR>程序如下:<BR><BR>SECOND EQU 30H<BR>MINITUE EQU 31H<BR>HOUR EQU 32H<BR>COUNT EQU 33H<BR> ORG 00H<BR>START: MOV SECOND,#00H ;准备开始全部清零<BR> MOV MINITUE,#00H<BR> MOV HOUR, #00H<BR> MOV COUNT,#00H </P><P>AA: MOV A,#24H ;显示00 <BR> MOV P2,A<BR> MOV A,#3FH<BR> MOV P0,A<BR> LCALL DELAY1</P>
<P> MOV A,#0DBH ;显示--<BR> MOV P2,A<BR> MOV A,#40H<BR> MOV P0,A<BR> LCALL DELAY1</P>
<P> MOV A,P3 ;判断是否开始计数?<BR> LCALL DELAY2<BR> JB ACC.5,AA </P>
<P> MOV TMOD,#01H ;开始计数<BR> MOV TH0,#(65536-50000) / 256<BR> MOV TL0,#(65536-50000) MOD 256<BR> SETB TR0</P>
<P>DISP: MOV A,SECOND<BR> MOV B,#10<BR> DIV AB<BR> MOV DPTR,#TABLE ;显示秒数的十位,并存于R0<BR> MOVC A,@A+DPTR<BR> MOV P0,A<BR> MOV R0,A<BR> MOV A,#0FDH<BR> MOV P2,A<BR> LCALL DELAY1<BR> MOV A,B ;显示秒数的个位,并存于R1<BR> MOVC A,@A+DPTR<BR> MOV P0,A<BR> MOV R1,A<BR> MOV A,#0FEH<BR> MOV P2,A<BR> LCALL DELAY1<BR> <BR> MOV A,#0DBH ;显示--<BR> MOV P2,A<BR> MOV A,#40H<BR> MOV P0,A<BR> LCALL DELAY1</P>
<P> MOV A,MINITUE <BR> MOV B,#10<BR> DIV AB<BR> MOV DPTR,#TABLE ;显示分数的十位,并存于R2<BR> MOVC A,@A+DPTR<BR> MOV P0,A<BR> MOV R2,A<BR> MOV A,#0EFH<BR> MOV P2,A<BR> LCALL DELAY1<BR> MOV A,B<BR> MOVC A,@A+DPTR ;显示分数的个位,并存于R3<BR> MOV P0,A<BR> MOV R3,A<BR> MOV A,#0F7H<BR> MOV P2,A<BR> LCALL DELAY1</P>
<P> MOV A,#0DBH ;显示--<BR> MOV P2,A<BR> MOV A,#40H<BR> MOV P0,A<BR> LCALL DELAY1</P>
<P> MOV A,HOUR<BR> MOV B,#10<BR> DIV AB<BR> MOV DPTR,#TABLE<BR> MOVC A,@A+DPTR ;显示时数的十位,并存于R4<BR> MOV P0,A<BR> MOV R4,A<BR> MOV A,#07FH<BR> MOV P2,A<BR> LCALL DELAY1<BR> MOV A,B<BR> MOVC A,@A+DPTR ;显示时数的个位,并存于R5<BR> MOV P0,A<BR> MOV R5,A<BR> MOV A,#0BFH<BR> MOV P2,A<BR> LCALL DELAY1</P>
<P> MOV A,P3 ;判断是否停止计数?<BR> LCALL DELAY2<BR> JNB ACC.5,EE <BR> SJMP WAIT<BR>EE: LJMP CC</P>
<P><BR>WAIT: JNB TF0,FF<BR> SJMP GG<BR>FF: AJMP DISP<BR>GG: CLR TF0<BR> MOV TH0,#(65536-50000) / 256<BR> MOV TL0,#(65536-50000) MOD 256<BR> INC COUNT<BR> MOV A,COUNT<BR> CJNE A,#20,NEXT1<BR> MOV COUNT,#00H<BR> INC SECOND<BR> MOV A,SECOND<BR> CJNE A,#60,NEXT2<BR> MOV SECOND,#00H<BR> INC MINITUE<BR> MOV A,MINITUE<BR> CJNE A,#60,NEXT2 <BR> MOV MINITUE,#00H<BR> INC HOUR<BR> MOV A,HOUR<BR> CJNE A,#24,NEXT2<BR> LJMP START </P>
<P>NEXT2: LJMP DISP<BR>NEXT1: LJMP WAIT</P>
<P>CC: MOV A,#0FDH ;显示秒数的十位<BR> MOV P1,A<BR> MOV P0,R0<BR> LCALL DELAY1<BR> MOV A,#0FEH ;显示秒数的个位<BR> MOV P1,A<BR> MOV P0,R1<BR> LCALL DELAY1</P>
<P> MOV A,#0DBH ;显示--<BR> MOV P2,A<BR> MOV A,#40H<BR> MOV P0,A<BR> LCALL DELAY1</P>
<P> MOV A,#0EFH ;显示分数的十位<BR> MOV P1,A<BR> MOV P0,R2<BR> LCALL DELAY1<BR> MOV A,#0F7H ;显示分数的个位<BR> MOV P1,A<BR> MOV P0,R3<BR> LCALL DELAY1</P>
<P> MOV A,#0DBH ;显示--<BR> MOV P2,A<BR> MOV A,#40H<BR> MOV P0,A<BR> LCALL DELAY1</P>
<P> MOV A,#07FH ;显示时数的十位<BR> MOV P1,A<BR> MOV P0,R4<BR> LCALL DELAY1<BR> MOV A,#0BFH ;显示时数的个位<BR> MOV P1,A<BR> MOV P0,R5<BR> LCALL DELAY1</P>
<P> MOV A,P3 ; 判断是否清零?<BR> LCALL DELAY2<BR> JNB ACC.5,DD<BR> SJMP CC<BR> <BR>DD: LJMP START</P>
<P>DELAY1: MOV R2,#10 ;延时5MS<BR>D1: MOV R3,128<BR> DJNZ R3,$<BR> DJNZ R2,D1<BR> RET</P>
<P>DELAY2: MOV R4,#20 ;延时10MS <BR>D2: MOV R5,#128<BR> DJNZ R5,$<BR> DJNZ R4,D2<BR> RET</P>
<P>TABLE: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH<BR> END</P>
页:
[1]

