📄 sxm413.asm
字号:
ACALL GET_TABLE
MOV DIS1,#5EH ;"D"
MOV DIS2,#79H ;"E"
MOV DIS3,#38H ;"L"
MOV DIS4,#40H ;"-"
DIS_DEL: ACALL DISPLAY
MOV A, P1
CJNE A,#0FFH,IN_DEL
ACALL TIME30S
SJMP DIS_DEL
;-------------------------------------
IN_DEL: MOV R7 ,#30
JNB P1.0 ,ADD3
JNB P1.6 ,SURE3
JNB P1.7 ,RETURN3
AJMP DELE
;--------------------------------------
ADD3: ACALL DISPLAY
JNB P1.0 , ADD3
AJMP AL_ADD
;--------------------------------------
SURE3: ACALL KEY_RELEASE
MOV A ,AL_NUM
DEC A
RL A
ADD A ,#80H
MOV R0 ,A
MOV @R0,0FFH
INC R0
MOV @R0,0FFH
MOV R2 ,AL_TOT
MOV R0 ,#80H
MOV A ,AL_TOT
JNZ ORDE
AJMP SHOW_NULL
ORDE: ACALL PAIXUCHULI ;将删除后的数列排序
DEC AL_TOT
ACALL WR_ALL_AL ;重新写入24C02
AJMP AL_LIST
;--------------------------------------
RETURN3: ACALL KEY_RELEASE
AJMP AL_LIST
;--------------------------------------
; 写入总数和所有打铃点
WR_ALL_AL:
MOV R0 ,#AL_TOT
MOV R3 ,#1
MOV R4 ,#TOT_AD
ACALL WR_EEROM
MOV A ,AL_TOT
RL A
MOV R3 ,A
MOV R0 ,#80H
MOV R4 ,#00H
ACALL WR_EEROM
RET
;定时中断服务子程序----------------
INT00: PUSH ACC
PUSH PSW
; clr tr0
CLR TF0
mov th0,#3ch
mov tl0,#0b0h
; setb tr0
INC R5 ;秒闪计数
CJNE R5 ,#10,EXIT ;是否到0.5秒 ?
MOV R5 ,#0
INC R6
cpl P3.1
CJNE R6 ,#2,EXIT ;是否到1秒?
MOV R6 ,#0
INC SEC ;到达一秒
DEC R7 ;定时30秒
MOV A ,SEC
CJNE A ,#60,EXIT
MOV SEC ,#0
INC MIN ;到达一分
MOV A ,MIN
CJNE A ,#60,EXIT
MOV MIN ,#0
INC HOUR ;达到一小时
MOV A ,HOUR
CJNE A ,#24,EXIT
MOV HOUR,#0
EXIT:
POP PSW
POP ACC
RETi
;**********************************
;段码查找---------------------------
GET_TABLE:
PUSH ACC
MOV A ,H_MEM
MOV B ,#10
DIV AB
MOVC A ,@A+DPTR
MOV DIS1,A
MOV A ,B
MOVC A ,@A+DPTR
MOV DIS2,A
MOV A ,M_MEM
MOV B ,#10
DIV AB
MOVC A ,@A+DPTR
MOV DIS3,A
MOV A ,B
MOVC A ,@A+DPTR
MOV DIS4,A
MOV A ,S_MEM
MOV B ,#10
DIV AB
MOVC A ,@A+DPTR
MOV DIS5,A
MOV A ,B
MOVC A ,@A+DPTR
MOV DIS6,A
POP ACC
RET
;----------------------------------
;打铃检测子程序
AL_TEST: PUSH PSW
MOV R3 ,AL_TOT
MOV R0 ,#80H
WAIT4: MOV A ,@R0
XRL A ,HOUR
JZ M_TEST
INC R0
INC R0
SJMP EXT1
M_TEST: INC R0
MOV A ,@R0
XRL A ,MIN
JNZ EXT2
SETB P3.4
SJMP EXT0
EXT2: INC R0
EXT1: DJNZ R3 ,WAIT4
EXT0: POP PSW
RET
;--------------------------------
;PAIXUCHULI排序处理程序
PAIXUCHULI:
PUSH ACC
PUSH PSW
PUSH B
MOV A ,R0
MOV R4 ,A
DEC R2
MOV A ,R2
MOV R3 ,A
CLR F0
LOOP: MOV A ,R4
MOV R0 ,A
MOV A ,R3
MOV R2 ,A
CLR F0
LOOP1: ACALL MIN_MAX
DJNZ R2 ,LOOP1
JNB F0 ,EXIT_LIST
DJNZ R3 ,LOOP
EXIT_LIST:
POP B
POP PSW
POP ACC
RET
;*******30秒返回程序段***************
TIME30S:
CJNE R7,#0,RT
LJMP CLK_DIS
RT:RET
;------------------------------------------------
MIN_MAX: MOV B ,R0
INC R0
MOV A ,@R0
INC R0
INC R0
CLR C
SUBB A ,@R0
MOV R0 ,B
MOV A ,@R0
INC R0
INC R0
SUBB A ,@R0
JC EXIT_MM
SETB F0
MOV A ,@R0
MOV R0 ,B
XCH A ,@R0
INC R0
INC R0
MOV @R0,A
DEC R0
MOV A ,@R0
INC R0
INC R0
XCH A ,@R0
DEC R0
DEC R0
MOV @R0,A
EXIT_MM: MOV R0 ,B
INC R0
INC R0
RET
;数码管扫描子程序-----------------
DISPLAY:PUSH ACC
PUSH PSW
PUSH 00H
MOV P0 ,#0
MOV A ,#0FEH
MOV R0 ,#DIS1
DIS_LOOP:
MOV P2 ,A
MOV P0 ,@R0
ACALL DLY_DIS
MOV P0 ,#0
RL A
INC R0
JB ACC.6,DIS_LOOP
MOV P2 ,#0FFH
POP 00H
POP PSW
POP ACC
RET
;--------------------------------------------------
DLY_DIS:PUSH 02H
PUSH 03H ; 延时1MS
MOV R2,#4
DLY_LOOP:
MOV R3,#204
DJNZ R3,$
DJNZ R2,DLY_LOOP
POP 03H
POP 02H
RET
;----------------------------------------------
KEY_RELEASE: ;等待按键释放
ACALL GET_TABLE
ACALL DISPLAY
MOV A,P1
CJNE A,#0FFH,KEY_RELEASE
RET
;写24C02 EEPROM数据子程序
;R0:RAM地址指针,R2:8位移位计数器
;R3:数据字节计数器
;R4:24C02 存储地址
;------------------------------------------
WR_EEROM:
NOP
W_LOOP: ACALL START24
MOV A,#0A0H
ACALL WBYTE
MOV A,R4
ACALL WBYTE
MOV A,@R0
ACALL WBYTE
ACALL STOP24
ACALL DISPLAY
INC R0
INC R4
DJNZ R3,W_LOOP
RET
;******读24C02 EEPROM数据子程序*********
;R0:RAM地址指针,R2:8位移位计数器
;R3:数据字节计数器
;R4:24C02 存储地址
;----------------------------------------
RD_EEROM:
NOP
R_LOOP1: ACALL START24
MOV A,#0A0H
ACALL WBYTE
MOV A,R4
ACALL WBYTE
ACALL START24
MOV A,#0A1H
ACALL WBYTE
ACALL RBYTE
MOV @R0,A
INC R0
INC R4
DJNZ R3,R_LOOP1
ACALL STOP24
RET
;-----------------------------------
RBYTE: NOP
CLR SCL
MOV R2,#08H
SETB SDA
RBY0: CLR SCL
NOP
SETB SCL
NOP
MOV C,SDA
RLC A
DJNZ R2,RBY0
CLR SCL
NOP
CLR SCL
SETB SDA
NOP
SETB SCL
RET
;-------------------------------------
WBYTE: NOP
MOV R2,#08H
WBY0: CLR SCL
RLC A
MOV SDA,C
NOP
SETB SCL
DJNZ R2,WBY0
CLR SCL
NOP
SETB SCL
NOP
JB SDA,$
CLR SCL
NOP
RET
;---------------------------------
START24: CLR SCL
NOP
SETB SDA
NOP
SETB SCL
NOP
CLR SDA
NOP
CLR SCL
RET
;---------------------------------
STOP24: CLR SCL
NOP
CLR SDA
NOP
SETB SCL
NOP
SETB SDA
NOP
CLR SCL
RET
;==============================================
;段码表
TABLE: ;DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H ;'0,1,2,3,4,5,6,7'
;DB 7FH,6FH,40H ;'8,9,-,B,C,D,E,F'
DB 0C0H ;"0"
DB 0F9H ;"1"
DB 0A4H ;"2"
DB 0B0H ;"3"
DB 99H ;"4"
DB 92H ;"5"
DB 82H ;"6"
DB 0F8H ;"7"
DB 80H ;"8"
DB 90H ;"9"
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -