⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 at89c2051时钟程序b.asm

📁 29H:毫秒, 30H:毫秒
💻 ASM
字号:
;***************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
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
          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
;******************** 夜光灯比校 ******************* 
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
          mov a,32h 
          mov b,#10 
          div ab 
          mov 3Ch,a 
          mov 3Dh,b
          mov a,31h 
          mov b,#10 
          div ab 
          mov 3Eh,a 
          mov 3Fh,b 
          RET

;******************** 动态显示 *********************** 
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:  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

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

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

;******************** 延时程序 ********************* 
D1MS:     MOV R7,51H     ;2+2X80=162微秒,延时按12MHZ计算 
          DJNZ R7,$ 
          RET

D1_1MS:   MOV R7,#30 ; 
          DJNZ R7,$ 
          RET

DS20MS:   ACALL LEDDISP 
          ACALL LEDDISP 
          ACALL LEDDISP 
          RET

DL1S:     LCALL DL05S 
          LCALL DL05S 
          RET 
DL05S:    MOV R3,#20H 
DL05S1:   LCALL LEDDISP 
          DJNZ R3,DL05S1 
          RET 
          END 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -