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

📄 lcd1602定时控制.asm

📁 一个定时控制器
💻 ASM
📖 第 1 页 / 共 2 页
字号:
	 ADD A,#48D
	 LCALL WRITEDDR
	 MOV A,B
	 ADD A,#48D
	 LCALL WRITEDDR

	 MOV A,39H
	 CJNE A,#01H,DISP1  ;循环显示状态还是设置状态
	 
	 MOV A,36H
	 LCALL WRITEDDR

	 MOV A,35H
	 MOV B,#10D
	 DIV AB
	 ADD A,#48D
	 LCALL WRITEDDR
	 MOV A,B
	 ADD A,#48D
	 LCALL WRITEDDR

DISP1:MOV A,#11001100B
	 LCALL WRITEIR
	 MOV A,34H
	 CJNE A,#01H,OFF
	 MOV DPTR,#DATA_ON
	 LCALL LCD_DISP
	 RET
OFF: MOV DPTR,#DATA_OFF
	 LCALL LCD_DISP
	 RET

;********************************************
KEY:MOV P1,#0FFH
    MOV A,P1
	ANL A,#11110000B
	CJNE A,#11110000B,KEY_PANDUAN
KEY_EXIT: RET
KEY_PANDUAN:MOV 3AH,A
          MOV R4,#15D
          LCALL DELAY
		  MOV A,P1
		  ANL A,#11110000B
		  CJNE A,3AH,KEY_EXIT
		  LCALL KEY_CHULI
		  RET

;*********************************************
;按键处理
KEY_CHULI:CJNE A,#11100000B,SET_DATA
          CLR TR1
		  MOV 3EH,#05H
		  MOV 3BH,#01H
		  MOV 61H,#00H
		  ACALL BEEP_BL
		  INC 3CH
		  MOV A,3CH
;*********************************
SET1:     CJNE A,#01H,SET2
          MOV 62H,60H
		  MOV 39H,#00H
		  MOV A,#01H
		  LCALL WRITEIR
		  MOV R1,#40H
		  LCALL DISP_DATA_LOOP
		  LCALL KEY_DISP
		  LCALL KEY_LOOP
		  RET
;*********************************
SET2:     CJNE A,#02H,SET3
          MOV A,60H
		  ADD A,#8D
		  MOV 60H,A
		  MOV 62H,60H
          MOV 39H,#00H
		  MOV A,#01H
		  LCALL WRITEIR
		  MOV R1,#48H
		  LCALL DISP_DATA_LOOP
		  LCALL KEY_DISP
		  RET

;************************************************
SET_DATA: MOV A,3BH
          CJNE A,#01H,KEY_CHULI_EXIT
		  LCALL BEEP_BL
KEY2:     MOV A,3AH
          CJNE A,#11010000B,KEY3
		  LCALL KEY2_CHULI
		  RET
;*********************************
SET3:     CJNE A,#03H,SET4
          MOV A,60H
		  ADD A,#8D
		  MOV 60H,A
		  MOV 62H,60H
		  MOV 39H,#00H
		  MOV A,#01H
		  LCALL WRITEIR
		  MOV R1,#50H
		  LCALL DISP_DATA_LOOP
		  LCALL KEY_DISP
		  RET
;*********************************
SET4:     CJNE A,#04H,KEY_CHULI_EXIT
          MOV A,60H
		  ADD A,#8D
		  MOV 60H,A
		  MOV 62H,60H
		  MOV 39H,#00H
		  MOV A,#01H
		  LCALL WRITEIR
	   	  MOV R1,#58H
		  LCALL DISP_DATA_LOOP
		  LCALL KEY_DISP
		  RET

;************************************************
KEY_DISP:LCALL DISP
		  MOV A,#10000111B
		  LCALL WRITEIR
		  MOV A,#00001111B
		  LCALL WRITEIR
		  RET
;************************************************

KEY3:     CJNE A,#10110000B,KEY4
		  LCALL KEY3_CHULI
		  RET
;************************************************
KEY4:     CJNE A,#01110000B,KEY_CHULI_EXIT
          LCALL KEY4_CHULI
KEY_CHULI_EXIT:RET
;************************************************	  
KEY_LOOP:LCALL KEY
         MOV A,3CH
         CJNE A,#05H,KEY_LOOP
		 MOV 39H,#01H
		 MOV 3CH,#00H
		 MOV 3EH,#01H
		 MOV 3BH,#00H
		 MOV 60H,#40H
         MOV A,#00001100B
	     LCALL WRITEIR
		 MOV R1,#40H
		 LCALL DISP_DATA_LOOP
		 SETB TR1
		 RET
;************************************************
KEY2_CHULI:INC 61H
		  MOV A,61H
		  CJNE A,#5D,THEN1
		  MOV A,#00H
THEN1:	  MOV 61H,A
          CJNE A,#00H,SET_BIT1
		  ADD A,60H
		  MOV 62H,A
          MOV A,#10000111B
          LCALL WRITEIR
          RET
SET_BIT1:CJNE A,#01H,SET_BIT2
         ADD A,60H
		  MOV 62H,A
         MOV A,#10001110B
		 LCALL WRITEIR
         RET
SET_BIT2:CJNE A,#02H,SET_BIT3
         ADD A,60H
		  MOV 62H,A
         MOV A,#11000011B
		 LCALL WRITEIR
         RET

SET_BIT3:CJNE A,#03H,SET_BIT4
         ADD A,60H
		  MOV 62H,A
         MOV A,#11000110B
		 LCALL WRITEIR
         RET

SET_BIT4:CJNE A,#04H,KEY2_CHULI_EXIT
          ADD A,60H
		  MOV 62H,A
          MOV A,#11001100B
          LCALL WRITEIR
KEY2_CHULI_EXIT:RET
;************************************************
KEY3_CHULI: 
            MOV A,61H
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
            CJNE A,#00H,SET_DATA1
			MOV R1,62H
			INC @R1
			MOV A,@R1
			CJNE A,#02H,SET_THEN0
			MOV A,#00H
SET_THEN0:	MOV @R1,A
            MOV 63H,#10000111B
            AJMP KEY3_CHULI_EXIT
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
SET_DATA1:  CJNE A,#01H,SET_DATA2
			MOV R1,62H
			INC @R1
			MOV A,@R1
			CJNE A,#02H,SET_THEN1
			MOV A,#00H
SET_THEN1:	MOV @R1,A
            MOV 63H,#10001110B
             AJMP KEY3_CHULI_EXIT
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
SET_DATA2:  CJNE A,#02H,SET_DATA3
            MOV R1,62H
			INC @R1
			MOV A,@R1
			CJNE A,#100D,SET_THEN2
			MOV A,#00H
SET_THEN2:	MOV @R1,A
            MOV 63H,#11000011B
            AJMP KEY3_CHULI_EXIT
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
SET_DATA3:  CJNE A,#03H,SET_DATA4
			MOV R1,62H
			INC @R1
			MOV A,@R1
			CJNE A,#60D,SET_THEN3
            MOV A,#00H
SET_THEN3: MOV @R1,A
           MOV 63H,#11000110B
		    AJMP KEY3_CHULI_EXIT
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
SET_DATA4:  CJNE A,#04H,KEY3_CHULI_EXIT
            MOV R1,62H
			INC @R1
			MOV A,@R1
			CJNE A,#02H,SET_THEN4
            MOV A,#00H
SET_THEN4:  MOV @R1,A
		    MOV 63H,#11001100B
		   MOV A,#05H
		   ADD A,60H
		   MOV R1,A
		   MOV @R1,#00H
		   MOV A,60H
;********************************************
MODE_1:    CJNE A,#40H,MODE_2
		   MOV A,40H
		   CJNE A,#01H,MODE_1_THEN
		   CLR 00H
		   MOV C,00H
		   MOV P2.7,C
		   AJMP  KEY3_CHULI_EXIT
MODE_1_THEN:SETB 00H
            MOV C,00H
			MOV P2.7,C
		   AJMP  KEY3_CHULI_EXIT
;********************************************
MODE_2:	   CJNE A,#48H,MODE_3
		   MOV A,48H
		   CJNE A,#01H,MODE_2_THEN
		   CLR 01H
		   MOV C,01H
		   MOV P2.6,C
		   AJMP KEY3_CHULI_EXIT
MODE_2_THEN:SETB 01H
            MOV C,01H
			MOV P2.6,C
			AJMP KEY3_CHULI_EXIT
;********************************************
MODE_3:	   CJNE A,#50H,MODE_4
           MOV A,50H
		   CJNE A,#01H,MODE_3_THEN
		   CLR 02H
		   MOV C,02H
		   MOV P2.5,C
     	   AJMP KEY3_CHULI_EXIT
MODE_3_THEN:SETB 02H
            MOV C,02H
			MOV P2.5,C
		    AJMP KEY3_CHULI_EXIT
;********************************************
MODE_4:	   CJNE A,#58H,KEY3_CHULI_EXIT
		   MOV A,58H
		   CJNE A,#01H,MODE_4_THEN
		   CLR 03H
		   MOV C,03H
		   MOV P2.4,C
		   AJMP KEY3_CHULI_EXIT
MODE_4_THEN:SETB 03H
            MOV C,03H
			MOV P2.4,C
			AJMP KEY3_CHULI_EXIT
;********************************************

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;            
KEY3_CHULI_EXIT:MOV R1,60H
            LCALL DISP_DATA_LOOP
            LCALL DISP
			MOV A,63H
			LCALL WRITEIR
                RET
;************************************************

KEY4_CHULI: 
            MOV A,61H
SET2_DATA0:CJNE A,#00H,SET2_DATA1
           MOV 63H,#10000111B
           AJMP KEY4_CHULI_EXIT
SET2_DATA1:CJNE A,#01H,SET2_DATA2
           MOV 63H,#10001110B
           AJMP KEY4_CHULI_EXIT
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
SET2_DATA2:  CJNE A,#02H,SET2_DATA3
            MOV R1,62H
			DEC @R1
			MOV A,@R1
			CJNE A,#0FFH,SET2_THEN2
			MOV A,#99D
SET2_THEN2:	MOV @R1,A
            MOV 63H,#11000011B
            AJMP KEY4_CHULI_EXIT
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
SET2_DATA3:  CJNE A,#03H,SET2_DATA4
			MOV R1,62H
		    DEC @R1
			MOV A,@R1
			CJNE A,#0FFH,SET2_THEN3
            MOV A,#59D
SET2_THEN3: MOV @R1,A
           MOV 63H,#11000110B
		    AJMP KEY4_CHULI_EXIT
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
SET2_DATA4:CJNE A,#04H,KEY4_CHULI_EXIT
           MOV 63H,#11001100B
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
KEY4_CHULI_EXIT:MOV R1,60H
            LCALL DISP_DATA_LOOP
            LCALL DISP
			MOV A,63H
			LCALL WRITEIR
                RET
;********************************************
LCD_DISP:MOV A,#00H
         MOVC A,@A+DPTR
		 JZ LCD_DISP_EXIT
		 LCALL WriteDDR
		 INC DPTR
		 AJMP LCD_DISP
LCD_DISP_EXIT:RET


; 检查忙碌子程序
CheckBusy:PUSH ACC
LOOP:  CLR RS             ;选择指令寄存器
SETB RW           ;选择读模式

MOV D0_D7,#0FFH  ;P0口写1,准备写入
SETB E             ;使能LCD
MOV A,D0_D7     ;将LCD的D0-D7由P0口送A,以便查第7位BF是否为0
CLR E             ;禁止LCD

LCALL CheckBusy_DELAY   ;调延时子程序
POP ACC

RET
; 写入IR寄存器子程序
WriteIR:PUSH ACC
LCALL CheckBusy  ;调检查忙子程序
CLR E              ;禁止LCD
CLR RS             ;选择指令寄存器
CLR RW            ;选择写模式
SETB E             ;使能LCD
MOV D0_D7,A       ;将控制指令写入LCD
SETB E             ;使能LCD
CLR E              ;禁止LCD
POP ACC

RET

; 写入DR寄存器子程序
WriteDDR:PUSH ACC
LCALL CheckBusy    ;调检查忙子程序
CLR E              ;禁止LCD
SETB RS            ;选择数据寄存器
CLR RW             ;选择写模式
SETB E              ;使能LCD
MOV D0_D7,A        ;将数据写入LCD
SETB E              ;使能LCD
CLR E               ;禁止LCD
POP ACC
RET

;以下是2.5ms延时子程序
CheckBusy_DELAY:MOV  R5,#5
D2:    MOV  R4,#248
D1:    DJNZ  R4,D1
DJNZ  R5,D2
RET


DELAY:
      MOV R6,#10
DE_LP:
      MOV R5,#250
      DJNZ R5,$
      DJNZ R6,DE_LP
      DJNZ R4,DELAY
      RET


DATA0:DB"   Make Of PP   ",00H
DATA1:DB"Mode:",00H
DATA2:DB"Beep:",00H
DATA3:DB"Time Controller ",00H
DATA_ON:DB"ON ",00H
DATA_OFF:DB"OFF",00H

END

⌨️ 快捷键说明

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