📄 gps.asm
字号:
CLR RXFC201OKBIT ;清除标志位,准备接收下一幀FC201数据
CT0ST12: JNB OUTNETBIT,CT0ST13
LCALL REGISTERSYS
CT0ST13: JNB RXXDJOKBIT,CT0ST14 ;接收计价器数据
LCALL UNPAKXDJ
CLR RXXDJOKBIT
CT0ST14: JNB ALARMBIT, CT0ST20
LCALL TOALARM
;------------用于20MS定时---------
CT0ST20: DJNZ C20MS,DONE_DONE
MOV C20MS,#2
JNB HAVNUMKEYBIT,CT0ST21
LCALL DISPHVNUMKEY
CT0ST21: LCALL DEALKEY ;检测按键
SETB KEYUPBIT ;设置按键松开标志
JNB STACHGBIT,CT0ST22
LCALL SAVESTASTU ;保存汽车状态位
CLR STACHGBIT
CT0ST22: JB WARNBIT,CT0ST23
JB AFFIRMWARNBIT,CT0ST23
LCALL AFFIRMWARN ;确认报警
CT0ST23: JNB SAVEGPSBIT,CT0ST30
LCALL PAKGPSEPRM
LCALL TSAVEGPSFRAME
CLR SAVEGPSBIT
LJMP CT0ST30
;-----------用于100MS定时--------
DONE_DONEW:
LJMP DONE
CT0ST30: DJNZ C100MS,DONE_DONEW
MOV C100MS,#5
LCALL SCANCARSTA
LCALL CHECKPTTH
JNB INIMESSBIT,CT0ST31
LCALL INISYSTEM
CT0ST31: LCALL LCDDISP ;扫描刷新屏幕
JNB RXMESSOKBIT,CT0ST40
LCALL DEALMESS ;处理新到的短信
SETB SHOWSMESSBIT
LCALL DISPNEWMESS ;显示短信
CLR RXMESSOKBIT
;-----------用于500MS定时--------
CT0ST40: DJNZ C500MS,DONE
MOV C500MS,#5
LCALL CHECKIC ;检测IC状态
LCALL IFINTSYS ;开机15秒内可随时启动系统菜单
JNB READICBIT,CT0ST50
LCALL DEALCARD
CLR READICBIT
;-----------用于1S定时-----------
CT0ST50: DJNZ C1000MS,DONE
MOV C1000MS,#2
JNB TRACKBIT,CT0ST51 ;扫描跟踪指令=1
LCALL RUNTRACKCOM ;执行跟踪指令
CT0ST51: JNB WARNBIT,CT0ST52
LCALL SENDWARMESS
CT0ST52: LCALL CHECKIFKEY ;45秒内无键按下,退出菜单显示状态
JNB LISTENBIT,CT0ST53
LCALL RUNLISTENCAR ;执行监听扫描
CT0ST53: JNB BKLEDBIT,CT0ST54
LCALL TOBKLED ;液晶背光控制
CT0ST54: JNB WELINPUTBIT,CT0ST55
LCALL DEALINPUT ;处理自动发送人数
CT0ST55: JNB OPENUMODEBIT,CT0ST56
LCALL DTIMEOPENUNIT ;定时打开单元,允许通话,到了定时时间,则自动关闭单元;
CT0ST56: JNB DISDLYBIT,CT0ST57
LCALL TODISPDLY ;自动切换显示界面
CT0ST57: JNB INREQBIT,CT0ST58
JB INDIALBIT,CT0ST58
DJNZ TXCNT,CT0ST58
LCALL SENREQ
CT0ST58: JNB DEALYMUSICBIT,CT0ST60
LCALL U_DEALYNUS ;提示音延时
;-----------用于10S定时-----------
CT0ST60: DJNZ C10000MS,DONE
MOV C10000MS,#10
JNB CHECKPOSBIT,CT0ST61
LCALL CHECKPOSPRO ;检查是否越界
CT0ST61: LCALL CHECKNET
DONE: LCALL WDOG
MOV TL0, #BASTL0
MOV TH0, #BASTH0 ;CT0 2MS
SETB TR0
POP PSW
POP DPL
POP DPH
POP B
POP ACC
RETI
;**************************************
;模块功能:处理GPS数据 *
;名 称:DEALGPSDATA *
;入口参数: *
;子程序号: *
;**************************************
DEALGPSDATA:
LCALL UNPAKGPS ;对接收到的GPS数据进行解析
LCALL CONVRGPS ;对接收到的GPS数据进行转换
LCALL CONVTIME ;转换为北京时间
CLR RXGPSOKBIT ;清除标志位,准备接收下一幀GPS数据
SETB REALGPSBIT ;需要刷新GPS数据
SETB DGPSOKBIT ;时间转换OK标志
LCALL WDOG
RET
;**************************************
;模块功能:重新注册系统 *
;名 称:INISYSTEM *
;入口参数: *
;子程序号: *
;**************************************
INISYSTEM:
LCALL INIMESSMENU ;初始化短信显示区
LCALL INIPHRMENU ;初始化固定短语显示区
LCALL INICALLMENU ;初始化电话号码显示区
LCALL INITEMPCALL
LCALL CLRCALLDATA
RET
;**************************************
;模块功能:重新注册系统 *
;名 称:REGISTERSYS *
;入口参数: *
;子程序号: *
;**************************************
REGISTERSYS:
CLR OUTNETBIT
MOV DPTR,#TAXISTATUSBC
MOVX A,@DPTR
MOV DPTR,#TAXISTATUS
MOVX @DPTR,A
MOV FC201COM,#'L'
MOV MAIN_ID0,#0
MOV MAIN_ID1,#0
MOV DATA_TYPE,#1
LCALL PAKGPS
LCALL TXFC201DATA
RET
;**************************************
;模块功能:在网检查 *
;名 称:CHECKNET *
;入口参数: *
;子程序号: *
;**************************************
CHECKNET:
DJNZ INNETCNT,CHECKNETE
MOV INNETCNT,#36
CLR RADIOMODBIT
SETB OUTNETBIT ;设置系统已经脱网
SETB REFRESHBIT
CHECKNETE:
RET
;**************************************
;模块功能:越界检查 *
;名 称:CHECKPOSPRO *
;入口参数: *
;子程序号: *
;**************************************
CHECKPOSPRO:
MOV DPTR,#OUTRANGECNT
MOVX A,@DPTR
DEC A
MOVX @DPTR,A
JNZ CHECKPOSPROE
MOV A,#18
MOVX @DPTR,A
;-------比较经度1
CHECKPOSIMI:
LCALL WDOG
MOV DPTR,#POSCHECKBUFF0
INC AUXR1
MOV DPTR,#DGPSLON
INC AUXR1
MOV TEMP2,#4
LCALL COMPAREBCD
JC CHECKPOSPRO1
;-------比较纬度1
LCALL WDOG
MOV DPTR,#(POSCHECKBUFF0+4)
INC AUXR1
MOV DPTR,#DGPSLAT
INC AUXR1
MOV TEMP2,#4
LCALL COMPAREBCD
JC CHECKPOSPRO1
LCALL WDOG
;-------比较经度2
MOV DPTR,#(POSCHECKBUFF0+8)
INC AUXR1
MOV DPTR,#DGPSLON
INC AUXR1
MOV TEMP2,#4
LCALL COMPAREBCD
JNC CHECKPOSPRO1
LCALL WDOG
;-------比较纬度2
MOV DPTR,#(POSCHECKBUFF0+12)
INC AUXR1
MOV DPTR,#DGPSLAT
INC AUXR1
MOV TEMP2,#4
LCALL COMPAREBCD
JNC CHECKPOSPRO1
MOV DPTR,#STATUSVALUE ;送本地二级状态
MOV A,#7FH
MOVX @DPTR,A
LCALL WDOG
CLR OVERRANGEBIT
SETB REFRESHBIT
CHECKPOSPROE:
RET
CHECKPOSPRO1:
LCALL WDOG
MOV DPTR,#STATUSVALUE ;送本地二级状态
MOV A,#8CH
MOVX @DPTR,A
MOV DPTR,#TAXISTATUSBC
MOVX A,@DPTR
MOV DPTR,#TAXISTATUS
MOVX @DPTR,A
MOV FC201COM,#'H'
MOV MAIN_ID0,#0
MOV MAIN_ID1,#0
MOV DATA_TYPE,#1
LCALL PAKGPS
LCALL TXFC201DATA
SETB ALARMBIT
MOV BUZZTYPE,#66H
SETB OVERRANGEBIT
SETB REFRESHBIT
RET
;**************************************
;模块功能:触发扫描键盘 *
;名 称:SCANKEY *
;入口参数: *
;子程序号: *
;**************************************
SCANKEY: MOV CCON,#0
MOV CH,#0
MOV CL,#0
MOV CCAPM3,#11H ;负跳变触发中断
SETB CR
RET
;**************************************
;模块功能:处理获得键值 *
;名 称:DEALKEY *
;入口参数: *
;子程序号: *
;**************************************
DEALKEYEX:LJMP DEALKEYE
DEALKEY:
JNB KEYDNBIT,DEALKEYEX ;键未松开,不去扫描键盘
JNB KEYUPBIT,DEALKEYEX
;--------------------------------;取键值
MOV TXBUF,#0AAH
MOV TXBUFAD,#02H
LCALL TXBYTE
MOV TXBUF,SCANVHH
MOV TXBUFAD,#02H
LCALL TXBYTE
MOV TXBUF,SCANVHL
MOV TXBUFAD,#02H
LCALL TXBYTE
MOV TXBUF,SCANVLH
MOV TXBUFAD,#02H
LCALL TXBYTE
MOV TXBUF,SCANVLL
MOV TXBUFAD,#02H
LCALL TXBYTE
;-------------------------------
MOV R0,#4
MOV POSROW,#0 ;行的位置
CLR LESSBIT
MOV DPTR,#KEYVHVALUE
KEYROW0: MOV A,#0 ;判断ROW的位置,即高电平值
MOVC A,@A+DPTR
MOV KEYVH,A
INC DPTR
MOV A,#0
MOVC A,@A+DPTR
MOV KEYVL,A
INC DPTR
MOV B,SCANVHH
MOV A,SCANVHL
LCALL SUBBDBYTE
JB LESSBIT,DEALKEY01 ;如果小于 VHX,则认为无效键
INC POSROW
DJNZ R0,KEYROW0
LJMP DEALKEY3
DEALKEY01:
MOV POSCOL,#0 ;列的位置
MOV R0,#4
MOV A,POSROW
MOV B,A
XRL A,#0
JZ CHKKEYROW0
MOV A,B
XRL A,#1
JZ CHKKEYROW1
MOV A,B
XRL A,#2
JZ CHKKEYROW2
MOV A,B
XRL A,#3
JZ CHKKEYROW3
LJMP DEALKEY3
CHKKEYROW0:
MOV DPTR,#KEYVHVALUE0
LJMP KEYCOL0
CHKKEYROW1:
MOV DPTR,#KEYVHVALUE1
LJMP KEYCOL0
CHKKEYROW2:
MOV DPTR,#KEYVHVALUE2
LJMP KEYCOL0
CHKKEYROW3:
MOV DPTR,#KEYVHVALUE3
KEYCOL0:
MOV A,#0 ;判断COL的位置,即低电平值
MOVC A,@A+DPTR
MOV KEYVH,A
INC DPTR
MOV A,#0
MOVC A,@A+DPTR
MOV KEYVL,A
INC DPTR
MOV B,SCANVLH
MOV A,SCANVLL
LCALL SUBBDBYTE
JNB LESSBIT,DEALKEY4
LJMP DEALKEY2
DEALKEY4: INC POSCOL
DJNZ R0,KEYCOL0
LJMP DEALKEY3
DEALKEY2:
MOV A,POSROW
MOV B,#4
MUL AB
ADD A,POSCOL
MOV DPTR,#KEYNAME
MOVC A,@A+DPTR
MOV KEYOKVALUE,A
;--------------------
; MOV TXBUF,A
; MOV TXBUFAD,#02H
; LCALL TXBYTE
;--------------------
SETB ALARMBIT ;响铃
SETB BKLEDBIT ;打开背光
MOV BUZZTYPE,#11H
MOV BKLEDCNT,#10
MOV CNTNOKEYPRESS,#45 ;有键按下,对此值进行复位
SETB KEYOK
DEALKEY3: CLR SCANBIT ;检测到有键按下
CLR INSCANBIT ;正在扫描
CLR SCANVHBIT ;扫描高电平OK
CLR KEYDNBIT
CLR KEYUPBIT
CLR CR
DEALKEYE: RET
;*******************************************
;名称:SUBBDBYTE *
;功能:比较双字节的大小 *
; 若B|A<KEYVH|KEYVL:LESSBIT=1 *
;占用寄存器: A,B *
;入 口 : KEYVL,KEYVH,B高位,A低位 *
;出 口 : *
;子程序编号: *
;*******************************************
;说明:A|B>KEYVH|KEYVL:LESSBIT=0,没有找到
;说明:A|B<KEYVH|KEYVL:LESSBIT=1,找到键值
SUBBDBYTE:
MOV MUMEBYTE,A
MOV A,B ;取高位
SUBB A,KEYVH ;A> CY=0
JZ SUBBN0 ;高位相等
JNC SUBBNE
SETB LESSBIT ;LESSBIT=1;
LJMP SUBBEXIT
SUBBN0:
CLR C
MOV A,MUMEBYTE
SUBB A,KEYVL
JNC SUBBNE
SETB LESSBIT
LJMP SUBBEXIT
SUBBNE:
CLR LESSBIT
SUBBEXIT:
RET
;------------------------------------------------------------------------
KEYNAME:DB 0DH,0CH,0BH,0AH,07H,06H,05H,0EH,02H,01H,09H,08H,0FH,00H,04H,03H
; 7 6 5 2 1 9 8 0 4 3
;----------------------------------------------[2003-3-24采用精密电容]
KEYVHVALUE :DB 09H,00H,0CH,00H,10H,00H,20H,00H
KEYVHVALUE0:DB 0CH,00H,10H,00H,14H,00H,20H,00H
KEYVHVALUE1:DB 0CH,00H,10H,00H,14H,00H,20H,00H
KEYVHVALUE2:DB 0CH,00H,10H,00H,14H,80H,20H,00H
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -