?? 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的字母和數(shù)字 使用了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:
;******************實驗區(qū)****************************************
; 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個數(shù)據(jù)寫入24WC02 中
; MOV SubAdr,#00H
; NOP
; NOP
; LCALL SendData
;
; MOV SlvAdr,#EEPROM ;取器件地址
; MOV ByteCnt,#01H ;設接收的數(shù)據(jù)長度為8 個字節(jié)
; MOV SubAdr,#03H ;24wc02中數(shù)據(jù)存放的單元地址
; LCALL RcvData ;
;****************************************************************
;CLR ET0
CLR RST
SETB RS1 ;從這里開始使用第2區(qū)
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、更改
;******************循環(huán)等待選擇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個數(shù)字的處理。
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 ;只有一個數(shù)字的處理,就自行前面補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 ;接收的數(shù)據(jù)長度為1個字節(jié)
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號臺原來呼 ,現(xiàn)在改為:
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 ;此處開始循環(huán)等待按鍵
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 ;前面有了兩個數(shù)字了
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 ;只有一個數(shù)字的處理,就自行前面補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 ;前面有了兩個數(shù)字了
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 + -