阅读:1520回复:4
AT89C2051时钟程序!!
<P>;***************AT89C2051时钟程序 ****************** ;
;29H:毫秒,30H:毫秒,31H:秒,32H:分,33H:时 ;P3.7为分按钮,P1.7为时按钮,P3.0:夜光灯开关-0输出 ;P1口 为字符输出口,采用共阳显示管。 ;50H:键盘扫描计数(速度? ;51H:延时单元 ;52H:闪烁单元 ;00H:秒闪 ;01H:补充暗显时的键盘扫描速率 ;02H:闪 ;03H:闪烁形状,0为开 ;04H:秒显示转换 ORG 0000H LJMP START ORG 0003H RETI ORG 000BH LJMP INTT0 ORG 0013H RETI ORG 001BH RETI ORG 0023H RETI ORG 002BH RETI nop ;***************** 主 程 序 ************************ START: MOV P3,#0FFH MOV 30H,#00H MOV 31H,#00H MOV 32H,#00H MOV 20H,#00H MOV 33H,#12 MOV 50H,#00H MOV 51H,#80 MOV 52H,#00 MOV TMOD,#10B MOV TL0,#06H MOV TH0,#06H SETB EA SETB ET0 SETB TR0 ;****************** 键盘扫描 ************************** KEY:LCALL LEDDISP JB P3.7,KEY31 LCALL LEDDISP JB P3.7,KEYOUT INC 50H MOV A,50H CJNE A,#200,KEYOUT ;调键盘速度-分 INC 32H MOV 50H,#00H SETB 03H SETB 02H</P> <P> KEY31: JB P3.1,KEYS LCALL LEDDISP JB P3.1,KEYOUT INC 50H MOV A,50H CJNE A,#200,KEYOUT ;调键盘速度-时 INC 33H MOV 50H,#00H SETB 03H SETB 02H KEYS: JB P3.5,KEYOUT LCALL LEDDISP LCALL LEDDISP JB P3.5,KEYOUT INC 50H MOV A,50H CJNE A,#200,KEYOUT ;调键盘速度-时 CPL 04H KEYOUT: SJMP KEY ;****************** 中断服务 ************************** INTT0: PUSH ACC PUSH PSW INC 29H MOV A,29H CJNE A,#200,S INC 30H ;MS+1 MOV 29H,#00H</P> <P> INC 52H ;闪烁计数 MOV A,52H CJNE A,#10,T52H CPL 00H JB 03H,F CPL 02H F: MOV 52H,#00 T52H: S: MOV A,30H CJNE A,#20,M INC 31H ;S+1 MOV 30H,#00H ACALL YGDCOMP ;夜光灯 M: MOV A,31H CJNE A,#60,H CPL P1.7 INC 32H ;M+1 MOV 31H,#00H H: MOV A,32H CJNE A,#60,H1 INC 33H ;H+1 MOV 32H,#00H H1: MOV A,33H CJNE A,#24,INTT0OUT MOV 33H,#00 INTT0OUT: POP PSW POP ACC RETI</P> <P>;******************** 夜光灯比校 ******************* YGDCOMP: MOV A,33H CJNE A,#20,YGDCOMP1 ;亮夜光灯 CLR P3.0 YGDCOMP1: CJNE A,#22,YGDCOMP2 ;暗显示 MOV 51H,#20 ;调暗亮度 SETB 01H YGDCOMP2: CJNE A,#7,YGDCOMPOUT SETB P3.0 MOV 51H,#80 CLR 01H YGDCOMPOUT: RET ;******************** 分配显示单元 ******************* ;3Ah:时十位/3Bh:时个位 ;3Ch:分十位/3Dh:分个位 DISP: mov a,33h ;十六进制转十进制 mov b,#10 div ab mov 3Ah,a mov 3Bh,b</P> <P> mov a,32h mov b,#10 div ab mov 3Ch,a mov 3Dh,b</P> <P> mov a,31h mov b,#10 div ab mov 3Eh,a mov 3Fh,b RET</P> <P>;******************** 动态显示 *********************** LEDDISP: LCALL DISP MOV DPTR,#TABLED ;指定查表启始地址 ;//H JB 04H,MS1 MOV A,3Ah ; 取时十数 SJMP MSOUT1 MS1: MOV A,3CH MSOUT1: MOVC A,@A+DPTR ;查十位数的7段代码 MOV P1,a ;送出十位的7段代码 MOV A,3AH CJNE A,#0,H_1 ;时的十位为0 时不显示 SJMP H_2 H_1: JNB 02H,T01HOUT ;闪烁 clr p3.5 ;开十位显示 H_2: acall D1ms ;显示162微秒 setb p3.5 ;关闭十位显示,防止鬼影 JNB 01H,T01HOUT ;夜间时执行 ACALL D1_1MS ;补充延时 CLR P3.5 NOP NOP NOP SETB P3.5 ACALL D1_1MS T01HOUT:</P> <P> JB 04H,MS2 mov a,3Bh ;取时个位数 SJMP MSOUT2 MS2: MOV A,3DH MSOUT2: MOVC A,@A+DPTR ;查十位数的7段代码 mov p1,a ;送出十位的7段代码 JNB 00H,T20OUT2 CLR P1.7 SJMP T20OUT T20OUT2: SETB P1.7 T20OUT: JNB 02H,T01HOUT3 ;闪烁 clr p3.4 ;开十位显示 acall D1ms setb p3.4;关闭十位显示,防止鬼影 JNB 01H,T01HOUT3 ACALL D1_1MS CLR P3.4 NOP NOP NOP SETB P3.4 ACALL D1_1MS</P> <P> T01HOUT3: ;//M JB 04H,MS3 mov a,3Ch ;取分十位数 SJMP MSOUT3 MS3: MOV A,3EH MSOUT3: MOVC A,@A+DPTR ;查个位数的7段代码 mov p1,a ;送出个位的7段代码 JNB 02H,T01HOUT4 ;闪烁 clr p3.3 ;开个位显示 acall D1ms ;显示162微秒 setb p3.3;关闭个位显示,防止鬼影 JNB 01H,T01HOUT4 ACALL D1_1MS CLR P3.3 NOP NOP NOP SETB P3.3 ACALL D1_1MS</P> <P> T01HOUT4: JB 04H,MS4 mov a,3Dh ;取分个位数 SJMP MSOUT4 MS4: MOV A,3FH MSOUT4: MOVC A,@A+DPTR ;查十位数的7段代码 mov p1,a ;送出十位的7段代码 JNB 02H,T01HOUT5 ;闪烁 clr p3.2 ;开十位显示 acall D1ms ;显示162微秒 setb P3.2;关闭十位显示,防止鬼影 JNB 01H,T01HOUT5 ACALL D1_1MS ACALL D1_1MS T01HOUT5: RET TABLED: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH</P> <P>;******************** 延时程序 ********************* D1MS: MOV R7,51H ;2+2X80=162微秒,延时按12MHZ计算 DJNZ R7,$ RET</P> <P>D1_1MS: MOV R7,#30 ; DJNZ R7,$ RET</P> <P>DS20MS: ACALL LEDDISP ACALL LEDDISP ACALL LEDDISP RET</P> <P>DL1S: LCALL DL05S LCALL DL05S RET DL05S: MOV R3,#20H DL05S1: LCALL LEDDISP DJNZ R3,DL05S1 RET END </P> |
|
|
1楼#
发布于:2006-02-15 18:49
|
|
|
3楼#
发布于:2006-08-14 23:14
|
|