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

📄 sxm413.asm

📁 这是一个可设计40个打铃点的打铃系统,供一些初学者学习用
💻 ASM
📖 第 1 页 / 共 2 页
字号:

HOUR     EQU   10H     ;时
MIN      EQU   11H     ;分
SEC      EQU   12H     ;秒
H_MEM    EQU   13H     ;时针数据存储器1
M_MEM    EQU   14H     ;分钍数据存储器2
S_MEM    EQU   15H     ;秒钍数据存储器3
DIS1     EQU   20H     ;显示缓冲器1(段码,左)
DIS2     EQU   21H     ;显示缓冲器2(段码)
DIS3     EQU   22H     ;显示缓冲器3(段码)
DIS4     EQU   23H     ;显示缓冲器4(段码)
DIS5     EQU   24H     ;显示缓冲器5(段码)
DIS6     EQU   25H     ;显示缓冲器6(段码,右)
AL_NUM   EQU   30H     ;打铃点序号
AL_TOT   EQU   31H     ;打铃点总数
TOT_AD   EQU   80H     ;总数在24CO2中的地址
SDA      EQU   P3.2    ;24C02数据线
SCL      EQU   P3.3    ;24C02时钟线
;--------------------------------------------


ORG   00H
         SJMP  START
ORG   0BH
        ajmp INT00

ORG   50H
START:
      MOV    SP    ,#4FH         ;初值设定
      MOV    DPTR  ,#TABLE
      MOV    R5    ,#0
      MOV    R6    ,#0
      MOV    R7    ,#30
      CLR    P3.1
      CLR    P3.4
      MOV    TMOD,  #01H
      MOV    TH0   , #3CH
      MOV    TL0   , #0B0H
      SETB   ET0
      SETB   EA
      SETB   TR0
;读打铃点总数
      MOV    R0,#AL_TOT
      MOV    R3,#1
      MOV    R4,#TOT_AD
      ACALL  RD_EEROM
;读出所有打铃点到S5280H单元开始的RAM区
      MOV    A  ,AL_TOT
      JZ     REAST
      CLR    C
      SUBB   A   ,#40
      JC     RD_ALARM           ;
      MOV    AL_TOT,#0          ;总数多于40个将总数单元写零
      MOV    R4  ,#TOT_AD
      MOV    R3  ,#01
      MOV    R0  ,#AL_TOT
      ACALL  WR_EEROM
      SJMP   REAST
RD_ALARM:
         MOV    A,AL_TOT           ;依次读出所有打铃时间点
         RL     A
         MOV    R3,A               ;送入80H开始的内部RAM区
         MOV    R0,#80H
         MOV    R4,#00H
         LCALL  RD_EEROM
;----------------------------------
;开机时钟
REAST:
         MOV    HOUR ,#12
         MOV    MIN  ,#0
         MOV    SEC  ,#0
;-------------------------------
;时钟运行程序段
CLK_DIS: MOV    H_MEM ,HOUR
         MOV    M_MEM ,MIN
         MOV    S_MEM ,SEC
         ACALL  GET_TABLE
         ACALL  DISPLAY         ;显示时钟

         MOV    A   ,S_MEM      ;打铃检测
         CJNE   A   ,#0,JU0
         ACALL  AL_TEST
     JU0:
         CJNE   A     ,#10,JU1  ;十秒
         CLR    P3.4            ;关闹铃
     JU1:JNB    P1.0  ,JUMP_CLK
         JNB    P1.1  ,JUMP_AL
         SJMP   CLK_DIS
;--------------------------------
;时钟运行程序段结束
JUMP_CLK:ACALL  KEY_RELEASE
         MOV    R7 ,#30
         MOV    R1 ,#H_MEM
         AJMP   CLK_ADJUST
;---------------------------------
JUMP_AL: ACALL  KEY_RELEASE
         MOV    R7 ,#30
         MOV    R1 ,#M_MEM
         MOV    AL_NUM  ,#1
         AJMP   AL_LIST
;-----------------------------------------
CLK_ADJUST:
         CJNE   R1   ,#M_MEM,JUM_M
         CJNE   @R1  ,#60  ,M1
         MOV    @R1  ,#00H
      M1:CJNE   @R1  ,#0FFH,M2
         MOV    @R1  ,#59
      M2:MOV    DIS3 ,#0        ;屏蔽分钟
         MOV    DIS4 ,#0
         SJMP   FLASH_OF

   JUM_M:JC     J2
         CJNE   @R1   ,#60  ,M3
         MOV    @R1   ,#00H
      M3:CJNE   @R1   ,#0FFH,M4
         MOV    @R1   ,#59
      M4:MOV    DIS5  ,#0       ;屏蔽秒钟
         MOV    DIS6  ,#0
         SJMP   FLASH_OF

      J2:CJNE   @R1   ,#24,M5
         MOV    @R1   ,#00H
      M5:CJNE   @R1   ,#0FFH,M6
         MOV    @R1   ,#23
      M6:MOV    DIS1  ,#0       ;屏蔽时钟位
         MOV    DIS2  ,#0

FLASH_OF:ACALL  DISPLAY
         MOV    A     ,P1
         CJNE   A     ,#0FFH,CLK_SET
     ;    JB     P3.1  ,FLASH_OF

FLASH_NO:ACALL  GET_TABLE
         ACALL  DISPLAY
         ACALL  TIME30S
         MOV    A     ,P1
         CJNE   A     ,#0FFH,CLK_SET
         JNB    P3.1  ,FLASH_NO
         SJMP   CLK_ADJUST
;---------------------------------
CLK_SET: MOV   R7   ,#30
         JNB   P1.3 ,UP0
         JNB   P1.4 ,DOWN0
         JNB   P1.2 ,LEFT0
         JNB   P1.5 ,RIGHT0
         JNB   P1.6 ,SURE0
         JNB   P1.7 ,RETURN0
         AJMP  CLK_ADJUST
;-------------------------------------
UP0:     INC   @R1
         ACALL KEY_RElEASE
         AJMP  CLK_ADJUST
;------------------------------------
DOWN0:   DEC   @R1
         ACALL KEY_RELEASE
         AJMP  CLK_ADJUST
;------------------------------------
LEFT0:   ACALL KEY_RELEASE
         CJNE  R1  ,#H_MEM,JP0
         MOV   R1  ,#16H
  JP0:   DEC   R1
         AJMP  CLK_ADJUST
;------------------------------------
RIGHT0:  ACALL KEY_RELEASE
         CJNE  R1  ,#S_MEM,JP1
         MOV   R1  ,#12H
     JP1:INC   R1
         AJMP  CLK_ADJUST
;-------------------------------------
SURE0:   ACALL KEY_RELEASE
         MOV   HOUR ,H_MEM
         MOV   MIN  ,M_MEM
         MOV   SEC  ,S_MEM
         AJMP  CLK_DIS
;-------------------------------------
RETURN0: ACALL KEY_RELEASE
         AJMP  CLK_DIS
;---------------------------------------
;打铃设置
AL_LIST:
         MOV   A    ,AL_TOT       ;打铃点总数为零时
         JZ    SHOW_NULL    ;显示NULL
         MOV   H_MEM ,AL_NUM
         MOV   A     ,AL_NUM
         DEC   A
         RL    A
         ADD   A     ,#80H
         MOV   R0    ,A
         MOV   M_MEM   ,@R0
         INC   R0
         MOV   S_MEM   ,@R0
         ACALL GET_TABLE
   DISLP:ACALL DISPLAY
         MOV   A   ,P1
         CJNE  A   ,#0FFH,AL_SET
         ACALL TIME30S
         SJMP  DISLP
;-----------------------------------------
SHOW_NULL:                        ;显示"NULL"
         MOV   DIS1  ,#0
         MOV   DIS2  ,#0
         MOV   DIS3  ,#37H
         MOV   DIS4  ,#3EH
         MOV   DIS5  ,#38H
         MOV   DIS6  ,#38H
 SHOW_L: ACALL DISPLAY
         JNB   P1.0  ,FIRST
         JNB   P1.7  ,RETURN
         SJMP  SHOW_L
FIRST:   ACALL KEY_RELEASE
         AJMP  AL_ADD
RETURN:  ACALL KEY_RELEASE
         AJMP  CLK_DIS
;--------------------------------------
AL_SET:  MOV   R7   ,#30
         JNB   P1.3 ,UP1
         JNB   P1.4 ,DOWN1
         JNB   P1.0 ,CLKSET1
         JNB   P1.1 ,ALSET1
         JNB   P1.7 ,RETURN1
         SJMP  AL_LIST
;*******-----------------------------
UP1:
         ACALL KEY_RELEASE
         INC   AL_NUM
         MOV   A  ,AL_TOT
         ADD   A  ,#1
         CJNE  A  ,AL_NUM,AL_LIST
         MOV   AL_NUM  ,#1
         AJMP  AL_LIST
;-----------------------------------
DOWN1:   ACALL KEY_RELEASE
         DEC   AL_NUM
         MOV   A  ,AL_NUM
         JNZ   AL_LIST
         MOV   AL_NUM,AL_TOT
         AJMP  AL_LIST
;-----------------------------------
CLKSET1: ACALL KEY_RELEASE
         AJMP  AL_ADD
;-----------------------------------
ALSET1:  ACALL KEY_RELEASE
         AJMP  MODIFIC
;------------------------------------
RETURN1: ACALL KEY_RELEASE
         AJMP  CLK_DIS
;-------------------------------------
;闹铃修改显示-
MODIFIC:MOV   R7  ,#30
        CJNE  R1  ,#M_MEM,L_B
        CJNE  @R1 ,#0FFH,X1
        MOV   @R1 ,#23
     X1:CJNE  @R1 ,#24  ,X2
        MOV   @R1 ,#0
     X2:MOV   DIS3,#0H
        MOV   DIS4,#0H
        SJMP  CLS
    L_B:
        CJNE  @R1 ,#0FFH,X3
        MOV   @R1 ,#59
     X3:CJNE  @R1 ,#60  ,X4
        MOV   @R1 ,#0
     X4:MOV   DIS5,#0H
        MOV   DIS6,#0H
    CLS:ACALL DISPLAY
        MOV   A   ,P1
        CJNE  A   ,#0FFH,AL_MODI
        JB    P3.1,CLS

        ACALL GET_TABLE
    FLS:ACALL DISPLAY
        MOV   A   ,P1
        CJNE  A   ,#0FFH,AL_MODI
        ACALL TIME30S
        JNB   P3.1  ,FLS
        SJMP  CLS
;--------------------------------------
AL_MODI:
        JNB  P1.3 ,UP2
        JNB  P1.4 ,DOWN2
        JNB  P1.2 ,LEFT2
        JNB  P1.5 ,RIGHT2
        JNB  P1.6 ,SURE2
        JNB  P1.7 ,RETURN2
        AJMP MODIFIC
;-------------------------------------
UP2:    ACALL KEY_RELEASE
        INC   @R1
        AJMP  MODIFIC
;-------------------------------------
DOWN2:  ACALL KEY_RELEASE
        DEC   @R1
        AJMP  MODIFIC
;-------------------------------------
LEFT2:  ACALL KEY_RELEASE
        DEC   R1
        CJNE  R1  ,#13H,DEC1
        MOV   R1  ,#S_MEM
   DEC1:AJMP  MODIFIC
;-------------------------------------
RIGHT2: ACALL KEY_RELEASE
        INC R1
        CJNE  R1  ,#16H,INC1
        MOV   R1  ,#M_MEM
   INC1:AJMP  MODIFIC
;-------------------------------------
SURE2:  ACALL KEY_RELEASE
        MOV   A   ,AL_NUM
        DEC   A
        RL    A
        ADD   A   ,#80H
        MOV   R0  ,A
        MOV   @R0 ,M_MEM
        INC   R0
        MOV   @R0 ,S_MEM

        MOV   R2  ,AL_TOT      ;将修改后的内容排序
        MOV   R0  ,#80H
        ACALL PAIXUCHULI
        ACALL WR_ALL_AL        ;写入24C02
        AJMP  AL_LIST
;-------------------------------------
RETURN2:ACALL  KEY_RELEASE
      ;  MOV    AL_TOT
        AJMP   AL_LIST
;-------------------------------------
;-------------------------------------
AL_ADD:  MOV   R7   ,#30
         MOV   A    ,AL_TOT
         INC   A
         MOV   S_MEM,A
         ACALL GET_TABLE
         MOV   DIS1 ,#77H        ;"A"
         MOV   DIS2 ,#5EH        ;"D"
         MOV   DIS3 ,#5EH        ;"D"
         MOV   DIS4 ,#40H        ;"-"
DIS_ADD: ACALL DISPLAY
         MOV   A  ,P1
         CJNE  A  ,#0FFH,IN_ADD
         ACALL TIME30S
         SJMP  DIS_ADD
;-----------------------------------
IN_ADD:  MOV   R7    ,#30
         JNB   P1.0  ,AL_DELE
         JNB   P1.6  ,SURE4
         JNB   P1.7  ,RETURN4
         AJMP  AL_LIST
;-----------------------------------
AL_DELE: ACALL DISPLAY
         JNB   P1.0  ,AL_DELE
         AJMP  DELE
;-----------------------------------
SURE4:   ACALL KEY_RELEASE
         INC   AL_TOT
         MOV   AL_NUM  ,AL_TOT
         MOV   H_MEM   ,AL_NUM
         MOV   M_MEM   ,#12
         MOV   S_MEM   ,#0
         ACALL GET_TABLE
         AJMP  MODIFIC
;-----------------------------------
RETURN4: ACALL  KEY_RELEASE
         AJMP   AL_LIST
;--------------------------
;删除子程序段
DELE:    MOV    S_MEM,AL_NUM

⌨️ 快捷键说明

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