📄 sxm413.asm
字号:
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 + -