📄 lcd89527.asm
字号:
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 + -