📄 lcd89527.asm
字号:
MAIN4_251:
CJNE A,#10,MAIN4_26
MAIN4_26:
JC MAIN4_27
NOP
NOP
LJMP MAIN5 ;如果是不为C、0--9的其他数,不于处理
MAIN4_27:
MOV R0,#KEY_AERA+2 ;第3个数字的存储
MOV @R0,KEY_NO
MOV X_ADD,#6 ;显示第3个数据
MOV Y_ADD,#88
LCALL KEY_COMPARE
LCALL OUTSHUZI
MOV X_ADD,#6 ;显示第4光标
MOV Y_ADD,#96
MOV DPTR,#ZIMU_GUANGBIAO
LCALL OUTSHUZI
INC KEY_GESHU
LJMP MAIN5
;*******输入的第4个数据的处理*************
THREE_KEYS:
CJNE A,#03,MAIN4_40 ;
MOV A,KEY_NO
CJNE A,#0CH,MAIN4_39
MOV X_ADD,#6 ;显示第3光标
MOV Y_ADD,#88
MOV DPTR,#ZIMU_GUANGBIAO
LCALL OUTSHUZI
MOV X_ADD,#6 ;清除第4光标
MOV Y_ADD,#96
MOV DPTR,#BLANK8
LCALL OUTSHUZI
DEC KEY_GESHU
LJMP MAIN5
MAIN4_39:
CJNE A,#010,MAIN4_3A
MAIN4_3A:
JNC MAIN4_3B ;0--9
MOV R0,#KEY_AERA+3 ;第4个数字的存储
MOV @R0,KEY_NO
MOV X_ADD,#6 ;显示第4个数据
MOV Y_ADD,#96
LCALL KEY_COMPARE
LCALL OUTSHUZI
INC KEY_GESHU
LJMP MAIN5
MAIN4_3B:
CJNE A,#0FH,MAIN4_3C
MOV R0,#KEY_AERA+2
MOV A,@R0
MOV @R0,#0
INC R0
MOV @R0,A
NOP
NOP
LJMP MAIN4_4OK
MAIN4_3C:
NOP ;其他的按键不处理
LJMP MAIN5
;*****************************************************
MAIN4_40: ;等待的是第5个数据是F或C
MOV A,KEY_NO
CJNE A,#0CH,MAIN4_41
MOV X_ADD,#6 ;清除第4个数据
MOV Y_ADD,#96
MOV DPTR,#ZIMU_GUANGBIAO
LCALL OUTSHUZI
DEC KEY_GESHU
LJMP MAIN5
;****************
MAIN4_41:
CJNE A,#0FH,MAIN4_42
MAIN4_4OK: ;确定之后,查表出对应CALL机号码,然后整理信息
NOP
CLR F_DIS_CALL_2
MOV KEY_GESHU,#0
MOV R0,#KEY_AERA ;收到两个数据就合并
MOV A,@R0
SWAP A
INC R0
ORL A,@R0
LCALL BCDH_1BYTE
DEC R0
MOV @R0,A ;暂时存放的地点
MOV R0,#KEY_AERA+2 ;收到两个数据就合并
MOV A,@R0
SWAP A
INC R0
ORL A,@R0
LCALL BCDH_1BYTE
DEC R0
DEC R0
MOV @R0,A
MOV R0,#OUT_BUFF
MOV @R0,#0 ;暂时的地址时0000,正式的应该是查表之后得到的4位地址
INC R0
MOV @R0,#0
INC R0
MOV @R0,#0
INC R0
MOV @R0,#0
INC R0
MOV R1,#KEY_AERA+1
MOV A,@R1
MOV @R0,A
AJMP MAIN4_43
MAIN4_42:
NOP
NOP
LJMP MAIN5
MAIN4_43:
LCALL CLRLCD
LCALL DIS_CALL_END ;显示呼叫完成的画面
;整理完数据区后,启动发送
DATA_OUT: ;这里启动串口数据发送
SETB RS0
SETB RS1
CLR F_SEND_END
MOV R3,#5 ;发送的数据的个数
MOV R0,#OUT_BUFF
MOV A,@R0
MOV SBUF,A
NOP
;DATA_OUT_1:
; NOP
; NOP
; JNB F_SEND,DATA_OUT_1
CLR RS0
CLR RS1
CALL_OUT: ;恢复显示画面
LCALL DELAY_S
LCALL DELAY_S
LCALL DELAY_S
NOP
SETB F_REFRESH
SETB F_MOVED
CLR F_DIS_CALL
MAIN5:
NOP
NOP
LJMP MAIN
;**************************************************
DIS_CALL:
MOV X_ADD,#0
MOV Y_ADD,#32
MOV DPTR,#HZ_QING_3 ;请
LCALL OUTHZ16
MOV X_ADD,#0
MOV Y_ADD,#048
MOV DPTR,#HZ_SHU_1 ;输
LCALL OUTHZ16
MOV X_ADD,#0
MOV Y_ADD,#064
MOV DPTR,#HZ_RU_4 ;入
LCALL OUTHZ16
MOV X_ADD,#3
MOV Y_ADD,#00
MOV DPTR,#HZ_FU_2 ;服
LCALL OUTHZ16
MOV X_ADD,#3
MOV Y_ADD,#16
MOV DPTR,#HZ_WU_4 ;务
LCALL OUTHZ16
MOV X_ADD,#3
MOV Y_ADD,#032
MOV DPTR,#HZ_YUAN_2_1 ;员
LCALL OUTHZ16
MOV X_ADD,#3
MOV Y_ADD,#48
MOV DPTR,#HZ_HAO_4 ;号
LCALL OUTHZ16
MOV X_ADD,#3
MOV Y_ADD,#064
MOV DPTR,#HZ_MA_3 ;码
LCALL OUTHZ16
MOV X_ADD,#3
MOV Y_ADD,#80
MOV DPTR,#ZIMU_MAOHAO ;:
LCALL OUTSHUZI
MOV X_ADD,#6
MOV Y_ADD,#0
MOV DPTR,#HZ_XU_1 ;需
LCALL OUTHZ16
MOV X_ADD,#6
MOV Y_ADD,#016
MOV DPTR,#HZ_FU_2 ;服
LCALL OUTHZ16
MOV X_ADD,#6
MOV Y_ADD,#32
MOV DPTR,#HZ_WU_4 ;务
LCALL OUTHZ16
MOV X_ADD,#6
MOV Y_ADD,#48
MOV DPTR,#HZ_TAI_2 ;台
LCALL OUTHZ16
MOV X_ADD,#6
MOV Y_ADD,#64
MOV DPTR,#HZ_HAO_4 ;号
LCALL OUTHZ16
MOV X_ADD,#6
MOV Y_ADD,#80
MOV DPTR,#ZIMU_MAOHAO ;:
LCALL OUTSHUZI
MOV X_ADD,#3 ;显示第一个光标
MOV Y_ADD,#88
MOV DPTR,#ZIMU_GUANGBIAO
LCALL OUTSHUZI
RET
;*******************************************************
DIS_CALL_END:
MOV X_ADD,#3
MOV Y_ADD,#032
MOV DPTR,#HZ_HU_1 ;呼
LCALL OUTHZ16
MOV X_ADD,#3
MOV Y_ADD,#48
MOV DPTR,#HZ_JIAO_4 ;叫
LCALL OUTHZ16
MOV X_ADD,#3
MOV Y_ADD,#064
MOV DPTR,#HZ_WAN_2 ;号
LCALL OUTHZ16
MOV X_ADD,#3
MOV Y_ADD,#80
MOV DPTR,#HZ_CHENG_2 ;码
LCALL OUTHZ16
MOV X_ADD,#3 ;
MOV Y_ADD,#96
MOV DPTR,#ZIMU_TANHAO ;!
LCALL OUTSHUZI
RET
;********************************************************
; 串行中断
;通过串口,发送接收到的数据到电脑
;********************************************************
S_INT:
PUSH A
PUSH PSW
SETB RS0
SETB RS1
JB RI,RECEIVE_INS ;首先判断是出还是入
CLR TI
NOP
NOP
JB F_SEND_END,TO_INTS_RETI
INC R0
MOV A,@R0
MOV SBUF,A
NOP
NOP
DJNZ R3,INTS_RETI
SETB F_SEND_END ;结束标志
TO_INTS_RETI: NOP ;最后一个数据发送完,走这里.放弃控制发送区
NOP
LJMP INTS_RETI
RECEIVE_INS:
CLR RI
MOV A,PAIDUI
ADD A,#GET_BUFF
MOV R0,A
MOV A,SBUF
;LCALL HBCD
MOV @R0,A
MOV R1,#OUT_BUFF+4 ;预先存放在OUT_BUFF相应位置
MOV @R1,A
SETB F_GET
INTS_RETI:
POP PSW
POP A
RETI
;***********************************************************************
; 每2秒钟刷新一次屏幕,或在没有满6个的情况下,有新的进来,也启动刷新
; 如果6个都显示,耗时最长:100MS
;
;**************************************************************************
DIS_REFRESH:
LCALL CLRLCD
MOV A,PAIDUI
CJNE A,#00H,DIS_REFRESH_0 ;根据排队的个数判断是否需要显示
NOP
NOP
LJMP DIS_REFRESH_OTHER ;没有要显示的,就清屏或显示其他画面
DIS_REFRESH_0:
MOV R3,PAIDUI
MOV R0,#GET_BUFF
DIS_REFRESH_1:
MOV X_ADD,#0 ;1
MOV Y_ADD,#0
MOV DPTR,#SHUZI_1
LCALL OUTSHUZI
MOV X_ADD,#00 ;、
MOV Y_ADD,#08
MOV DPTR,#ZIMU_DUNHAO
LCALL OUTSHUZI
MOV X_ADD,#0 ;台
MOV Y_ADD,#32
MOV DPTR,#HZ_TAI_2
LCALL OUTHZ16
MOV SHUZI,@R0
LCALL SHUZI_PRO ;计算出低位的DPTR,高位的放在DPH_BAK,和DPL_BAK中
MOV X_ADD,#0
MOV Y_ADD,#24
LCALL OUTSHUZI
MOV X_ADD,#0
MOV Y_ADD,#16
MOV DPH,DPH_BAK
MOV DPL,DPL_BAK
LCALL OUTSHUZI
;***************************************************************
INC R0
DJNZ R3,DIS_NEXT_0
LJMP DIS_REFRESH_END
;********************************************************************
DIS_NEXT_0:
MOV X_ADD,#0 ;2
MOV Y_ADD,#77
MOV DPTR,#SHUZI_2
LCALL OUTSHUZI
MOV X_ADD,#00 ;、
MOV Y_ADD,#85
MOV DPTR,#ZIMU_DUNHAO
LCALL OUTSHUZI
MOV X_ADD,#0 ;台
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,#0
MOV Y_ADD,#104
LCALL OUTSHUZI
MOV X_ADD,#0
MOV Y_ADD,#96
MOV DPH,DPH_BAK
MOV DPL,DPL_BAK
LCALL OUTSHUZI
;***************************************************************
INC R0
DJNZ R3,DIS_NEXT_1
LJMP DIS_REFRESH_END
;***********第2行**********************************************
DIS_NEXT_1:
MOV X_ADD,#3 ;3
MOV Y_ADD,#0
MOV DPTR,#SHUZI_3
LCALL OUTSHUZI
MOV X_ADD,#03 ;、
MOV Y_ADD,#08
MOV DPTR,#ZIMU_DUNHAO
LCALL OUTSHUZI
MOV X_ADD,#3 ;台
MOV Y_ADD,#32
MOV DPTR,#HZ_TAI_2
LCALL OUTHZ16
MOV SHUZI,@R0
LCALL SHUZI_PRO ;计算出低位的DPTR,高位的放在DPH_BAK,和DPL_BAK中
MOV X_ADD,#3
MOV Y_ADD,#24
LCALL OUTSHUZI
MOV X_ADD,#3
MOV Y_ADD,#16
MOV DPH,DPH_BAK
MOV DPL,DPL_BAK
LCALL OUTSHUZI
;***************************************************************
INC R0
DJNZ R3,DIS_NEXT_2
LJMP DIS_REFRESH_END
;********************************************************************
DIS_NEXT_2:
MOV X_ADD,#3 ;4
MOV Y_ADD,#77
MOV DPTR,#SHUZI_4
LCALL OUTSHUZI
MOV X_ADD,#3 ;、
MOV Y_ADD,#85
MOV DPTR,#ZIMU_DUNHAO
LCALL OUTSHUZI
MOV X_ADD,#3 ;台
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,#3
MOV Y_ADD,#104
LCALL OUTSHUZI
MOV X_ADD,#3
MOV Y_ADD,#96
MOV DPH,DPH_BAK
MOV DPL,DPL_BAK
LCALL OUTSHUZI
;***************************************************************
INC R0
DJNZ R3,DIS_NEXT_3
LJMP DIS_REFRESH_END
;*********************第3行*******************************
DIS_NEXT_3:
MOV X_ADD,#6 ;5
MOV Y_ADD,#0
MOV DPTR,#SHUZI_5
LCALL OUTSHUZI
MOV X_ADD,#06 ;、
MOV Y_ADD,#08
MOV DPTR,#ZIMU_DUNHAO
LCALL OUTSHUZI
MOV X_ADD,#6 ;台
MOV Y_ADD,#32
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,#24
LCALL OUTSHUZI
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -