📄 gps20080503icc.lst
字号:
(0148) //将data变为datal 0000 datah 0000
(0149) Send_8bit(com&0xf0);
228 2D0A MOV R16,R10
229 2711 CLR R17
22A 7F00 ANDI R16,0xF0
22B 7010 ANDI R17,0
22C D015 RCALL _Send_8bit
(0150) Delay_Us(100);//72us
22D E604 LDI R16,0x64
22E DED8 RCALL _Delay_Us
(0151) Send_8bit((com&0x0f)<<4);
22F 2D0A MOV R16,R10
230 2711 CLR R17
231 700F ANDI R16,0xF
232 7010 ANDI R17,0
233 0F00 LSL R16
234 1F11 ROL R17
235 0F00 LSL R16
236 1F11 ROL R17
237 0F00 LSL R16
238 1F11 ROL R17
239 0F00 LSL R16
23A 1F11 ROL R17
23B D006 RCALL _Send_8bit
(0152) Delay_Us(100);//72us
23C E604 LDI R16,0x64
23D DEC9 RCALL _Delay_Us
(0153) LCD_CS_L;//片选置低
23E 98AB CBI 0x15,3
23F 90C9 LD R12,Y+
240 90A9 LD R10,Y+
241 9508 RET
_Send_8bit:
i --> R20
x --> R10
242 940E 09A0 CALL push_xgset300C
244 0158 MOVW R10,R16
(0154) }
(0155)
(0156) void Send_8bit(Word x)
(0157) {
(0158) Byte i;
(0159) for(i=0;i<8;i++)
245 2744 CLR R20
246 C00E RJMP 0x0255
(0160) {
(0161) if(x&0x80)//数据线发送数据
247 FEA7 SBRS R10,7
248 C002 RJMP 0x024B
(0162) {
(0163) LCD_STD_H;
249 9AC3 SBI 0x18,3
(0164) }
24A C001 RJMP 0x024C
(0165) else
(0166) {
(0167) LCD_STD_L;
24B 98C3 CBI 0x18,3
(0168) }
(0169) LCD_SCLK_L;//产生同步时钟
24C 98C4 CBI 0x18,4
(0170) Delay_Us(2);
24D E002 LDI R16,2
24E DEB8 RCALL _Delay_Us
(0171) LCD_SCLK_H;
24F 9AC4 SBI 0x18,4
(0172) Delay_Us(2);
250 E002 LDI R16,2
251 DEB5 RCALL _Delay_Us
(0173) x <<= 1;
252 0CAA LSL R10
253 1CBB ROL R11
254 9543 INC R20
255 3048 CPI R20,0x8
256 F380 BCS 0x0247
257 940C 09A5 JMP pop_xgset300C
_Hzk_Dis_Clr:
259 9722 SBIW R28,2
(0174) }
(0175) }
(0176)
(0177) void Hzk_Dis_Clr(void)//汉字显示清屏
(0178) {
(0179) Hzk_Dis_Words(1,1," ");
25A E681 LDI R24,0x61
25B E090 LDI R25,0
25C 8399 STD Y+1,R25
25D 8388 STD Y+0,R24
25E E021 LDI R18,1
25F E001 LDI R16,1
260 DEEE RCALL _Hzk_Dis_Words
(0180) Hzk_Dis_Words(2,1," ");
261 E681 LDI R24,0x61
262 E090 LDI R25,0
263 8399 STD Y+1,R25
264 8388 STD Y+0,R24
265 E021 LDI R18,1
266 E002 LDI R16,2
267 DEE7 RCALL _Hzk_Dis_Words
268 9622 ADIW R28,2
269 9508 RET
_main:
i --> Y,+13
26A 972C SBIW R28,0xC
FILE: D:\SOURCE~1\gps20080503\main.c
(0001) //ICC-AVR application builder : 2007-11-21
(0002) // Target : M16
(0003) // Crystal: 8.0000Mhz
(0004)
(0005) /****************** SMG12232ZK串行接口程序******************
(0006) * Title : Accessing to LCD-CONTROLLER
(0007) * Date : 2007.10.18
(0008) * Support telephone:
(0009) * Support fax :
(0010) * Create by :
(0011) * DESCRIPTION:This subroutine shows how to write data to LCD-CONTROLLER
(0012) *******************************************************************/
(0013)
(0014) #include <iom16v.h> //ATMEGA48头文件
(0015) #include <macros.h> //宏定义
(0016) //#include <math.h>
(0017) #include "define.h" //端口定义
(0018) #include "initrialm16.h"//初始化mcu
(0019) #include "delay.h" //延时程序
(0020) #include "smg12232zk.h" //122*32点阵屏驱动程序
(0021)
(0022)
(0023) void Get_Key(void);
(0024) void Get_GPRMC_data(void);//提取GPRMC数据
(0025) long Get_Area(long x1,long y1,long x2,long y2);
(0026)
(0027)
(0028) Byte const COS_TAB[90]=
(0029) {
(0030) 100,100,100,100,100,99, 99, 99, 99, 98,
(0031) 98, 98, 97, 97, 97, 96, 96, 95, 95, 94,
(0032) 93, 93, 92, 91, 91, 90, 89, 88, 87, 87,
(0033) 86, 85, 84, 83, 82, 81, 80, 79, 78, 77,
(0034) 75, 74, 73, 72, 71, 69, 68, 67, 66, 64,
(0035) 63, 62, 60, 59, 57, 56, 55, 53, 52, 50,
(0036) 49, 47, 45, 44, 42, 41, 39, 38, 36, 34,
(0037) 33, 31, 29, 28, 26, 24, 23, 21, 19, 17,
(0038) 16, 14, 12, 11, 9, 7, 5, 4, 2, 0
(0039) };
(0040)
(0041) void main(void)
(0042) {
(0043) Word i;
(0044) Init_Devices();
26B DE18 RCALL _Init_Devices
(0045) Lcd_Reset();
26C DF9C RCALL _Lcd_Reset
26D C317 RJMP 0x0585
(0046) while(1)
(0047) {
(0048) Get_Key();
26E D319 RCALL _Get_Key
(0049) if(key != 0)
26F 9020 007D LDS R2,key
271 2022 TST R2
272 F0D1 BEQ 0x028D
(0050) {
(0051) switch(key)
273 2CA2 MOV R10,R2
274 24BB CLR R11
275 01C5 MOVW R24,R10
276 3081 CPI R24,1
277 E0E0 LDI R30,0
278 079E CPC R25,R30
279 F029 BEQ 0x027F
27A 3082 CPI R24,2
27B E0E0 LDI R30,0
27C 079E CPC R25,R30
27D F029 BEQ 0x0283
27E C007 RJMP 0x0286
(0052) {
(0053) case 1: flag_area = 1;break;//开始测量
27F E081 LDI R24,1
280 9380 0148 STS flag_area,R24
282 C003 RJMP 0x0286
(0054) case 2: flag_area = 2;break;
283 E082 LDI R24,2
284 9380 0148 STS flag_area,R24
(0055) default:break;
(0056) }
(0057) key_dis = key;
286 9020 007D LDS R2,key
288 9220 007C STS key_dis,R2
(0058) key = 0;
28A 2422 CLR R2
28B 9220 007D STS key,R2
(0059) }
(0060) if(flag_area == 0)
28D 9020 0148 LDS R2,flag_area
28F 2022 TST R2
290 F511 BNE 0x02B3
(0061) {
(0062) Hzk_Dis_Data(1,1,latitude,9);
291 E089 LDI R24,0x9
292 838C STD Y+4,R24
293 9040 018C LDS R4,latitude+2
295 9050 018D LDS R5,latitude+3
297 9020 018A LDS R2,latitude
299 9030 018B LDS R3,latitude+1
29B 8228 STD Y+0,R2
29C 8239 STD Y+1,R3
29D 824A STD Y+2,R4
29E 825B STD Y+3,R5
29F E021 LDI R18,1
2A0 E001 LDI R16,1
2A1 DF05 RCALL _Hzk_Dis_Data
(0063) Hzk_Dis_Data(2,1,longitude,9);
2A2 E089 LDI R24,0x9
2A3 838C STD Y+4,R24
2A4 9040 0188 LDS R4,longitude+2
2A6 9050 0189 LDS R5,longitude+3
2A8 9020 0186 LDS R2,longitude
2AA 9030 0187 LDS R3,longitude+1
2AC 8228 STD Y+0,R2
2AD 8239 STD Y+1,R3
2AE 824A STD Y+2,R4
2AF 825B STD Y+3,R5
2B0 E021 LDI R18,1
2B1 E002 LDI R16,2
2B2 DEF4 RCALL _Hzk_Dis_Data
(0064) }
(0065) if(flag_area == 1)
2B3 9180 0148 LDS R24,flag_area
2B5 3081 CPI R24,1
2B6 F009 BEQ 0x02B8
2B7 C047 RJMP 0x02FF
(0066) {
(0067) x0_longitude = longitude;//保存0点的坐标
2B8 9040 0188 LDS R4,longitude+2
2BA 9050 0189 LDS R5,longitude+3
2BC 9020 0186 LDS R2,longitude
2BE 9030 0187 LDS R3,longitude+1
2C0 9230 017E STS x0_longitude+1,R3
2C2 9220 017D STS x0_longitude,R2
2C4 9250 0180 STS x0_longitude+3,R5
2C6 9240 017F STS x0_longitude+2,R4
(0068) y0_latitude = latitude;
2C8 9040 018C LDS R4,latitude+2
2CA 9050 018D LDS R5,latitude+3
2CC 9020 018A LDS R2,latitude
2CE 9030 018B LDS R3,latitude+1
2D0 9230 017A STS y0_latitude+1,R3
2D2 9220 0179 STS y0_latitude,R2
2D4 9250 017C STS y0_latitude+3,R5
2D6 9240 017B STS y0_latitude+2,R4
(0069) x1_post = 0;
2D8 E040 LDI R20,0
2D9 E050 LDI R21,0
2DA E060 LDI R22,0
2DB E070 LDI R23,0
2DC 9350 016E STS x1_post+1,R21
2DE 9340 016D STS x1_post,R20
2E0 9370 0170 STS x1_post+3,R23
2E2 9360 016F STS x1_post+2,R22
(0070) y1_post = 0;
2E4 E040 LDI R20,0
2E5 E050 LDI R21,0
2E6 E060 LDI R22,0
2E7 E070 LDI R23,0
2E8 9350 016A STS y1_post+1,R21
2EA 9340 0169 STS y1_post,R20
2EC 9370 016C STS y1_post+3,R23
2EE 9360 016B STS y1_post+2,R22
(0071) area = 0;
2F0 E040 LDI R20,0
2F1 E050 LDI R21,0
2F2 E060 LDI R22,0
2F3 E070 LDI R23,0
2F4 9350 014E STS area+1,R21
2F6 9340 014D STS area,R20
2F8 9370 0150 STS area+3,R23
2FA 9360 014F STS area+2,R22
(0072) flag_area = 3;//测量开始
2FC E083 LDI R24,3
2FD 9380 0148 STS flag_area,R24
(0073) }
(0074) if(flag_area == 3)
2FF 9180 0148 LDS R24,flag_area
301 3083 CPI R24,3
302 F009 BEQ 0x0304
303 C190 RJMP 0x0494
(0075) {
(0076) //计算本次的相对坐标
(0077) xishu = PI2RDIV360*COS_TAB[latitude/1000000-1]/100000;
304 E440 LDI R20,0x40
305 E452 LDI R21,0x42
306 E06F LDI R22,0xF
307 E070 LDI R23,0
308 9120 018C LDS R18,latitude+2
30A 9130 018D LDS R19,latitude+3
30C 9100 018A LDS R16,latitude
30E 9110 018B LDS R17,latitude+1
310 937A ST R23,-Y
311 936A ST R22,-Y
312 935A ST R21,-Y
313 934A ST R20,-Y
314 940E 08EC CALL div32u
316 0118 MOVW R2,R16
317 0129 MOVW R4,R18
318 E041 LDI R20,1
319 E050 LDI R21,0
31A E060 LDI R22,0
31B E070 LDI R23,0
31C 1A24 SUB R2,R20
31D 0A35 SBC R3,R21
31E 0A46 SBC R4,R22
31F 0A57 SBC R5,R23
320 01F1 MOVW R30,R2
321 E584 LDI R24,0x54
322 E090 LDI R25,0
323 0FE8 ADD R30,R24
324 1FF9 ADC R31,R25
325 9024 LPM R2,0(Z)
326 2433 CLR R3
327 2444 CLR R4
328 2455 CLR R5
329 E54B LDI R20,0x5B
32A EB52 LDI R21,0xB2
32B E061 LDI R22,1
32C E070 LDI R23,0
32D 925A ST R5,-Y
32E 924A ST R4,-Y
32F 923A ST R3,-Y
330 922A ST R2,-Y
331 018A MOVW R16,R20
332 019B MOVW R18,R22
333 940E 0956 CALL empy32s
335 EA40 LDI R20,0xA0
336 E856 LDI R21,0x86
337 E061 LDI R22,1
338 E070 LDI R23,0
339 937A ST R23,-Y
33A 936A ST R22,-Y
33B 935A ST R21,-Y
33C 934A ST R20,-Y
33D 940E 08F2 CALL div32s
33F 9310 014A STS xishu+1,R17
341 9300 0149 STS xishu,R16
343 9330 014C STS xishu+3,R19
345 9320 014B STS xishu+2,R18
(0078) x2_post = (longitude - x0_longitude)*xishu;
347 9040 017F LDS R4,x0_longitude+2
349 9050 0180 LDS R5,x0_longitude+3
34B 9020 017D LDS R2,x0_longitude
34D 9030 017E LDS R3,x0_longitude+1
34F 9120 0188 LDS R18,longitude+2
351 9130 0189 LDS R19,longitude+3
353 9100 0186 LDS R16,longitude
355 9110 0187 LDS R17,longitude+1
357 1902 SUB R16,R2
358 0913 SBC R17,R3
359 0924 SBC R18,R4
35A 0935 SBC R19,R5
35B 9040 014B LDS R4,xishu+2
35D 9050 014C LDS R5,xishu+3
35F 9020 0149 LDS R2,xishu
361 9030 014A LDS R3,xishu+1
363 925A ST R5,-Y
364 924A ST R4,-Y
365 923A ST R3,-Y
366 922A ST R2,-Y
367 940E 0956 CALL empy32s
369 9310 0166 STS x2_post+1,R17
36B 9300 0165 STS x2_post,R16
36D 9330 0168 STS x2_post+3,R19
36F 9320 0167 STS x2_post+2,R18
(0079) y2_post = (latitude - y0_latitude)*111;
371 9040 017B LDS R4,y0_latitude+2
373 9050 017C LDS R5,y0_latitude+3
375 9020 0179 LDS R2,y0_latitude
377 9030 017A LDS R3,y0_latitude+1
379 9080 018C LDS R8,latitude+2
37B 9090 018D LDS R9,latitude+3
37D 9060 018A LDS R6,latitude
37F 9070 018B LDS R7,latitude+1
381 1862 SUB R6,R2
382 0873 SBC R7,R3
383 0884 SBC R8,R4
384 0895 SBC R9,R5
385 E64F LDI R20,0x6F
386 E050 LDI R21,0
387 E060 LDI R22,0
388 E070 LDI R23,0
389 929A ST R9,-Y
38A 928A ST R8,-Y
38B 927A ST R7,-Y
38C 926A ST R6,-Y
38D 018A MOVW R16,R20
38E 019B MOVW R18,R22
38F 940E 0956 CALL empy32s
391 9310 0162 STS y2_post+1,R17
393 9300 0161 STS y2_post,R16
395 9330 0164 STS y2_post+3,R19
397 9320 0163 STS y2_post+2,R18
(0080) area += Get_Area(x1_post,y1_post,x2_post,y2_post);
399 0118 MOVW R2,R16
39A 0129 MOVW R4,R18
39B 8628 STD Y+8,R2
39C 8639 STD Y+9,R3
39D 864A STD Y+10,R4
39E 865B STD Y+11,R5
39F 9040 0167 LDS R4,x2_post+2
3A1 9050 0168 LDS R5,x2_post+3
3A3 9020 0165 LDS R2,x2_post
3A5 9030 0166 LDS R3,x2_post+1
3A7 822C STD Y+4,R2
3A8 823D STD Y+5,R3
3A9 824E STD Y+6,R4
3AA 825F STD Y+7,R5
3AB 9040 016B LDS R4,y1_post+2
3AD 9050 016C LDS R5,y1_post+3
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -