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

📄 lcd89527.asm

📁 餐饮呼叫系统的汇编源代码
💻 ASM
📖 第 1 页 / 共 5 页
字号:
        LJMP SETUP_LOOPC
SETUP_LOOPB:
        LCALL KEY_COMPARE
        MOV X_ADD,#3
        MOV Y_ADD,#0
        LCALL OUTSHUZI


SETUP_LOOPC:
        LCALL DISPLAY_GENGGAI_2                 ;XX号台现在呼:#YY

        MOV R1,#KEY_AERA
        MOV A,@R1
        INC R1
        SWAP A
        ORL A,@R1
        LCALL BCDH_1BYTE
        DEC A
	MOV SubAdr,A

        MOV A,KEY_GESHU
        CJNE A,#3,SETUP_LOOPE
        MOV R1,#KEY_AERA+2
        MOV A,@R1
        AJMP SETUP_LOOPF
SETUP_LOOPE:
        MOV R1,#KEY_AERA+2
        MOV A,@R1
        INC R1
        SWAP A
        ORL A,@R1
        LCALL BCDH_1BYTE
SETUP_LOOPF:
        ;DEC A
        MOV XmtDat,A
        MOV SlvAdr,#EEPROM 	;取器件地址
	MOV ByteCnt,#01H 	;将这1个数据写入24WC02 中
        NOP
        NOP
	LCALL SendData

        MOV R0,#KEY_AERA
        MOV KEY_GESHU,#0
        CLR F_GENGGAI_STEP0
        MOV R1,#OLD_Y_ADD                       ;放在高的RAM中,只能采用寄存器间接寻址
        MOV @R1,#0

SETUP_LOOPD:
        NOP
        NOP
        JNB F_KEY_VALUE,SETUP_LOOPD
        CLR F_KEY_VALUE
        MOV A,KEY_NO
        CJNE A,#0FH,SETUP_LOOPD
        NOP
        NOP
        LJMP SETUP_GENGGAI





SETUP_LOOP_WRONG:                               ;数字输入错误,就把错误部分清掉。
        NOP
        MOV X_ADD,#6                    ;空白
        MOV Y_ADD,#96
        MOV DPTR,#BLANK16
        LCALL OUTHZ16
        MOV X_ADD,#6                    ;空白
        MOV Y_ADD,#112
        MOV DPTR,#BLANK16
        LCALL OUTHZ16



        MOV R0,#KEY_AERA+2
        MOV KEY_GESHU,#2
        SETB F_GENGGAI_STEP0
        MOV OLD_Y_ADD,#88

        LJMP SETUP_LOOP7













NOT_END_2:
        MOV @R0,KEY_NO                          ;按键存放,第2区R0是作为按键的输入存放的指针的
        INC KEY_GESHU
        INC R0
        MOV A,KEY_NO
        LCALL KEY_COMPARE

        MOV A,OLD_Y_ADD
        ADD A,#8
        MOV OLD_Y_ADD,A
        MOV Y_ADD,A
        MOV X_ADD,#6                    ;
        LCALL OUTSHUZI

        JB F_GENGGAI_STEP0,NOT_END_2_1
        NOP                                     ;此处加入关于个数的判断
        MOV A,KEY_GESHU
        CJNE A,#3,NOT_END_2_0
NOT_END_2_0:
        JC NOT_END_2_2
        NOP
        NOP
        LJMP SETUP_GENGGAI                      ;如果个数大于2,说明输入错误,重新显示画面
NOT_END_2_2:
        LJMP SETUP_LOOP4
;*******两个阶段不同的处理方法。************************
NOT_END_2_1:
        NOP                                      ;此处加入关于个数的判断
        MOV A,KEY_GESHU
        CJNE A,#5,NOT_END_2_3
NOT_END_2_3:
        JC NOT_END_2_4
        NOP
        NOP
        LJMP SETUP_LOOP_WRONG

NOT_END_2_4:
       LJMP  SETUP_LOOP7



;*******************进行初始化设置的程序*******************************
SETUP_CHUSHIHUA:

        LCALL CLRLCD                    ;清屏
        LCALL DISPLAY_CHUSHIHUA

        MOV R0,#KEY_AERA
        MOV KEY_GESHU,#0
        MOV OLD_Y_ADD,#32
        MOV TAI_GESHU,#0
        MOV SHUZI_GESHU,#0

CHUSHIHUA_LOOP0:
        NOP
        NOP
        JNB F_KEY_VALUE,CHUSHIHUA_LOOP0
        CLR F_KEY_VALUE

        CJNE A,#0FH,TO_CHUSHIHUA_DISKEY_0

        MOV A,KEY_GESHU
        CJNE A,#01,CHUSHIHUA_LOOP1              ;输进来的数字只有1个

        MOV R1,#KEY_AERA
        MOV A,@R1
        CJNE A,#0,CHUSHIHUA_LOOP2              ;不能单个为0
        NOP
        NOP
        LJMP SETUP_CHUSHIHUA
CHUSHIHUA_LOOP2:
        MOV @R1,#0                              ;前面自动补0
        INC R1
        MOV @R1,A
        INC KEY_GESHU
        AJMP CHUSHIHUA_LOOP4




CHUSHIHUA_LOOP1:
        CJNE A,#02,CHUSHIHUA_LOOP3
        MOV R1,#KEY_AERA
        MOV A,@R1
        SWAP A
        INC R1
        ORL A,@R1
        CJNE A,#0,CHUSHIHUA_LOOP1_0                    ;不能为0
        NOP
        NOP
        LJMP SETUP_CHUSHIHUA

CHUSHIHUA_LOOP1_0:
        LCALL  BCDH_1BYTE                       ;转化成16进制
CHUSHIHUA_LOOP4:
        MOV CALL_BAK,A                  ;把公共的CALL机号码保存起来
        AJMP CHUSHIHUA_LOOP5


CHUSHIHUA_LOOP3:                        ;如果只有一个F,就返回
         NOP
         NOP
         LJMP CHUSHIHUA_LOOP0

;*******输入CALL机号码时,检测是否有清除键*****************************
TO_CHUSHIHUA_DISKEY_0:
        MOV A,KEY_GESHU
        CJNE A,#0,TO_CHUSHIHUA_DISKEY_3

        MOV A,KEY_NO
        CJNE A,#0CH,TO_CHUSHIHUA_DISKEY_2
        NOP                                     ;在没有任何按键只有清除时,就回到上一层
        NOP
        LJMP SETUP_MAIN
TO_CHUSHIHUA_DISKEY_2:
        CJNE A,#10,TO_CHUSHIHUA_DISKEY_21       ;<10
TO_CHUSHIHUA_DISKEY_21:
        JNC CHUSHIHUA_LOOP0


        NOP                                     ;不是清除,就去显示
        NOP
        LJMP CHUSHIHUA_DISKEY_0

TO_CHUSHIHUA_DISKEY_3:
        MOV A,KEY_NO
        CJNE A,#0CH,TO_CHUSHIHUA_DISKEY_4
        MOV X_ADD,#6                            ;在有按键的情况下清除掉显示
        MOV A,OLD_Y_ADD
        ;SUBB A,#8
        ;MOV OLD_Y_ADD,A
        MOV Y_ADD,A
        MOV DPTR,#BLANK8
        LCALL OUTSHUZI
        DEC KEY_GESHU
        DEC R0                          ;按键数据存放的指针
        MOV A,OLD_Y_ADD
        SUBB A,#08
        MOV OLD_Y_ADD,A
        LJMP CHUSHIHUA_LOOP0

TO_CHUSHIHUA_DISKEY_4:

        MOV A,KEY_NO
        CJNE A,#10,TO_CHUSHIHUA_DISKEY_5
TO_CHUSHIHUA_DISKEY_5:
        JC TO_CHUSHIHUA_DISKEY_6
        LJMP   CHUSHIHUA_LOOP0
TO_CHUSHIHUA_DISKEY_6:
        LJMP CHUSHIHUA_DISKEY_0




;**************************************************************
CHUSHIHUA_LOOP5:
        NOP
        LCALL CLRLCD                    ;清屏
        MOV R1,#KEY_AERA+1
        MOV A,@R1
        LCALL KEY_COMPARE
        MOV X_ADD,#0
        MOV Y_ADD,#24
        LCALL OUTSHUZI
        DEC R1
        MOV A,@R1
        CJNE A,#0,CHUSHIHUA_LOOP5_1
        MOV X_ADD,#0
        MOV Y_ADD,#16
        AJMP CHUSHIHUA_LOOP5_2
CHUSHIHUA_LOOP5_1:
        LCALL KEY_COMPARE
        MOV X_ADD,#0
        MOV Y_ADD,#16
        LCALL OUTSHUZI

        MOV X_ADD,#0
        MOV Y_ADD,#8
CHUSHIHUA_LOOP5_2:

        MOV DPTR,#ZIMU_NO           ;#
        LCALL OUTSHUZI
        NOP
        LCALL CHUSHIHUA_DISLCD_0        ;

CHUSHIHUA_LOOP7:
        MOV R0,#KEY_AERA              ;上次输入的不留
        MOV KEY_GESHU,#0
        MOV OLD_Y_ADD,#0
        MOV OLD_X_ADD,#3
;*************************循环等待输入台号*********************
CHUSHIHUA_LOOP6:
        NOP
        NOP
        JNB F_KEY_VALUE,CHUSHIHUA_LOOP6
        CLR F_KEY_VALUE

        MOV A,KEY_NO
        CJNE A,#0FH,TO_CHUSHIHUA_DISKEY_1
        MOV A,KEY_GESHU
        CJNE A,#0,CHUSHIHUA_LOOP6_1
        NOP
        NOP
        LJMP SETUP_CHUSHIHUA                    ;如果只是检测到一个F,就回到上一级

;****************************************************
TO_CHUSHIHUA_DISKEY_1:
        NOP
        NOP
        LJMP CHUSHIHUA_DISKEY_1
;****************************************************

CHUSHIHUA_LOOP6_1:                              ;检测到正常的F结束
             MOV R0,#KEY_AERA
             MOV R1,#SAVE_BUFF

CHUSHIHUA_LOOP6_3:
             MOV A,@R0
             CJNE A,#0BH,CHUSHIHUA_LOOP6_2

             INC TAI_GESHU                      ;统计台号的个数

             CJNE R4,#1,CHUSHIHUA_LOOP6_4
             DEC R0
             MOV A,@R0
             MOV @R1,A

             AJMP CHUSHIHUA_LOOP6_5
CHUSHIHUA_LOOP6_4:
             CJNE R4,#2,CHUSHIHUA_LOOP6_5
             DEC R0
             DEC R0
             MOV A,@R0
             SWAP A
             INC R0
             ORL A,@R0
             LCALL BCDH_1BYTE
             MOV @R1,A
CHUSHIHUA_LOOP6_5:
             INC R0
             INC R0
             INC R1
             MOV R4,#0

             DJNZ BLANK_GESHU,CHUSHIHUA_LOOP6_3
             NOP                                        ;合并并且移位完毕

             AJMP CHUSHIHUA_LOOP6_END


CHUSHIHUA_LOOP6_2:
             INC R0
             INC R4                             ;R4用来统计两个空格键之间的数字的个数,
             AJMP CHUSHIHUA_LOOP6_3



;*************************************************
;从这里开始显示:#XX机设置完成
;*************************************************
CHUSHIHUA_LOOP6_END:
        NOP
        LCALL CLRLCD                    ;清屏
        MOV A,CALL_BAK
        LCALL HBCD
        MOV R4,A
        ANL A,#0FH
        LCALL KEY_COMPARE
        MOV X_ADD,#3
        MOV Y_ADD,#24
        LCALL OUTSHUZI
        MOV A,R4
        ANL A,#0F0H
        SWAP A
        CJNE A,#0,CHUSHIHUA_LOOP6_END1
        MOV X_ADD,#3
        MOV Y_ADD,#16
        AJMP CHUSHIHUA_LOOP6_END0
CHUSHIHUA_LOOP6_END1:
        LCALL KEY_COMPARE
        MOV X_ADD,#3
        MOV Y_ADD,#16
        LCALL OUTSHUZI

        MOV X_ADD,#3
        MOV Y_ADD,#8

CHUSHIHUA_LOOP6_END0:
        MOV DPTR,#ZIMU_NO           ;#
        LCALL OUTSHUZI
        NOP

        LCALL DIS_CHUSHIHUA_OK
;**********************************
;        写2402
;**********************************
        MOV A,CALL_BAK
        MOV R0,#XmtDat
        MOV @R0,A
        MOV R3,TAI_GESHU
        INC R3
        MOV R1,#SAVE_BUFF
SAVE_ALL:
        MOV SubAdr,@R1
        MOV SlvAdr,#EEPROM 	;取器件地址
	MOV ByteCnt,#01H 	;将这1个数据写入24WC02 中
	LCALL SendData
        INC R1
        DJNZ R3,SAVE_ALL
CHUSHIHUA_LOOP6_END2:
        NOP
        NOP
        JNB F_KEY_VALUE,CHUSHIHUA_LOOP6_END2
        CLR F_KEY_VALUE
        NOP
        NOP
        LJMP SETUP_CHUSHIHUA










;*************************************************************************
;初始化第一步:输入CALL 机号的显示
;*************** **********************************************************
CHUSHIHUA_DISKEY_0:
        MOV A,KEY_GESHU
        CJNE A,#3,CHUSHIHUA_DISKEY_01
CHUSHIHUA_DISKEY_01:
        JC CHUSHIHUA_DISKEY_02
        NOP
        NOP
        LJMP SETUP_CHUSHIHUA

CHUSHIHUA_DISKEY_02:
        MOV @R0,KEY_NO                          ;按键存放,第2区R0是作为按键的输入存放的指针的
        INC KEY_GESHU
        INC R0
        MOV A,KEY_NO
        LCALL KEY_COMPARE

        MOV A,OLD_Y_ADD
        ADD A,#8
        MOV OLD_Y_ADD,A
        MOV Y_ADD,A
        MOV X_ADD,#6                    ;
        LCALL OUTSHUZI

        LJMP CHUSHIHUA_LOOP0

;******************************************************
;初始化第二步:输入台号的显示
;*********************************************************
CHUSHIHUA_DISKEY_1:


        MOV A,KEY_NO
        CJNE A,#0BH,CHUSHIHUA_DISKEY_12
;************************************
;      空格的处理
;************************************
        MOV A,KEY_GESHU
        CJNE A,#0,CHUSHIHUA_DISKEY_11
        NOP
        NOP
        LJMP CHUSHIHUA_LOOP6

CHUSHIHUA_DISKEY_11:
        JNB F_BLANK,CHUSHIHUA_DISKEY_110
        NOP
        NOP
        LJMP CHUSHIHUA_LOOP6

CHUSHIHUA_DISKEY_110:        ;是否是输入一次“空格”键的标志
        SETB F_BLANK

        INC BLANK_GESHU

        MOV @R0,KEY_NO
        INC R0
        INC KEY_GESHU

        MOV A,KEY_GESHU                         ;根据按键的个数来判断是否换行
        CJNE A,#15,CHUSHIHUA_DISKEY_16
        MOV OLD_X_ADD,#06
        MOV OLD_Y_ADD,#0                        ;换行
        AJMP CHUSHIHUA_DISKEY_15
CHUSHIHUA_DISKEY_16:
        CJNE A,#30,CHUSHIHUA_DISKEY_15
        NOP
        SETB F_FULL                             ;FULL

CHUSHIHUA_DISKEY_15:
        MOV A,OLD_Y_ADD
        ADD A,#8
        MOV OLD_Y_ADD,A
        MOV SHUZI_GESHU,#0
        LJMP   CHUSHIHUA_DISKEY_END

;*******************************************
CHUSHIHUA_DISKEY_12:
         CJNE A,#0CH,CHUSHIHUA_NUMBER
         LJMP CHUSHIHUA_CLEAR               ;取判断是否是取消按键



;***************************************
; 数字 按键的处理和显示
;***************************************
CHUSHIHUA_NUMBER:
        JNB F_FULL,CHUSHIHUA_DISKEY_120         ;如果已经满了,就不在接收和处理任何数据按键,除了F
        NOP
        NOP
        LJMP CHUSHIHUA_DISKEY_END

CHUSHIHUA_DISKEY_120:
        MOV A,KEY_NO                            ;除了0--9,和“空格键” 和“取消”,其他的按键不于处理
        CJNE A,#010,CHUSHIHUA_DISKEY_13
CHUSHIHUA_DISKEY_13:
        JC CHUSHIHUA_DISKEY_14
        NOP
        NOP
        LJMP CHUSHIHUA_DISKEY_END               ;

;*************************
CHUSHIHUA_DISKEY_14:
        MOV A,SHUZI_GESHU                       ;检测的数字的个数,不能大于2位
        CJNE A,#02,CHUSHIHUA_DISKEY_140

        LJMP CHUSHIHUA_DISKEY_END

CHUSHIHUA_DISKEY_140:
        CLR F_BLANK                     ;清除空格键的标志

        MOV @R0,KEY_NO
        INC R0
        INC KEY_GESHU                   ;总共的按键的个数
        INC SHUZI_GESHU                 ;两个空格之间的数字的个数

        MOV A,KEY_NO
        LCALL KEY_COMPARE

        MOV A,OL

⌨️ 快捷键说明

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