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

📄 safe_days.asm

📁 基于89c51的led安全生产天数的显示程序
💻 ASM
📖 第 1 页 / 共 2 页
字号:
;          安全生产天数显示程序

;----------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 + -