⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gps.asm

📁 一个自行设计的GPS的出租车使用的程序源代码。
💻 ASM
📖 第 1 页 / 共 5 页
字号:
          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 + -