📄 gps.lst
字号:
C51 COMPILER V8.02 GPS 09/29/2008 23:53:26 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE GPS
OBJECT MODULE PLACED IN GPS.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE GPS.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include<reg52.h>
2 #include"GPS.h"
3 /**********************************************************
4 LCD1602.c (GPS)
5
6 Created by Cao Jian
7 email: cj19870223@sina.com
8 *************************************************************/
9 sbit P07=P0^7;
10
11 unsigned char idata GPS[6];
12 unsigned char idata GPSBuf0[60];
13 unsigned char idata m_sTime[9]; //提取时间所用
14 unsigned char idata m_sPositionY[8]; //提取纬度所用
15 unsigned char idata m_sPositionX[9]; //提取经度所用
16 unsigned char idata m_sData[9]; //提取日期所用
17 unsigned char j=8;
18 unsigned char x=0;
19 unsigned char y=0;
20 unsigned char m=0;
21 unsigned char n=0;
22
23 void inituart()
24 {
25 1 TMOD=0x20;//定时器1,方式2
26 1 TH1=0xfa;//波特率9600
27 1 TCON=0x40;//启动定时器1
28 1
29 1 SCON=0x50;//方式1,允许串行接收
30 1 IE=0x90;//开总中断,允许串行中断
31 1 }
32
33 void uart() interrupt 4 using 1
34 {
35 1 unsigned char i;
36 1 unsigned char SectionID=0;
37 1
38 1 if(RI==1)
39 1 {
40 2 RI=0;//清除中断
41 2 GPS[0]=SBUF;
42 2
43 2 if(GPS[0]=='$')
44 2 {
45 3 RI=0;
46 3 SectionID=0;
47 3 for(i=1;i<6;i++)
48 3 {
49 4 while(!RI); //等待该次八位数据接收完毕
50 4 RI=0;//清除中断
51 4 GPS[i]=SBUF;
52 4 }
53 3
54 3 if(GPS[3]=='R')
55 3 {
C51 COMPILER V8.02 GPS 09/29/2008 23:53:26 PAGE 2
56 4 if(j==9)
57 4 {
58 5 for(i=0;i<70;i++)
59 5 {
60 6 while(!RI); //等待该次八位数据接收完毕
61 6 RI=0;//清除中断
62 6 GPSBuf0[i]=SBUF;
63 6 if(GPSBuf0[i]=='*')break;//校验位不再接收
64 6 if(SBUF==',')
65 6 SectionID++; //提取逗号个数
66 6 else
67 6 {
68 7 switch(SectionID)
69 7 {
70 8 case 1: m_sTime[x++]=SBUF; break; //提取时间
71 8 case 3: m_sPositionY[y++]=SBUF; break; //提取纬度
72 8 case 5: m_sPositionX[m++]=SBUF; break; //提取经度
73 8 case 9: m_sData[n++]=SBUF; break; //提取日期
74 8 default: break;
75 8 }
76 7 }
77 6 }
78 5 //等待校验位发送完毕
79 5 while(!RI);
80 5 RI=0;
81 5 while(!RI);
82 5 RI=0;
83 5
84 5 j=0;
85 5 }
86 4 else j=j+1;
87 4 }
88 3 }
89 2 }
90 1 }
91
92 void main()
93 {
94 1 unsigned int m,n;
95 1 unsigned char temp;
96 1
97 1 LCD_init();
98 1
99 1 LCD_write_string("Welcome!");
100 1 LCD_en_com(0xc3);
101 1 LCD_write_string("Show you these!!!");
102 1
103 1 inituart();
104 1 while(1)
105 1 {
106 2 if(j==0)
107 2 {
108 3 //调整时间
109 3 m_sTime[0]=m_sTime[0]-'0';
110 3 m_sTime[1]=m_sTime[1]-'0';
111 3
112 3 temp=m_sTime[0]*10+m_sTime[1];
113 3 if(temp>=16)
114 3 {//如果大于等于16就-16
115 4
116 4 temp=temp-16;
117 4 m_sTime[0]=temp/10;
C51 COMPILER V8.02 GPS 09/29/2008 23:53:26 PAGE 3
118 4 m_sTime[1]=temp%10;
119 4 }
120 3 else
121 3 {//否则就+8
122 4 temp=temp+8;
123 4 m_sTime[0]=temp/10;
124 4 m_sTime[1]=temp%10;
125 4 }
126 3 m_sTime[0]=m_sTime[0]+0x30;
127 3 m_sTime[1]=m_sTime[1]+0x30;
128 3 //显示数据
129 3 LCD_en_com(0x01);
130 3 _nop_();
131 3 _nop_();
132 3 _nop_();
133 3 _nop_();
134 3 LCD_en_com(0x7d); //???
135 3 _nop_();
136 3 _nop_();
137 3 _nop_();
138 3 _nop_();
139 3 //LCD_write_string("$GPRMC");
140 3 LCD_write_string(m_sTime);
141 3 LCD_write_string(m_sPositionY);
142 3 LCD_write_string(m_sPositionX);
143 3 LCD_write_string(m_sData);
144 3 //LCD_write_string("It's Over....");
145 3
146 3 j=1;
147 3 P07=!P07;
148 3 for(m=0;m<280;m++)
149 3 for(n=0;n<200;n++);
150 3 }
151 2
152 2 for(m=0;m<280;m++)
153 2 for(n=0;n<200;n++);
154 2
155 2 LCD_en_com(0x18);//整屏左移
156 2 }
157 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 629 ----
CONSTANT SIZE = 27 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 5 2
IDATA SIZE = 101 ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -