📄 safe_days.asm
字号:
; 安全生产天数显示程序
;----------20H----------
ENTER BIT 00H ;确认键按下标志位
CLR_BIT BIT 01H ;清零键按下标志位
KEY_MOVE BIT 02H ;移动键按下标志位
INC_A BIT 03H ;数字增加键按下标志位
DEC_A BIT 04H ;数字减少键按下标志位
T0_OVER BIT 05H ;T0中断溢出标志位
KEY_DW BIT 06H ;键盘有键按下标志位
K_DOWN BIT 07H ;已取完键值标志位
;----------21H----------
CURSOR_1 BIT 08H ;光标在第"1"个数码管标志位
CURSOR_2 BIT 09H ;光标在第"2"个数码管标志位
CURSOR_3 BIT 0AH ;光标在第"3"个数码管标志位
CURSOR_4 BIT 0BH ;光标在第"4"个数码管标志位
CURSOR_5 BIT 0CH ;光标在第"5"个数码管标志位
CURSOR_6 BIT 0DH ;光标在第"6"个数码管标志位
CURSOR_7 BIT 0EH ;光标在第"7"个数码管标志位
CURSOR_8 BIT 0FH ;光标在第"8"个数码管标志位
;----------22H----------
CURSOR_9 BIT 10H ;光标在第"9"个数码管标志位
CURSOR_10 BIT 11H ;光标在第"10"个数码管标志位
CURSOR_11 BIT 12H ;光标在第"11"个数码管标志位
CURSOR_12 BIT 13H ;光标在第"12"个数码管标志位
CURSOR_13 BIT 14H ;光标在第"13"个数码管标志位
CURSOR_14 BIT 15H ;光标在第"14"个数码管标志位
CURSOR_15 BIT 16H ;光标在第"15"个数码管标志位
CURSOR_16 BIT 17H ;光标在第"16"个数码管标志位
;----------23H----------
INT0_BIT BIT 18H ;标志
CHK_BIT BIT 19H ;标志
; BIT 1AH ;标志
; BIT 1BH ;标志
; BIT 1CH ;标志
; BIT 1DH ;标志
; BIT 1EH ;标志
; BIT 1FH ;标志
;----------24H----------
BLINK1 BIT 20H ;数码管1闪烁控制位
BLINK2 BIT 21H ;数码管2闪烁控制位
BLINK3 BIT 22H ;数码管3闪烁控制位
BLINK4 BIT 23H ;数码管4闪烁控制位
BLINK5 BIT 24H ;数码管5闪烁控制位
BLINK6 BIT 25H ;数码管6闪烁控制位
BLINK7 BIT 26H ;数码管7闪烁控制位
BLINK8 BIT 27H ;数码管8闪烁控制位
;----------25H----------
BLINK9 BIT 28H ;数码管9闪烁控制位
BLINK10 BIT 29H ;数码管10闪烁控制位
BLINK11 BIT 2AH ;数码管11闪烁控制位
BLINK12 BIT 2BH ;数码管12闪烁控制位
BLINK13 BIT 2CH ;数码管13闪烁控制位
BLINK14 BIT 2DH ;数码管14闪烁控制位
BLINK15 BIT 2EH ;数码管15闪烁控制位
BLINK16 BIT 2FH ;数码管16闪烁控制位
;--------------------------
KEY_A BIT P3.3 ;计时BC7281芯片KEY信号
CLK_A BIT P3.4 ;计时BC7281芯片时钟信号
DAT_A BIT P3.7 ;计时BC7281芯片数据信号
INT0_IN BIT P1.4 ;中断信号输入
TEST BIT P1.5 ;AT24C01的TEST信号
S_CLK BIT P1.6 ;AT24C01的串行时钟信号
S_DAT BIT P1.7 ;AT24C01的串行数据信号
;--------------------------
; BIT P1.0
; BIT P1.1
; BIT P1.2
; BIT P1.3
; BIT P3.5
;*******内存地址定义********
BLINK_A DATA 24H ;数码管闪烁控制单元1-8位
BLINK_B DATA 25H ;数码管闪烁控制单元9-16位
DAT_OUT DATA 26H ;BC7281发送数据单元
DAT_IN DATA 27H ;BC7281接收数据单元
MKEYN DATA 28H ;键盘输入的键值
TACOM DATA 29H ;T0中断计数单元
BCD_A DATA 2AH ;
BCD_B DATA 2BH ;
READ_DAT DATA 2CH ;
INT0_DAT DATA 2DH ;
; DATA 2EH ;
; DATA 2FH ;
;-------------------------------
DATA_1 DATA 30H ;
DATA_2 DATA 31H ;
DATA_3 DATA 32H ;
DATA_4 DATA 33H ;
DATA_5 DATA 34H ;
DATA_6 DATA 35H ;
DATA_7 DATA 36H ;
DATA_8 DATA 37H ;
DATA_9 DATA 38H ;
DATA_10 DATA 39H ;
DATA_11 DATA 3AH ;
DATA_12 DATA 3BH ;
DATA_13 DATA 3CH ;
DATA_14 DATA 3DH ;
DATA_15 DATA 3EH ;
DATA_16 DATA 3FH ;
WORD_DATA DATA 40H ;
;-----------------------------------------------
ORG 0000H
LJMP MAIN
ORG 0003H
LJMP INT0PR
ORG 000BH
LJMP TIME0PR
ORG 100H
MAIN: LCALL RAM_INT ;内部存储器初始化
LCALL AT24C02A
LCALL LED_INT ;数码管初始化
LCALL TIME_100MS
LCALL TIME_100MS
MOV TH0,#0CH
MOV TL0,#58H
SETB IT0 ;“INT0”沿触发
SETB EX0 ;允许“INT0”中断
SETB ET0 ;允许“T0”中断
SETB TR0 ;启动定时器“0”
SETB PX0
SETB EA
MOV SP,#50H
;***********主程序***********
START00:JNB T0_OVER,START01
CLR T0_OVER
LCALL READ_KEY
;--------键盘按键处理----------
START01:JNB KEY_DW,START02
LCALL KEYPROG ;键盘处理
CLR KEY_DW
MOV MKEYN,#0FFH
LJMP START00
START02:JNB INT0_BIT,START00
LCALL INT0_PROG
CLR INT0_BIT
LJMP START00
;********读键值程序*************
READ_KEY:JB KEY_A,READ_REC
JB K_DOWN,READ_RET
MOV DAT_OUT,#93H
LCALL SEND_A
LCALL RECEIVE
MOV A,DAT_IN
CJNE A,#05,READ_REA
LJMP READ_REB
READ_REA:JNC READ_RET
READ_REB:SETB K_DOWN
RET
READ_REC:JNB K_DOWN,READ_RET
MOV MKEYN,DAT_IN
SETB KEY_DW
CLR K_DOWN
READ_RET:RET
;-----------------------------
LED_INT:MOV DAT_OUT,#12H
LCALL SEND_A
MOV DAT_OUT,#8EH
LCALL SEND_A ;复位数码管
MOV DAT_OUT,#11H
LCALL SEND_A
MOV DAT_OUT,#090H
LCALL SEND_A
LCALL WRITE_LED
RET
;-----------------------------
WRITE_LED:
MOV R0,#00H
MOV R1,#30H
LED_INA:LCALL WR_LED
INC R0
INC R1
CJNE R0,#10H,LED_INA
RET
;*******数码管显示程序********
WR_LED: MOV DAT_OUT,#14H
LCALL SEND_A
MOV DAT_OUT,@R1 ;数码管显示内容及位置
MOV A,R0
SWAP A
ORL DAT_OUT,A
LCALL SEND_A
RET
;*******数码管显示程序********
WRITE_BLINK:
MOV DAT_OUT,#10H
LCALL SEND_A
MOV DAT_OUT,BCD_A ;数码管显示位置
LCALL SEND_A
MOV DAT_OUT,#19H
LCALL SEND_A
MOV DAT_OUT,BCD_B ;数码管显示内容
LCALL SEND_A
RET
;***************************
LDELAY: MOV R6,#60
DJNZ R6,$
RET
;***************************
SDELAY: MOV R6,#10
DJNZ R6,$
RET
;***************************
DELAYA: MOV R6,#0FFH
DJNZ R6,$
RET
;***向计时BC7281发指令/数据程序****
SEND_A: CLR CLK_A
SETB CLK_A
JB DAT_A,SEND_A
CLR CLK_A
SETB CLK_A
JNB DAT_A,$
MOV A,DAT_OUT
MOV R4,#08H
SEND_B: RLC A
MOV DAT_A,C
LCALL SDELAY
CLR CLK_A
SETB CLK_A
LCALL SDELAY
DJNZ R4,SEND_B
LCALL SDELAY
SETB DAT_A
RET
;******BC7281读数据程序******
RECEIVE:CLR CLK_A
SETB CLK_A
JB DAT_A,$
CLR CLK_A
SETB CLK_A
MOV R4,#08H
SETB DAT_A
LCALL LDELAY
RECEA: SETB CLK_A
CALL SDELAY
MOV A,DAT_IN
RL A
MOV DAT_IN,A
MOV C,DAT_A
MOV DAT_IN.0,C
CLR CLK_A
LCALL SDELAY
DJNZ R4,RECEA
LCALL SDELAY
SETB DAT_A
RET
;*********主键盘处理程序*******
KEYPROG:MOV A,MKEYN
CJNE A,#0FFH,KEYPRA
LJMP KEYPRET
KEYPRA: CJNE A,#05H,KEYPRB
LJMP KEYPRC
KEYPRB: JC KEYPRC
LJMP KEYPRET
KEYPRC: CLR C
MOV B,#3
MUL AB
MOV DPTR,#JMPTBL
JMP @A+DPTR
RET
;********功能键跳转*********
JMPTBL: LJMP MOVE_KEY
LJMP INC_KEY
LJMP DEC_KEY
LJMP ENTER_KEY
LJMP CLEAR_KEY
LJMP KEYPRET
KEYPRET:RET
;---数字增加键处理程序---
INC_KEY:JNB KEY_MOVE,KEYPRET
LCALL KEY_INCPROG
LJMP KEYPRET
;---数字减少键处理程序---
DEC_KEY:JNB KEY_MOVE,KEYPRET
LCALL KEY_DECPROG
LJMP KEYPRET
;------数字移动键处理程序--------
MOVE_KEY:
SETB KEY_MOVE
LCALL KEY_MOVPROG
LJMP KEYPRET
;-----确认键按下处理程序------
ENTER_KEY:
JNB KEY_MOVE,KEYPRET
MOV BCD_A,#0FFH
MOV BCD_B,#0FFH
LCALL WRITE_BLINK
LCALL WRITE_LED
LCALL WRITE_EEPROM
ANL 20H,#0E0H
CLR CURSOR_1
LJMP KEYPRET
;-----清楚键按下处理程序------
CLEAR_KEY:
JNB KEY_MOVE,KEYPRET
JNB CURSOR_1,CLEAR_1
MOV 30H,#00H
MOV 31H,#00H
MOV 32H,#00H
MOV 33H,#00H
LJMP CLEAR_3
CLEAR_1:JNB CURSOR_5,CLEAR_2
MOV 34H,#00H
MOV 35H,#00H
MOV 36H,#00H
MOV 37H,#00H
LJMP CLEAR_3
CLEAR_2:JNB CURSOR_13,KEYPRET
MOV 34H,#00H
MOV 35H,#00H
MOV 36H,#00H
MOV 37H,#00H
CLEAR_3:MOV BCD_A,#0FFH
MOV BCD_B,#0FFH
LCALL WRITE_BLINK
LCALL WRITE_LED
LCALL WRITE_EEPROM
ANL 20H,#0E0H
CLR CURSOR_1
LJMP KEYPRET
;------光标位置检查处理程序---
KEY_MOVPROG:
JNB CURSOR_1,MOV_001
CLR CURSOR_1 ;光标在第“1”位
SETB CURSOR_2
SETB BLINK1
CLR BLINK2
MOV BCD_A,BLINK_A
MOV BCD_B,BLINK_B
LCALL WRITE_BLINK
LJMP MOV_RET
MOV_001:JNB CURSOR_2,MOV_002
CLR CURSOR_2 ;光标在第“2”位
SETB CURSOR_3
SETB BLINK2
CLR BLINK3
MOV BCD_A,BLINK_A
MOV BCD_B,BLINK_B
LCALL WRITE_BLINK
LJMP MOV_RET
MOV_002:JNB CURSOR_3,MOV_003
CLR CURSOR_3 ;光标在第“3”位
SETB CURSOR_4
SETB BLINK3
CLR BLINK4
MOV BCD_A,BLINK_A
MOV BCD_B,BLINK_B
LCALL WRITE_BLINK
LJMP MOV_RET
MOV_003:JNB CURSOR_4,MOV_004
CLR CURSOR_4 ;光标在第“4”位
SETB CURSOR_5
SETB BLINK4
CLR BLINK5
MOV BCD_A,BLINK_A
MOV BCD_B,BLINK_B
LCALL WRITE_BLINK
LJMP MOV_RET
MOV_004:JNB CURSOR_5,MOV_005
CLR CURSOR_5 ;光标在第“5”位
SETB CURSOR_6
SETB BLINK5
CLR BLINK6
MOV BCD_A,BLINK_A
MOV BCD_B,BLINK_B
LCALL WRITE_BLINK
LJMP MOV_RET
MOV_005:JNB CURSOR_6,MOV_006
CLR CURSOR_6 ;光标在第“6”位
SETB CURSOR_7
SETB BLINK6
CLR BLINK7
MOV BCD_A,BLINK_A
MOV BCD_B,BLINK_B
LCALL WRITE_BLINK
LJMP MOV_RET
MOV_006:JNB CURSOR_7,MOV_007
CLR CURSOR_7 ;光标在第“7”位
SETB CURSOR_8
SETB BLINK7
CLR BLINK8
MOV BCD_A,BLINK_A
MOV BCD_B,BLINK_B
LCALL WRITE_BLINK
LJMP MOV_RET
MOV_007:JNB CURSOR_8,MOV_008
CLR CURSOR_8 ;光标在第“8”位
SETB CURSOR_13
SETB BLINK8
CLR BLINK13
MOV BCD_A,BLINK_A
MOV BCD_B,BLINK_B
LCALL WRITE_BLINK
LJMP MOV_RET
MOV_008:JNB CURSOR_13,MOV_009
CLR CURSOR_13 ;光标在第“13”位
SETB CURSOR_14
SETB BLINK13
CLR BLINK14
MOV BCD_A,BLINK_A
MOV BCD_B,BLINK_B
LCALL WRITE_BLINK
LJMP MOV_RET
MOV_009:JNB CURSOR_14,MOV_010
CLR CURSOR_14 ;光标在第“14”位
SETB CURSOR_15
SETB BLINK14
CLR BLINK15
MOV BCD_A,BLINK_A
MOV BCD_B,BLINK_B
LCALL WRITE_BLINK
LJMP MOV_RET
MOV_010:JNB CURSOR_15,MOV_011
CLR CURSOR_15 ;光标在第“15”位
SETB CURSOR_16
SETB BLINK15
CLR BLINK16
MOV BCD_A,BLINK_A
MOV BCD_B,BLINK_B
LCALL WRITE_BLINK
LJMP MOV_RET
MOV_011:JNB CURSOR_16,MOV_012
CLR CURSOR_16 ;光标在第“16”位
SETB CURSOR_1
SETB BLINK16
CLR BLINK1
MOV BCD_A,BLINK_A
MOV BCD_B,BLINK_B
LCALL WRITE_BLINK
LJMP MOV_RET
MOV_012:SETB CURSOR_1
CLR BLINK1
MOV BCD_A,BLINK_A
MOV BCD_B,BLINK_B
LCALL WRITE_BLINK
MOV_RET:RET
;-------数字增加处理程序-------
KEY_INCPROG:
JNB CURSOR_1,INC_002
MOV A,DATA_1 ;光标在第“01”位
CJNE A,#09H,INC_001
LJMP INC_RET
INC_001:INC A
MOV DATA_1,A
LJMP INC_RET
INC_002:JNB CURSOR_2,INC_004
MOV A,DATA_2 ;光标在第“02”位
CJNE A,#09H,INC_003
LJMP INC_RET
INC_003:INC A
MOV DATA_2,A
LJMP INC_RET
INC_004:JNB CURSOR_3,INC_006
MOV A,DATA_3 ;光标在第“03”位
CJNE A,#09H,INC_005
LJMP INC_RET
INC_005:INC A
MOV DATA_3,A
LJMP INC_RET
INC_006:JNB CURSOR_4,INC_008
MOV A,DATA_4 ;光标在第“04”位
CJNE A,#09H,INC_007
LJMP INC_RET
INC_007:INC A
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -