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

📄 家庭时钟6.9.asm

📁 时钟单片机汇编程序,可以随意调整时间。。。。
💻 ASM
字号:
;本实验是做一个计时器,能从00:00计到59:59共1个小时。
;数码管1、2位为时,3、4位为分。
         DS1    EQU   22H      ;数码管显示缓存
         DS2    EQU   23H
         DS3    EQU   24H
         DS4    EQU   25H
      BUFF_LP   EQU   28H
   BUFF_LED_LP  EQU   29H      ;T0键盘显示扫描缓存
         HOR    EQU   30H      ;时值缓存
         MIN    EQU   31H      ;分钟值缓存
         SEC    EQU   32H      ;秒值缓存
      SET_TIME  BIT   33H
     SET_CLOCK  BIT   34H
     LED_PORT   EQU   P0       ;数码管段码接口
         KEY    EQU   P1
     DIG_PORT   EQU   P2      ;数码管位控制接口
         BUZZ   EQU   P2.2
         LED    EQU   P2.3

        ORG   000H
        JMP   MAIN
        ORG   00BH
        JMP   T0_INT

        ORG    0100H
MAIN:   MOV    SP ,#40H
        MOV    PSW,#00H
        MOV    R0,#7FH      ;初始化RAM区,
CLR_RAM:MOV    A,#00H
        MOV    @R0,A
        DJNZ   R0,CLR_RAM
        MOV    P1,0FFH
        MOV    P2,0FFH
        MOV    P0,0FFH
        MOV    P3,0FFH
        MOV    TH0,#0F0H     ;装入定时时间T0=4MS
        MOV    TL0,#060H
        MOV    IE,#82H
        MOV    TMOD,#01H
        SETB   TR0           ;开始定时
        SETB   BUZZ          ;关蜂鸣器
        SETB   LED           ;关LED
        CLR    SET_TIME
        CLR    SET_CLOCK
        MOV    KEY,#0FFH      ;设P1口为输入口
 LOOP:  MOV    A,KEY
        CJNE   A,#0FFH,START
        LJMP   LOOP
 START: LCALL  DEL_10MS
        JNB    SET_TIME,KEY5;;;;;
  KEY1: JB     ACC.0,KEY2
        MOV    A,MIN          ;
        CJNE   A,#59,ADD_MIN  ;
        MOV    MIN,#0         ;
        LJMP   KEY1OUT
ADD_MIN:INC    MIN            ;
KEY1OUT:LJMP   KEYFRE

  KEY2: JB     ACC.1,KEY3
        MOV    A,MIN          ;
        CJNE   A,#00,SUB_MIN  ;
        MOV    MIN,#59        ;
        LJMP   KEY2OUT
SUB_MIN:DEC    MIN            ;
KEY2OUT:LJMP   KEYFRE

  KEY3: JB     ACC.2,KEY4
        MOV    A,SEC          ;
        CJNE   A,#59,ADD_SEC  ;
        MOV    SEC,#0         ;
        LJMP   KEY3OUT
ADD_SEC:INC    SEC            ;
KEY3OUT:LJMP   KEYFRE

  KEY4: JB     ACC.3,KEY5
        MOV    A,SEC          ;
        CJNE   A,#00,SUB_SEC  ;
        MOV    SEC,#59        ;
        LJMP   KEY2OUT
SUB_SEC:DEC    SEC            ;
KEY4OUT:LJMP   KEYFRE

  KEY5: JB     ACC.4,KEY6
        LCALL  BELL
        JBC    SET_TIME,KEYFRE
        SETB   SET_TIME
        LJMP   KEYFRE

  KEY6: JB     ACC.5,KEY7
        LCALL  BELL
        JBC    SET_CLOCK,KEYFRE
        SETB   SET_CLOCK
        LJMP   KEYFRE

  KEY7: JB     ACC.6,KEY8
        LJMP   KEYFRE

  KEY8: JB     ACC.7,KEYFRE
        LJMP   KEYFRE

KEYFRE: JB     SET_TIME,KEYR1
        JNB    SET_CLOCK,KEYR2
  KEYR1:LCALL  BELL
  KEYR2:MOV    A,KEY             ;等待键释放
        CPL    A
        XRL    A,#00H
        JNZ    KEYR2
        LJMP   LOOP

BELL  : CLR    BUZZ
        LCALL  DEL
        SETB   BUZZ
        RET

DEL:     MOV   R5,#20
DEL01:   MOV   R6,#250
         DJNZ  R6,$
         DJNZ  R5,DEL01
         RET

DEL_10MS: MOV   R6,#25
   D10MS: MOV   R7,#250
          DJNZ  R7,$
          DJNZ  R6,D10MS
          RET


BIN_BCD:  MOV  B,#10
          DIV  AB
          RET

;===============数码管扫描定时中断================
T0_INT:  PUSH   ACC
         PUSH   PSW
         MOV    TH0,#0F0H             ;T0=4MS
         MOV    TL0,#060H
         INC    BUFF_LED_LP
         MOV    A,BUFF_LED_LP
         CJNE   A,#250,CONT_SCAN     ;250*4MS=1S
         MOV    BUFF_LED_LP,#00H
         INC    SEC
         CPL    LED
         MOV    A,SEC
         CJNE   A,#60,CONT_SCAN
         MOV    SEC,#00H
         INC    MIN
         MOV    A,MIN
         CJNE   A,#60,CONT_SCAN
         MOV    MIN,#00H
         INC    HOR
         MOV    A,HOR
         CJNE   A,#24,CONT_SCAN
         MOV    HOR,#00H
CONT_SCAN:INC   BUFF_LP
          MOV   A,SEC
          LCALL BIN_BCD
          MOV   DS4,B
          MOV   DS3,A
          MOV   A,MIN
          LCALL BIN_BCD
          MOV   DS2,B
          MOV   DS1,A
    SCAN: MOV   A,BUFF_LP
          MOV   B,#04
          DIV   AB
          MOV   A,B
          RL    A
          MOV   DPTR,#TAB_SCAN
          JMP   @A+DPTR
TAB_SCAN: AJMP  SCAN_L1
          AJMP  SCAN_L2
          AJMP  SCAN_L3
          AJMP  SCAN_L4

SCAN_L1:  CLR   P2.7
          SETB  P2.6
          SETB  P2.5
          SETB  P2.4
          MOV   A,DS1
          JMP   END_SCAN
SCAN_L2:  SETB  P2.7
          CLR   P2.6
          SETB  P2.5
          SETB  P2.4
          MOV   A,DS2
          JMP   END_SCAN
SCAN_L3:  SETB  P2.7
          SETB  P2.6
          CLR   P2.5
          SETB  P2.4
          MOV   A,DS3
          JMP   END_SCAN
SCAN_L4:  SETB  P2.7
          SETB  P2.6
          SETB  P2.5
          CLR   P2.4
          MOV   A,DS4
END_SCAN: MOV   DPTR,#TAB_LED
 DISPLAY: MOVC  A,@A+DPTR
          MOV   LED_PORT,A
EXIT_T0:  POP   PSW
          POP   ACC
          RETI


;=========共阳数码管段码表=============
TAB_LED:  DB    0C0H,0F9H,0A4H,0B0H,99H  ;"0","1","2","3","4"
          DB    92H,82H,0F8H,80H,90H     ;"5","6","7","8","9"
          DB    88H,83H,0A7H,0A1H,86H,8EH;"A","B","C","D","E","F"
          DB    0FFH                     ;" "
          END

⌨️ 快捷键说明

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