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

📄 lcd89527.asm

📁 餐饮呼叫系统的汇编源代码
💻 ASM
📖 第 1 页 / 共 5 页
字号:
             MOV COMMAND,Y_ADD  ;
             LCALL LCD_COMMAND

	     SETB F_COMMAND
             MOV COMMAND,X_ADD  ; X+1
             LCALL LCD_COMMAND

             MOV R5,#16
HZ1:         MOV A,#00H
             MOVC A,@A+DPTR
	     CLR F_COMMAND
             MOV COMMAND,A  ;
             LCALL LCD_COMMAND

             LCALL DELAY_10US

             INC DPTR

             DJNZ R5,HZ1

             INC X_ADD
             DJNZ R7,HZ2
         CLR CS1
         CLR CS2

            RET


;*********************************************************************


OUTHZ32:

            MOV A,Y_ADD
            CJNE A,#032,CHOOSE_HALF_32
CHOOSE_HALF_32:
            JC CHOOSE_LEFT_32
            CLR CS1
            SETB CS2
            SUBB A,#64
            MOV Y_ADD,A
            AJMP CHOOSE_32_END
CHOOSE_LEFT_32:
            SETB CS1
            CLR CS2

CHOOSE_32_END:
             SETB F_COMMAND                                                  ;30H=X (0-6)  31H=Y(0-63-16)
             MOV COMMAND,#0C0H   ;START = 0
             LCALL LCD_COMMAND

             MOV R7,#2

             MOV A,#40H   ; Y
             ADD A,Y_ADD
             MOV Y_ADD,A
         			 ;40+Y


             MOV A,#0B8H
             ADD A,X_ADD   ;B8+X
             MOV X_ADD,A   ;A>>30H
HZ2_32:
	     SETB F_COMMAND
             MOV COMMAND,Y_ADD  ;
             LCALL LCD_COMMAND

	     SETB F_COMMAND
             MOV COMMAND,X_ADD  ; X+1
             LCALL LCD_COMMAND

             MOV R5,#32
HZ1_32:      MOV A,#00H
             MOVC A,@A+DPTR
	     CLR F_COMMAND
             MOV COMMAND,A  ;
             LCALL LCD_COMMAND

             LCALL DELAY_10US

             INC DPTR

             DJNZ R5,HZ1_32

             INC X_ADD
             DJNZ R7,HZ2_32
         CLR CS1
         CLR CS2

            RET

;********************************************************************
;     以下显示8*16的字母和数字         使用了R5、R7
;********************************************************************
OUTSHUZI:

            MOV A,Y_ADD
            CJNE A,#064,CHOOSE_HALF_SHUZI
CHOOSE_HALF_SHUZI:
            JC CHOOSE_LEFT_SHUZI
            CLR CS1
            SETB CS2
            SUBB A,#64
            MOV Y_ADD,A
            AJMP CHOOSE_SHUZI_END

CHOOSE_LEFT_SHUZI:
            SETB CS1
            CLR CS2


CHOOSE_SHUZI_END:
	     SETB F_COMMAND                                                  ;30H=X (0-6)  31H=Y(0-63-16)
             MOV COMMAND,#0C0H   ;START = 0
             LCALL LCD_COMMAND



             MOV R7,#2

             MOV A,#40H   ; Y
             ADD A,Y_ADD
             MOV Y_ADD,A
         			 ;40+Y


             MOV A,#0B8H
             ADD A,X_ADD   ;B8+X
             MOV X_ADD,A   ;A>>30H
OUTSHUZI_0:
	     SETB F_COMMAND
             MOV COMMAND,Y_ADD  ;
             LCALL LCD_COMMAND

	     SETB F_COMMAND
             MOV COMMAND,X_ADD  ; X+1
             LCALL LCD_COMMAND

             MOV R5,#08
OUTSHUZI_1:
             MOV A,#00H
             MOVC A,@A+DPTR
	     CLR F_COMMAND
             MOV COMMAND,A  ;
             LCALL LCD_COMMAND

             LCALL DELAY_10US

             INC DPTR

             DJNZ R5,OUTSHUZI_1

             INC X_ADD
             DJNZ R7,OUTSHUZI_0
         CLR CS1
         CLR CS2

            RET



;***************2分频下的1MS 延时*****************************
DELAY_1MS:
        NOP
        MOV R6,#0E3H
        MOV R7,#01H
DELAY_1MS_1:
		NOP
		NOP
	DJNZ R6,DELAY_1MS_1
                NOP
                NOP
        DJNZ R7,DELAY_1MS_1
	     	NOP
		NOP
                RET

DELAY_S:
        NOP
        MOV R6,#00H
        MOV R7,#00H
DELAY_S_1:
		NOP
		NOP
	DJNZ R6,DELAY_S_1
                NOP
                NOP
        DJNZ R7,DELAY_S_1
	     	NOP
		NOP
                RET


DELAY_10US:
        NOP
        NOP
        NOP
        NOP
        NOP
        NOP
        NOP
        NOP
        RET






SETUP_PRO:

;******************实验区****************************************
;        MOV R1,#XmtDat
;        MOV @R1,#66H
;        INC R1
;        MOV @R1,#77H
;        INC R1
;        MOV @R1,#88H
;        INC R1
;        MOV @R1,#99H
;        MOV SlvAdr,#EEPROM 	;取器件地址
;	MOV ByteCnt,#04H 	;将这4个数据写入24WC02 中
;	MOV SubAdr,#00H
;        NOP
;        NOP
;	LCALL SendData
;
;	MOV SlvAdr,#EEPROM 	;取器件地址
;	MOV ByteCnt,#01H 	;设接收的数据长度为8 个字节
;	MOV SubAdr,#03H 	        ;24wc02中数据存放的单元地址
;	LCALL RcvData 		;
;****************************************************************

        ;CLR ET0
        CLR RST


        SETB RS1                  ;从这里开始使用第2区
        CLR RS0

        LCALL DELAY_1MS
        SETB RST

        SETB F_COMMAND
        MOV COMMAND,#03EH
        LCALL LCD_COMMAND

        SETB F_COMMAND
        MOV COMMAND,#0C0H
        LCALL LCD_COMMAND

        SETB F_COMMAND
        MOV COMMAND,#03FH
        LCALL LCD_COMMAND

SETUP_MAIN:
        NOP
        LCALL CLRLCD                    ;清屏
        LCALL DISPLAY_CHOOSE            ;显示主画面:选择1、初始化    2、更改
;******************循环等待选择1或2********************************************
SETUP_LOOP1:
        NOP
        NOP
        JNB F_KEY_VALUE,SETUP_LOOP1
        CLR F_KEY_VALUE

        MOV A,KEY_NO
        NOP
        NOP
        CJNE A,#01,SETUP_CHOOSE_2
        NOP
        NOP
        LJMP SETUP_CHUSHIHUA
SETUP_CHOOSE_2:
        CJNE A,#02,SETUP_CHOOSE_3       ;       如果按键错误,不于理睬
        NOP
        NOP
        AJMP SETUP_GENGGAI
 SETUP_CHOOSE_3:

        CJNE A,#03,SETUP_CHOOSE_4
        NOP
        NOP
        LJMP SETUP_CHECK
SETUP_CHOOSE_4:
        CJNE A,#0CH,SETUP_LOOP1
        LCALL CLRLCD
        LCALL DIS_EXIT

SETUP_CHOOSE_LOOP:
        NOP
        NOP
        JNB F_KEY_VALUE,SETUP_CHOOSE_LOOP           ;检测按键
        CLR F_KEY_VALUE
        MOV A,KEY_NO
        CJNE A,#0FH,SETUP_CHOOSE_LOOP1
        NOP
        NOP
        LJMP SYS_START

SETUP_CHOOSE_LOOP1:
        CJNE A,#0CH,SETUP_CHOOSE_LOOP
        NOP
        NOP
        LJMP SETUP_MAIN





;****************选择了2之后 的工作*******************************
SETUP_GENGGAI:


        MOV KEY_GESHU,#0                ;初始化各个使用的RAM
        MOV R0,#KEY_AERA
        CLR F_GENGGAI_STEP0
        MOV OLD_Y_ADD,#0

        LCALL CLRLCD                    ;清屏
        LCALL DIPLAY_GENGGAI            ;显示“请选择想要更改的台号:”
SETUP_LOOP4:
        NOP
        NOP
        JNB F_KEY_VALUE,SETUP_LOOP4           ;检测按键
        CLR F_KEY_VALUE

        MOV A,KEY_NO
        CJNE A,#0CH,SETUP_LOOP4_1

        MOV KEY_GESHU,#0
        MOV R0,#KEY_AERA
        CLR F_GENGGAI_STEP0
        MOV OLD_Y_ADD,#0

        CLR RS0
        CLR RS1
        LJMP SETUP_MAIN                 ;检测到C就回到上一层

SETUP_LOOP4_1:
        CJNE A,#0FH,TO_NOT_END_2     ;F:结束标志
        MOV OLD_Y_ADD,#0

        MOV A,KEY_GESHU
        CJNE A,#02,SETUP_LOOP3          ;有2个数字的处理。

        MOV R1,#KEY_AERA
        MOV A,@R1
        SWAP A
        INC R1
        ORL A,@R1
        CJNE A,#0,SETUP_LOO4_2
        NOP
        NOP
        LJMP SETUP_GENGGAI
SETUP_LOO4_2:
        LCALL  BCDH_1BYTE
        LJMP SETUP_LOOP5 		;

TO_NOT_END_2:
        LJMP NOT_END_2

SETUP_LOOP3:
        CJNE A,#01,SETUP_GENGGAI        ;只有一个数字的处理,就自行前面补0

        INC KEY_GESHU
        INC R0                          ;把指针的也加1
        MOV R1,#KEY_AERA
        MOV A,@R1
        CJNE A,#0,SETUP_LOOP3_0
        NOP
        NOP
        LJMP SETUP_GENGGAI

SETUP_LOOP3_0:
        MOV @R1,#0
        INC R1
        MOV @R1,A                       ;

SETUP_LOOP5:
        DEC A                   ;没有0号,只有1号
        MOV SubAdr,A
	MOV SlvAdr,#EEPROM 	;取器件地址
	MOV ByteCnt,#01H 	;接收的数据长度为1个字节
        NOP
        NOP
	LCALL RcvData



        LCALL CLRLCD                    ;清屏

        MOV A,RcvDat
        LCALL HBCD
        MOV RcvDat,A

        MOV R1,#RcvDat
        MOV A,@R1
        ANL A,#0F0H
        SWAP A
        MOV R2,A

        MOV R1,#RcvDat
        MOV A,@R1
        ANL A,#0FH
        LCALL KEY_COMPARE
        MOV Y_ADD,#120
        MOV X_ADD,#3                    ;低位
        LCALL OUTSHUZI

        MOV A,R2
        LCALL KEY_COMPARE
        MOV Y_ADD,#112
        MOV X_ADD,#3                    ;高位
        LCALL OUTSHUZI

        LCALL DISPLAY_GENGGAI_1         ;显示:X号台原来呼      ,现在改为:

        MOV A,R0
        DEC A
        MOV R1,A
        MOV A,@R1
        LCALL KEY_COMPARE
        MOV X_ADD,#3
        MOV Y_ADD,#8
        LCALL OUTSHUZI
        DEC R1
        MOV A,@R1
        CJNE A,#00,SETUP_LOOP6
        NOP
        NOP
        LJMP SETUP_LOOP8

SETUP_LOOP6:
        ;MOV A,@R4
        LCALL KEY_COMPARE
        MOV X_ADD,#3
        MOV Y_ADD,#0
        LCALL OUTSHUZI

SETUP_LOOP8:
        MOV R1,#OLD_Y_ADD                       ;放在高的RAM中,只能采用寄存器间接寻址
        MOV @R1,#88                             ;更改开始的Y的地址
        SETB F_GENGGAI_STEP0                    ;更改的第一个步骤完成的标志

;*******************等待输入要更改的呼机号*********************
SETUP_LOOP7:
        NOP                                       ;此处开始循环等待按键
        NOP
        JNB F_KEY_VALUE,SETUP_LOOP7
        CLR F_KEY_VALUE

        MOV A,KEY_NO
        CJNE A,#0FH,TO_NOT_END_3     ;F:结束标志
        MOV A,KEY_GESHU                         ;没有其他的按键,只有一个F,就返回上一级
        CJNE A,#02,SETUP_LOOP7_1                ;前面有了两个数字了
        MOV KEY_GESHU,#0
        MOV R0,#KEY_AERA
        CLR F_GENGGAI_STEP0
        MOV OLD_Y_ADD,#0                       ;

        NOP
        NOP
        LJMP  SETUP_GENGGAI

SETUP_LOOP7_1:

        MOV A,KEY_GESHU
        CJNE A,#03,SETUP_LOOP9          ;只有一个数字的处理,就自行前面补0

        LCALL CLRLCD                    ;清屏

        MOV R1,#KEY_AERA+2
        MOV A,@R1
        LCALL KEY_COMPARE
        MOV X_ADD,#3
        MOV Y_ADD,#112
        LCALL OUTSHUZI
        LJMP SETUP_LOOPA
;******************************************************
TO_NOT_END_3:
         CJNE A,#0CH,TO_NOT_END_31    ; 清除按键的处理

        MOV A,KEY_GESHU                         ;没有其他的按键,只有一个F,就返回上一级
        CJNE A,#02,TO_NOT_END_4                ;前面有了两个数字了
        MOV KEY_GESHU,#0
        MOV R0,#KEY_AERA
        CLR F_GENGGAI_STEP0
        MOV OLD_Y_ADD,#0                       ;如果只有一个C,就回到上一层
        LJMP  SETUP_GENGGAI
TO_NOT_END_4:
         MOV X_ADD,#6
         MOV Y_ADD,OLD_Y_ADD
         MOV A,OLD_Y_ADD
         SUBB A,#8
         MOV OLD_Y_ADD,A
         MOV DPTR,#BLANK8
         LCALL OUTSHUZI
         DEC KEY_GESHU
         DEC R0
         LJMP SETUP_LOOP7

TO_NOT_END_31:
         CJNE A,#10,TO_NOT_END_32
TO_NOT_END_32:
         JNC SETUP_LOOP7


        LJMP NOT_END_2

TO_SETUP_LOOP_WRONG:
        LJMP SETUP_LOOP_WRONG
;*******************************************************
SETUP_LOOP9:
        CJNE A,#04,TO_SETUP_LOOP_WRONG

        LCALL CLRLCD                    ;清屏
        MOV R1,#KEY_AERA+2
        MOV A,@R1
        LCALL KEY_COMPARE
        MOV X_ADD,#3
        MOV Y_ADD,#112
        LCALL OUTSHUZI

        MOV R1,#KEY_AERA+3
        MOV A,@R1
        LCALL KEY_COMPARE
        MOV X_ADD,#3
        MOV Y_ADD,#120
        LCALL OUTSHUZI

SETUP_LOOPA:
        MOV R1,#KEY_AERA+1
        MOV A,@R1
        LCALL KEY_COMPARE
        MOV X_ADD,#3
        MOV Y_ADD,#8
        LCALL OUTSHUZI

        MOV R1,#KEY_AERA
        MOV A,@R1
        CJNE A,#0,SETUP_LOOPB

⌨️ 快捷键说明

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