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