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

📄 时钟电压双显示.asm

📁 这是用单片机实现的多功能数字钟,通过8255扩展端口,AD0809将模拟信号转换成数字信号进行处理,可以比较精确的测出电压值.
💻 ASM
字号:
LEDBUF EQU  60H
HOUR   EQU  41H
MINUTE EQU  40H
SECOND EQU  42H
C2MS   EQU  43H

INKEY  EQU  07DFFH  ;PB键盘口
OUTSEG EQU  07CFFH  ;PA段空控制口
OUTBIT EQU  07EFFH  ;PC
AD0809 EQU  0BFFFH  ;ADC0809地址

TICK   EQU   125
CHANGE EQU  45H     ;双功能转换
 ORG 0000H
 LJMP   START
 ORG 000BH
LJMP   TOT0
ORG  0013H
LJMP  TOINT1
 ORG 0020H
LEDMAP: DB  3FH, 06H, 5BH, 4FH, 66H, 6DH, 7DH, 07H
        DB  7FH, 6FH, 77H, 7CH, 39H, 5EH, 79H, 71H
 ORG 30H
DELAY:  MOV   R7, #0         ;延时
   DELAY1: DJNZ  R7, DELAY1
        DJNZ  R6, DELAY1
   RET
DISPLAY:MOV   R0, #LEDBUF    ;显示子程序
        MOV   R1, #6
        MOV   R2, #0
  LOOP: MOV   DPTR, #OUTBIT
        MOV   A, R2
        MOVX  @DPTR, A
        MOV   A, @R0
        MOV   DPTR, #OUTSEG
        MOVX  @DPTR, A           ;显示第一位

        MOV   R6, #01H
        ACALL  DELAY
        INC   R2
        INC   R0
        DJNZ  R1 , LOOP
   RET
DISPLAY2:MOV   DPTR, #OUTBIT
        MOV   A,  #7
        MOVX   @DPTR, A         ;关八段管
        MOV   R0, #LEDBUF    ;显示子程序
        MOV   R1, #6
        MOV   R2, #0
  LOOP3:MOV   DPTR, #OUTBIT
        MOV   A, R2
        MOVX  @DPTR, A
        MOV   A, @R0
        MOV   DPTR, #OUTSEG
        MOVX  @DPTR, A           ;显示第一位

        MOV   R6, #0F0H
        ACALL  DELAY
        INC   R2
        INC   R0
        DJNZ  R1 , LOOP3
   RET
RKEY:   MOV   R6,#01H
        MOV   DPTR,#INKEY
        MOVX   A, @DPTR
        CPL   A
        ANL   A,#3CH
        DJNZ  R6,RKEY
        JNZ   GKEY
    RET
GKEY:
        JB    ACC.2, KEY0
        JB    ACC.3, KEY1
        JB    ACC.4, KEY2
        JB    ACC.5, KEY3
    RET
KEY3:   PUSH  LEDBUF+0
        PUSH  LEDBUF+1
        PUSH  LEDBUF+2
        PUSH  LEDBUF+3
        PUSH  LEDBUF+4
        PUSH  LEDBUF+5
        MOV   LEDBUF+0, #7FH      ;循环显8赋值
        MOV   LEDBUF+1, #0FFH
        MOV   LEDBUF+2, #7FH
        MOV   LEDBUF+3, #0FFH
        MOV   LEDBUF+4, #7FH
        MOV   LEDBUF+5, #7FH
        MOV   R5, #5

MLOOP:
        ACALL  DISPLAY2
        DJNZ  R5, MLOOP
        POP   LEDBUF+5
        POP   LEDBUF+4
        POP   LEDBUF+3
        POP   LEDBUF+2
        POP   LEDBUF+1
        POP   LEDBUF+0

    RET
KEY0:   INC   HOUR                  ;键1处理,调时
        MOV   A, HOUR
        CJNE  A, #24, HOUR1
        MOV   HOUR, #0
HOUR1:  CALL  SHOW
        LCALL DISPLAY
        MOV   R6, #0FFH
        CALL  DELAY
     RET
KEY1:   INC   MINUTE                    ;键2处理 调分
        MOV   A, MINUTE
        CJNE  A, #60, MINUTE1
        MOV   MINUTE, #0
MINUTE1:CALL  SHOW
        LCALL DISPLAY
        MOV   R6, #0FFH
        CALL  DELAY
    RET
KEY2:   PUSH  LEDBUF+0
        PUSH  LEDBUF+1
        PUSH  LEDBUF+2
        PUSH  LEDBUF+3
        PUSH  LEDBUF+4
        PUSH  LEDBUF+5        ;保护数据
        ;CLR   ET0
        SETB  EX1             ;显示电压程序
        MOV   DPTR, #AD0809
        MOVX  @DPTR,A
        MOV   LEDBUF,  #0
        MOV   LEDBUF+1,#0
        MOV   LEDBUF+2,#0
ADLOOP: CLR   EX1
        LCALL DISPLAY
                
        MOV   DPTR,#INKEY
        MOVX   A, @DPTR
        CPL   A
        ANL   A,#3CH
        JB    ACC.4,K2END
        SETB  EX1
        JMP   ADLOOP
K2END:  CLR   EX1
        SETB  ET0
        POP   LEDBUF+5
        POP   LEDBUF+4
        POP   LEDBUF+3
        POP   LEDBUF+2
        POP   LEDBUF+1
        POP   LEDBUF+0

    RET
GLED:   MOV   DPTR, #LEDMAP      ;查表取码
        MOVC  A, @A+DPTR
   RET
SHOW:   MOV   A, HOUR       ;时间初始化
        MOV   B, #10
        DIV   AB
        ACALL  GLED
        MOV   LEDBUF, A
        MOV   A, B
        ACALL  GLED
        ORL   A, #80H        ;#80H表示时间间隔点
        MOV   LEDBUF+1, A

        MOV   A, MINUTE
        MOV   B, #10
        DIV   AB
        ACALL  GLED
        MOV   LEDBUF+2, A
        MOV   A, B
        ACALL  GLED
        ORL   A, #80H
        MOV   LEDBUF+3, A

        MOV   A, SECOND
        MOV   B, #10
        DIV   AB
        ACALL  GLED
        MOV   LEDBUF+4,A
        MOV   A, B
        ACALL  GLED
        MOV   LEDBUF+5,A
     RET

TOT0:  PUSH  PSW         ;定时T0中断
        PUSH  ACC
        MOV   A, C2MS
        DEC   C2MS
        JNZ   EXIT          ;不够一秒,不处理中断
        MOV   C2MS, #TICK
        INC   SECOND
        MOV   A, SECOND
        CJNE  A, #60, EXIT     ;不够一分钟,继续循环
        MOV   SECOND, #0
        INC   MINUTE
        MOV   A, MINUTE
        CJNE  A, #60, EXIT
        MOV   MINUTE, #0
        INC   HOUR
        MOV   A, HOUR
        CJNE  A, #24, EXIT
        MOV   HOUR, #0
EXIT:   POP   ACC
        POP   PSW         ;保护中断
     RETI
TOINT1: CLR   ET0          ;关T0,外部1中断
     MOV   A, #10H
     DJNZ  ACC, $         ;延时128μS
     MOV   DPTR, #AD0809
     MOVX  A, @DPTR       ;读A/D结果

     MOV   B, #10
     DIV   AB
     MOV   R4, A
     MOV   A, B
     CALL  GLED
     MOV   LEDBUF+5, A
     MOV   A, R4
     MOV   B, #10
     DIV   AB
     CALL  GLED
     MOV   LEDBUF+3,A
     MOV   A,B
     CALL  GLED
     MOV   LEDBUF+4,A
     MOVX   @DPTR, A
   RETI
START:  MOV   DPTR, #4300H
        MOV   A, #82H
        MOVX @DPTR,A
        MOV   TMOD, #00H
        MOV   TH0, #06H
        MOV   TL0, #00H     ;T0方式 2MS定时初值
        SETB  ET0
        SETB  EA  ;开中断
        MOV   C2MS, #TICK
        MOV   HOUR,   #12
        MOV   MINUTE, #35
        MOV   SECOND, #0
        SETB  TR0
        MOV   CHANGE, #0    ;设置转换标志
LOOP1:  ACALL  SHOW
        LCALL  DISPLAY

        LCALL  RKEY
        AJMP   LOOP1

        END

⌨️ 快捷键说明

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