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

📄 lcd89527.asm

📁 餐饮呼叫系统的汇编源代码
💻 ASM
📖 第 1 页 / 共 5 页
字号:
        MOV X_ADD,#6
        MOV Y_ADD,#16
        MOV DPH,DPH_BAK
        MOV DPL,DPL_BAK
        LCALL OUTSHUZI
;***************************************************************
        INC R0
        DJNZ R3,DIS_NEXT_4
        LJMP DIS_REFRESH_END
;********************************************************************
DIS_NEXT_4:

        MOV X_ADD,#6                    ;6
        MOV Y_ADD,#77
        MOV DPTR,#SHUZI_6
        LCALL OUTSHUZI

        MOV X_ADD,#6                    ;、
        MOV Y_ADD,#85
        MOV DPTR,#ZIMU_DUNHAO
        LCALL OUTSHUZI


        MOV X_ADD,#6                    ;台
        MOV Y_ADD,#112
        MOV DPTR,#HZ_TAI_2
        LCALL OUTHZ16

        MOV SHUZI,@R0
        LCALL SHUZI_PRO                 ;计算出低位的DPTR,高位的放在DPH_BAK,和DPL_BAK中

        MOV X_ADD,#6
        MOV Y_ADD,#104
        LCALL OUTSHUZI

        MOV X_ADD,#6
        MOV Y_ADD,#96
        MOV DPH,DPH_BAK
        MOV DPL,DPL_BAK
        LCALL OUTSHUZI
        AJMP DIS_REFRESH_END

DIS_REFRESH_OTHER:              ;没有要显示的就显示其他的画面
        LCALL DISPLAY_ALL
        NOP
DIS_REFRESH_END:
       RET
;*********************************************************
;计算出低位的DPTR,高位的放在DPH_BAK,和DPL_BAK中
;输入的数字已经是10进制了
;*********************************************************
SHUZI_PRO:
        MOV A,SHUZI
        ANL A,#0F0H
        SWAP A

SHUZI_PRO_A:
        CJNE A,#0,SHUZI_PRO_0
        MOV DPTR,#SHUZI_0
        LJMP SHUZI_PRO_NEXT
SHUZI_PRO_0:
        CJNE A,#1,SHUZI_PRO_1
        MOV DPTR,#SHUZI_1
        LJMP SHUZI_PRO_NEXT
SHUZI_PRO_1:
        CJNE A,#2,SHUZI_PRO_2
        MOV DPTR,#SHUZI_2
        LJMP SHUZI_PRO_NEXT
SHUZI_PRO_2:
        CJNE A,#3,SHUZI_PRO_3
        MOV DPTR,#SHUZI_3
        LJMP SHUZI_PRO_NEXT
SHUZI_PRO_3:
        CJNE A,#4,SHUZI_PRO_4
        MOV DPTR,#SHUZI_4
        LJMP SHUZI_PRO_NEXT
SHUZI_PRO_4:
        CJNE A,#5,SHUZI_PRO_5
        MOV DPTR,#SHUZI_5
        LJMP SHUZI_PRO_NEXT
SHUZI_PRO_5:
        CJNE A,#6,SHUZI_PRO_6
        MOV DPTR,#SHUZI_6
        LJMP SHUZI_PRO_NEXT
SHUZI_PRO_6:
        CJNE A,#7,SHUZI_PRO_7
        MOV DPTR,#SHUZI_7
        LJMP SHUZI_PRO_NEXT
SHUZI_PRO_7:
        CJNE A,#8,SHUZI_PRO_8
        MOV DPTR,#SHUZI_8
        LJMP SHUZI_PRO_NEXT
SHUZI_PRO_8:
        CJNE A,#9,SHUZI_PRO_NEXT
        MOV DPTR,#SHUZI_9
        LJMP SHUZI_PRO_NEXT
SHUZI_PRO_NEXT:
        JB F_HIGH,SHUZI_PRO_RET
        SETB F_HIGH
        MOV DPL_BAK,DPL
        MOV DPH_BAK,DPH
        MOV A,SHUZI
        ANL A,#0FH
        LJMP SHUZI_PRO_A

SHUZI_PRO_RET:
        CLR F_HIGH
        RET




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

R_MOV:
      MOV R3,PAIDUI
      DEC R3
      MOV A,R3
      CJNE A,#0,R_MOV_2
      MOV PAIDUI,#0
      MOV GET_BUFF,#0
      LJMP R_MOV_END

R_MOV_2:


      MOV R0,#GET_BUFF
      MOV R1,#GET_BUFF+1

R_MOV_0:
      MOV A,@R1
      MOV @R0,A
      MOV @R1,#0
      INC R0
      INC R1
      DJNZ R3,R_MOV_0

      MOV R0,#TIMER_BUFF
      MOV R1,#TIMER_BUFF+1
      MOV R3,PAIDUI
      DEC R3
R_MOV_1:
      MOV A,@R1
      MOV @R0,A
      MOV @R1,#0
      INC R0
      INC R1
      DJNZ R3,R_MOV_1

      DEC PAIDUI                ;排队的个数少了一个
R_MOV_END:
      SETB F_MOVED
      RET



;******************40MS中断一次监测按键***********************
;             使用了第一区
;************************************************************
TIMER0_INT:

	PUSH A
	PUSH PSW

        CLR RS1                 ; 使用了第一区
        SETB RS0


        NOP
        MOV A,PAIDUI
        CJNE A,#00,TIMER0_INT_1
        NOP
        NOP
        AJMP TIMER0_INT_0
TIMER0_INT_1:
        NOP
        NOP
        LCALL MOV_PRO


TIMER0_INT_0:                           ;2秒钟刷新一次的记时
        JB F_REFRESH,TIMER0_INT_NEXT         ;在刷新完之后,CLR F_REFRESH,重新开始记时
        NOP
        NOP
        DJNZ TIMER_2S_0,TIMER0_INT_NEXT
        SETB F_REFRESH
        MOV TIMER_2S_0,#30              ;
TIMER0_INT_NEXT:

        CLR RS1
        CLR RS0




;***************中断中检测按键************************
KEY_TEST:
	CLR P1.4                      ;REM ON 02.07.20
;        CLR P1.7                      ;ADDED  ON 02.7.20

	MOV A,P1
 	ANL A,#0FH
	CJNE A,#0FH,KEY_IN
        MOV A,KEY_NO
        ADD A,#04H
        MOV KEY_NO,A

	CLR P1.5                      ;REM ON 02.07.20
;        CLR P1.6                      ;ADDED  ON 02.7.20

	MOV A,P1
	ANL A,#0FH
	CJNE A,#0FH,KEY_IN
        MOV A,KEY_NO
        ADD A,#04H
        MOV KEY_NO,A

	CLR P1.6                      ;REM ON 02.07.20
;        CLR P1.5                      ;ADDED  ON 02.7.20

	MOV A,P1
	ANL A,#0FH
	CJNE A,#0FH,KEY_IN
        MOV A,KEY_NO
        ADD A,#04H
        MOV KEY_NO,A

	CLR P1.7                      ;REM ON 02.07.20
;        CLR P1.4                      ;ADDED  ON 02.7.20

	MOV A,P1
	ANL A,#0FH
	CJNE A,#0FH,KEY_IN
        NOP
        NOP
        JNB F_KEY_FOUND,NO_KEY
        NOP
        NOP
        MOV A,KEY_LAST_TIME
        CJNE A,#02H,COMPARE_TIME         ;长度是否够长
COMPARE_TIME:
        JC NOT_LONG_ENOUGH
        SETB F_KEY_VALUE
        MOV A,OLD_KEY_NO           ;取出备份


        LCALL LOAD_KEY             ;重新分配按键的值

        MOV KEY_NO,A
        AJMP KEY_OUT

NO_KEY:
NOT_LONG_ENOUGH:
        MOV KEY_NO,#00H                 ;NO KEY!

KEY_OUT:

        CLR F_KEY_FOUND
        MOV KEY_LAST_TIME,#00H
        MOV OLD_KEY_NO,#00H

	NOP
	NOP
	LJMP KEY_TEST_RETI

KEY_IN:
	MOV R3,#00H
        SWAP A                 ;REM ON 02.7.20
KEY_IN_0:
	RLC A                    ;REM ON 02.7.20
 ;       RRC A                    ;ADDED  ON 02.7.20
	JNC KEY_FOUND		;找到按键
	INC R3
	INC KEY_NO
	CJNE R3,#04H,KEY_IN_0
	NOP
	NOP
	LJMP KEY_TEST_RETI

KEY_FOUND:
        MOV A,OLD_KEY_NO
        CJNE A,KEY_NO,NEW_KEY_IN
        INC KEY_LAST_TIME
        MOV KEY_NO,#00H
        NOP
        NOP
        AJMP KEY_IN_1
NEW_KEY_IN:
        MOV OLD_KEY_NO,KEY_NO           ;备份
        MOV KEY_NO,#00H
        MOV KEY_LAST_TIME,#00H          ;按键计时
KEY_IN_1:
	SETB F_KEY_FOUND

KEY_TEST_RETI:
        MOV P1,#0FFH

        MOV TH0,#01H
        MOV TL0,#01H           ;40MS中断一次
	POP PSW
	POP A

	RETI


;*******************************************************
MOV_PRO:

          MOV R0,#TIMER_BUFF
          MOV R3,PAIDUI         ;PAIDUI 中是现在排队的个数

TIMER_PRO_0:                    ;排队的所有的时间减1
          MOV A,@R0
          DEC A
          MOV @R0,A
          INC R0
          DJNZ R3,TIMER_PRO_0
          MOV R0,#TIMER_BUFF
          MOV A,@R0
          CJNE A,#0,TIMER_PRO_END
;********;如果第一的时间已经到了,就启动移动***************
          SETB F_MOV


TIMER_PRO_END:
          RET



;*********************************************************************
LOAD_KEY:             ;重新分配按键的值

          MOV DPTR,#RIGHT_TABLE
          MOVC A,@A+DPTR
          RET

RIGHT_TABLE:
DB 3,2,1,0,7,6,5,4,0AH,0BH,9,8,0FH,0CH,0EH,0DH



          RET

;*********************************************************************
DISPLAY_ALL:
        MOV X_ADD,#01
        MOV Y_ADD,#016
        MOV DPTR,#HZ_GUANG
        LCALL OUTHZ16


        MOV X_ADD,#01
        MOV Y_ADD,#32
        MOV DPTR,#HZ_ZHOU
        LCALL OUTHZ16

        MOV X_ADD,#01
        MOV Y_ADD,#48
        MOV DPTR,#HZ_SHI
        LCALL OUTHZ16


        MOV X_ADD,#01
        MOV Y_ADD,#064
        MOV DPTR,#HZ_LI
        LCALL OUTHZ16

        MOV X_ADD,#01
        MOV Y_ADD,#080
        MOV DPTR,#HZ_DE
        LCALL OUTHZ16


        MOV X_ADD,#01
        MOV Y_ADD,#096
        MOV DPTR,#HZ_TAI
        LCALL OUTHZ16


        MOV X_ADD,#04
        MOV Y_ADD,#0
        MOV DPTR,#HZ_DIAN
        LCALL OUTHZ16


        MOV X_ADD,#04
        MOV Y_ADD,#016
        MOV DPTR,#HZ_ZI
        LCALL OUTHZ16

        MOV X_ADD,#04
        MOV Y_ADD,#032
        MOV DPTR,#HZ_JI
        LCALL OUTHZ16


        MOV X_ADD,#04
        MOV Y_ADD,#048
        MOV DPTR,#HZ_SHU
        LCALL OUTHZ16

        MOV X_ADD,#04
        MOV Y_ADD,#064
        MOV DPTR,#HZ_YOU
        LCALL OUTHZ16


        MOV X_ADD,#04
        MOV Y_ADD,#080
        MOV DPTR,#HZ_XIAN
        LCALL OUTHZ16

        MOV X_ADD,#04
        MOV Y_ADD,#096
        MOV DPTR,#HZ_GONG
        LCALL OUTHZ16


        MOV X_ADD,#04
        MOV Y_ADD,#0112
        MOV DPTR,#HZ_SI
        LCALL OUTHZ16

       RET








;***************LCD_C_D********************************************************
LCD_COMMAND:
        JNB F_COMMAND,LCD_COMMAND_0
        CLR DI                    ;=0,是指令;   =1,数据
        AJMP LCD_COMMAND_1
LCD_COMMAND_0:
        SETB DI
LCD_COMMAND_1:
        CLR E
        CLR RW
        MOV P0,COMMAND
        NOP
        NOP
        SETB E
        NOP
        NOP
        NOP
        NOP
        CLR E
        SETB RW
        SETB DI

        LCALL DELAY_10US
        LCALL DELAY_10US
        LCALL DELAY_10US
        LCALL DELAY_10US

        RET
;***********************************************************************
;             使用了R2\R5


CLRLCD:
        SETB CS1
        SETB CS2

        SETB F_COMMAND
        MOV COMMAND,#0C0H       ;显示从0开始
        LCALL LCD_COMMAND


        MOV R2,#0B8H
CLRLCD_0:
        MOV COMMAND,R2
        SETB F_COMMAND
        LCALL LCD_COMMAND

        SETB F_COMMAND
        MOV COMMAND,#040H
        LCALL LCD_COMMAND


        MOV R5,#64
CLRLCD_2:
        CLR F_COMMAND
        MOV COMMAND,#0H                         ;0清屏,F是黑屏
        LCALL LCD_COMMAND
        DJNZ R5,CLRLCD_2


        INC R2
        MOV A,R2
        CJNE A,#0C0H,CLRLCD_0
        CLR CS1
        CLR CS2
        RET

;************************************************************
;          显示16*16汉字子程序。
;输入X:0--7,每增加1,就向下移动爸爸内半个字的位置(8个点)
;Y:0--63,   <32,左半边,>32:右半边
;************************************************************


OUTHZ16:

            MOV A,Y_ADD
            CJNE A,#064,CHOOSE_HALF     ;左右两半屏的
CHOOSE_HALF:
            JC CHOOSE_LEFT
            CLR CS1
            SETB CS2
            SUBB A,#64
            MOV Y_ADD,A
            LJMP CHOOSE_END


CHOOSE_LEFT:
            SETB CS1
            CLR CS2


CHOOSE_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:
	     SETB F_COMMAND

⌨️ 快捷键说明

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