📄 gps.lst
字号:
__text_start:
__start:
01D7 E5CF LDI R28,0x5F
01D8 E0D4 LDI R29,4
01D9 BFCD OUT 0x3D,R28
01DA BFDE OUT 0x3E,R29
01DB 51C0 SUBI R28,0x10
01DC 40D0 SBCI R29,0
01DD EA0A LDI R16,0xAA
01DE 8308 STD Y+0,R16
01DF 2400 CLR R0
01E0 E4E8 LDI R30,0x48
01E1 E0F1 LDI R31,1
01E2 E013 LDI R17,3
01E3 3FE0 CPI R30,0xF0
01E4 07F1 CPC R31,R17
01E5 F011 BEQ 0x01E8
01E6 9201 ST R0,Z+
01E7 CFFB RJMP 0x01E3
01E8 8300 STD Z+0,R16
01E9 ECE6 LDI R30,0xC6
01EA E0F2 LDI R31,2
01EB E6A0 LDI R26,0x60
01EC E0B0 LDI R27,0
01ED E013 LDI R17,3
01EE 3AEE CPI R30,0xAE
01EF 07F1 CPC R31,R17
01F0 F021 BEQ 0x01F5
01F1 95C8 LPM
01F2 9631 ADIW R30,1
01F3 920D ST R0,X+
01F4 CFF9 RJMP 0x01EE
01F5 940E0792 CALL _main
_exit:
01F7 CFFF RJMP _exit
FILE: E:\单片机\AVR程序\GPS通信\gps.c
(0001) //包含所需头文件
(0002) #include <ioM16v.h>
(0003) #include <macros.h>
(0004) //*
(0005) //*
(0006) /***************************************************************************************************
(0007) 宏定义
(0008) ****************************************************************************************************/
(0009)
(0010) #define uchar unsigned char
(0011) #define uint unsigned int
(0012)
(0013) //串行通信
(0014) #define PORT PORTA //选择引脚口
(0015)
(0016) #define setRS PORT|=(1<<1) //串行的片选信号
(0017) #define clearRS PORT&=~(1<<1)
(0018)
(0019) #define setRW PORT|=(1<<2) //串行的数据口
(0020) #define clearRW PORT&=~(1<<2)
(0021)
(0022) #define setCKL PORT|=(1<<3),delay_nus(1) //串行的同步时钟
(0023) #define clearCKL PORT&=~(1<<3),delay_nus(1)
(0024)
(0025) #define Clear WriteCommand(0x01),delay_nms(5) //清屏
(0026)
(0027) #define hanzishu 18 //输入汉字数
(0028) #define howmany0 1 //在开始显示汉字前填入多少个相同的汉字 (一般填空字)
(0029) #define position 6 //填什么样的相同汉字(一般填空字)
(0030) #define homMHZPosition 8 //以多少个汉字位来显示移动汉字
(0031)
(0032) /***************************************************************************************************
(0033) 宏定义
(0034) ****************************************************************************************************/
(0035)
(0036) //全局变量
(0037) uchar temp[17][(howmany0+hanzishu)*2+2];
(0038) bn=0;
(0039)
(0040) char lin1[]={"时间:00:00:00 A"};
(0041) char lin2[]={"经度:00000.0000"};
(0042) char lin3[]={"纬度:0000.0000"};
(0043) char lin4[]={" 东经 北纬 "};
(0044)
(0045) uchar data_item=0; //接收到第几个字节
(0046) uchar g_Ptr = 0; //所要提取的一节信息的字节数
(0047) uchar g_Class = 0; //提取信息节数
(0048) uchar g_DataVari = 0;
(0049) uint rece_num = 0; //
(0050)
(0051)
(0052) uchar g_DisTime[6]={"000000"}; //时间
(0053) uchar g_Diss [1]={" "}; //定位状态
(0054) uchar g_Diswie [9]={"0000.1111"}; //纬度
(0055) uchar g_Disns [1]={"N"}; //北纬N/南纬S
(0056) uchar g_Disjing[10]={"00000.0000"};//经度
(0057) uchar g_Disew [1]={"E"}; //东经E/西经W
(0058) /***************************************************************************************************
(0059) 下面是 全局函数
(0060) ****************************************************************************************************/
(0061) void delay_1us(void) ;//
(0062) void delay_nus(unsigned int n);
(0063) void delay_1ms(void);
(0064) void delay_nms(unsigned int n);
(0065) void send_8bit(uchar ch);//发送8位数据
(0066) void WriteData(uchar data);//写数据
(0067) void WriteCommand(uchar command);//写地址
(0068) void guangbiao(uchar x); //光标开关,1开,0关
(0069) void lcd12864_init(void); //液晶初始化程序
(0070) void Set_display_Adress(uchar y,uchar x);//设置显示坐标:y行,x列
(0071) void display_Char(uchar y, uchar x,uchar);
(0072) void display_String(uchar y,uchar x,uchar *s) ; //显示字符串
(0073) void display_Num(uchar y,uchar x,uint num,char N);//可以显示 N 位的的整数num,(从个位起)最多显示6位
(0074) void Display_Picture(const uchar *tab );//全屏显示图形子程序 128*64
(0075) void Display_Picture32( uchar *tab );//显示图形子程序 32*32
(0076) void display_hanzi();
(0077) void leftmove32x32(uchar *tu );
(0078) void putin (uchar point);
(0079) void clearRAM (void);
(0080) void left_move(void);
(0081) void zaihanzi(void);
(0082) void left_movedisplay(void);
(0083) shownum( unsigned char i,unsigned char j, float num);//LCD显示 显示带有数码包括整数,浮点
(0084) /***************************************************************************************************
(0085) 上述为 全局函数
(0086) ****************************************************************************************************/
(0087)
(0088)
(0089) /*-----------------------------------------------------------------------
(0090) 延时函数
(0091) 系统时钟:8M
(0092) -----------------------------------------------------------------------*/
(0093) void delay_1us(void) //1us延时函数
(0094) {
(0095) asm("nop");
_delay_1us:
01F8 0000 NOP
01F9 9508 RET
_delay_nus:
i --> R20
n --> R22
01FA 940E085C CALL push_gset2
01FC 01B8 MOVW R22,R16
(0096) }
(0097) void delay_nus(unsigned int n) //N us延时函数
(0098) {
(0099) unsigned int i=0;
01FD 2744 CLR R20
01FE 2755 CLR R21
(0100) for (i=0;i<n;i++)
01FF C003 RJMP 0x0203
(0101) delay_1us();
0200 DFF7 RCALL _delay_1us
0201 5F4F SUBI R20,0xFF
0202 4F5F SBCI R21,0xFF
0203 1746 CP R20,R22
0204 0757 CPC R21,R23
0205 F3D0 BCS 0x0200
0206 940E084A CALL pop_gset2
0208 9508 RET
(0102) }
(0103) void delay_1ms(void) //1ms延时函数
(0104) {
(0105) unsigned int i;
(0106) for (i=0;i<1140;i++);
_delay_1ms:
i --> R16
0209 2700 CLR R16
020A 2711 CLR R17
020B C002 RJMP 0x020E
020C 5F0F SUBI R16,0xFF
020D 4F1F SBCI R17,0xFF
020E 3704 CPI R16,0x74
020F E0E4 LDI R30,4
0210 071E CPC R17,R30
0211 F3D0 BCS 0x020C
0212 9508 RET
_delay_nms:
i --> R20
n --> R22
0213 940E085C CALL push_gset2
0215 01B8 MOVW R22,R16
(0107) }
(0108) void delay_nms(unsigned int n) //N ms延时函数
(0109) {
(0110) unsigned int i=0;
0216 2744 CLR R20
0217 2755 CLR R21
(0111) for (i=0;i<n;i++)
0218 C003 RJMP 0x021C
(0112) delay_1ms();
0219 DFEF RCALL _delay_1ms
021A 5F4F SUBI R20,0xFF
021B 4F5F SBCI R21,0xFF
021C 1746 CP R20,R22
021D 0757 CPC R21,R23
021E F3D0 BCS 0x0219
021F 940E084A CALL pop_gset2
0221 9508 RET
_send_8bit:
i --> R20
ch --> R22
0222 940E085C CALL push_gset2
0224 2F60 MOV R22,R16
(0113) }
(0114) /*-----------------------------------------------------------------------
(0115) 延时函数
(0116) 系统时钟:8M
(0117) -----------------------------------------------------------------------*/
(0118)
(0119) /***************************************************************************************************
(0120) 下面为12864液晶模块驱动程序
(0121) ****************************************************************************************************/
(0122) //汉字图像 若将其用另文件存放则显示汉字不正常
(0123) const uchar HZ[19][32]={
(0124) /*-- 文字: 过 --*/
(0125) /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
(0126) 0x40,0x10,0x20,0x10,0x30,0x10,0x20,0x10,0x07,0xFE,0x00,0x10,0x02,0x10,0xE1,0x10,
(0127) 0x21,0x90,0x21,0x10,0x20,0x10,0x20,0x50,0x20,0x20,0x58,0x00,0x87,0xFE,0x00,0x00,
(0128)
(0129) //下面是数字10: 构造分法,用1与0的数码,把0的数码交替地放在1代码后面
(0130) //0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x18,0x70,0x24,0x10,0x42,0x10,0x42,0x10,0x42,
(0131) //0x10,0x42,0x10,0x42,0x10,0x42,0x10,0x42,0x10,0x42,0x7c,0x18,0x00,0x00,0x00,0x00,
(0132)
(0133) /*-- 文字: 去 --*/
(0134) /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
(0135) 0x01,0x00,0x01,0x00,0x01,0x00,0x3F,0xFC,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,
(0136) 0x7F,0xFE,0x02,0x00,0x06,0x00,0x08,0x20,0x10,0x10,0x3F,0xF8,0x10,0x10,0x00,0x00,
(0137)
(0138) /*-- 文字: 属 --*/
(0139) /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
(0140) 0x3F,0xFC,0x20,0x04,0x3F,0xFC,0x20,0x00,0x2F,0xF8,0x20,0x80,0x27,0xF8,0x24,0x88,
(0141) 0x27,0xF8,0x20,0x80,0x2F,0xFC,0x28,0xA4,0x48,0xF4,0x4B,0x14,0x88,0x04,0x08,0x0C,
(0142)
(0143) /*-- 文字: 于 --*/
(0144) /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
(0145) 0x00,0x00,0x3F,0xFC,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0xFF,0xFE,0x01,0x00,
(0146) 0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x09,0x00,0x05,0x00,0x02,0x00,
(0147)
(0148) /*-- 文字: 死 --*/
(0149) /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
(0150) 0x00,0x00,0x7F,0xFE,0x08,0x40,0x08,0x40,0x1F,0x40,0x11,0x46,0x21,0x58,0x32,0x60,
(0151) 0x4A,0x40,0x8A,0x40,0x04,0x40,0x04,0x42,0x08,0x42,0x30,0x42,0xC0,0x3E,0x00,0x00,
(0152)
(0153) /*-- 文字: 神 --*/
(0154) /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
(0155) 0x20,0x20,0x10,0x20,0x10,0x20,0xFD,0xFC,0x05,0x24,0x09,0x24,0x11,0xFC,0x39,0x24,
(0156) 0x55,0x24,0x95,0xFC,0x11,0x24,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,
(0157)
(0158) /*-- 11文字: 空字 --*/
(0159) /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
(0160) 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//11
(0161) 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
(0162) /*-- 文字: 现 --*/
(0163) /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
(0164) 0x00,0x00,0xFF,0xF8,0x12,0x08,0x12,0x48,0x12,0x48,0x12,0x48,0x7E,0x48,0x12,0x48,
(0165) 0x12,0x48,0x12,0xA8,0x1C,0xA0,0xE1,0x22,0x01,0x22,0x02,0x22,0x04,0x1E,0x08,0x00,
(0166)
(0167) /*-- 文字: 在 --*/
(0168) /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
(0169) 0x02,0x00,0x02,0x00,0x7F,0xFE,0x04,0x00,0x04,0x00,0x08,0x40,0x18,0x40,0x17,0xFC,
(0170) 0x30,0x40,0x50,0x40,0x90,0x40,0x10,0x40,0x10,0x40,0x17,0xFE,0x10,0x00,0x00,0x00,
(0171)
(0172) /*-- 文字: 与 --*/
(0173) /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
(0174) 0x00,0x00,0x08,0x00,0x08,0x04,0x0F,0xFE,0x08,0x00,0x08,0x00,0x0F,0xFC,0x00,0x04,
(0175) 0x00,0x04,0x00,0x24,0x7F,0xF4,0x00,0x04,0x00,0x04,0x00,0x48,0x00,0x30,0x00,0x00,
(0176)
(0177) /*-- 文字: 未 --*/
(0178) /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
(0179) 0x01,0x00,0x01,0x00,0x01,0x00,0x3F,0xF8,0x01,0x00,0x01,0x00,0xFF,0xFE,0x03,0x00,
(0180) 0x03,0x80,0x05,0x40,0x05,0x20,0x09,0x18,0x31,0x0E,0xC1,0x04,0x01,0x00,0x01,0x00,
(0181)
(0182) /*-- 文字: 来 --*/
(0183) /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
(0184) 0x01,0x00,0x01,0x00,0x3F,0xFC,0x01,0x00,0x09,0x30,0x05,0x20,0x03,0x40,0x7F,0xFE,
(0185) 0x01,0x80,0x03,0x40,0x05,0x20,0x09,0x18,0x31,0x0E,0xC1,0x04,0x01,0x00,0x01,0x00,
(0186)
(0187) /*-- 文字: 却 --*/
(0188) /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
(0189) 0x08,0x00,0x08,0x7C,0x08,0x44,0x7F,0x44,0x08,0x44,0x08,0x44,0x08,0x44,0xFF,0x44,
(0190) 0x10,0x44,0x12,0x44,0x21,0x44,0x27,0xD4,0x79,0x48,0x20,0x40,0x00,0x40,0x00,0x40,
(0191)
(0192) /*-- 文字: 由 --*/
(0193) /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
(0194) 0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x3F,0xF8,0x21,0x08,0x21,0x08,0x21,0x08,
(0195) 0x3F,0xF8,0x21,0x08,0x21,0x08,0x21,0x08,0x21,0x08,0x3F,0xF8,0x20,0x08,0x00,0x00,
(0196)
(0197) /*-- 文字: 我 --*/
(0198) /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
(0199) 0x06,0x40,0x38,0x50,0x08,0x48,0x08,0x48,0x08,0x40,0xFF,0xFE,0x08,0x40,0x08,0x48,
(0200) 0x0E,0x28,0x38,0x30,0xC8,0x20,0x08,0x50,0x09,0x92,0x08,0x0A,0x28,0x06,0x10,0x02,
(0201)
(0202)
(0203) /*-- 文字: 们 --*/
(0204) /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
(0205) 0x0A,0x00,0x09,0x00,0x11,0xBC,0x11,0x04,0x34,0x04,0x24,0x04,0x64,0x04,0xA4,0x04,
(0206) 0x24,0x04,0x24,0x04,0x24,0x04,0x24,0x04,0x24,0x04,0x24,0x14,0x24,0x08,0x00,0x00,
(0207)
(0208)
(0209) /*-- 文字: 掌 --*/
(0210) /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
(0211) 0x11,0x10,0x09,0x20,0x7F,0xFE,0x40,0x04,0x0F,0xE0,0x08,0x20,0x0F,0xE0,0x00,0x00,
(0212) 0x3F,0xF0,0x01,0x00,0x3F,0xF8,0x01,0x00,0x7F,0xFC,0x01,0x00,0x05,0x00,0x02,0x00,
(0213)
(0214) /*-- 文字: 握 --*/
(0215) /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
(0216) 0x20,0x00,0x23,0xFC,0x22,0x04,0xFB,0xFC,0x22,0x00,0x23,0xFE,0x2A,0x40,0x32,0x88,
(0217) 0x63,0xFC,0xA2,0x24,0x22,0x20,0x23,0xFC,0x24,0x20,0x24,0x20,0xAB,0xFE,0x40,0x00,
(0218) };
(0219)
(0220) //图象数组
(0221) uchar tu[]={
(0222) 0x00,0x01,0x80,0x00,0x00,0x01,0x80,0x00,0x00,0x03,0xC0,0x00,0x00,0x03,0xC0,0x00,
(0223) 0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x0F,0xF0,0x00,0x00,0x0F,0xF0,0x00,
(0224) 0x00,0x1F,0xF8,0x00,0x00,0x1F,0xF8,0x00,0x00,0x3F,0xFC,0x00,0x00,0x3F,0xFC,0x00,
(0225) 0xFF,0xFF,0xFF,0xFF,0x7F,0xFF,0xFF,0xFF,0x1F,0xFF,0xFF,0xFC,0x07,0xFF,0xFF,0xF0,
(0226) 0x03,0xFF,0xFF,0xE0,0x01,0xFF,0xFF,0x80,0x03,0xFF,0xFF,0xC0,0x03,0xFF,0xFF,0xC0,
(0227) 0x07,0xFF,0xFF,0xE0,0x07,0xFF,0xFF,0xE0,0x0F,0xFF,0xFF,0xF0,0x0F,0xFE,0x3F,0xF0,
(0228) 0x1F,0xF8,0x1F,0xF8,0x1F,0xE0,0x07,0xF8,0x3F,0xC0,0x01,0xFC,0x3F,0x00,0x00,0xFC,
(0229) 0x7C,0x00,0x00,0x3E,0x78,0x00,0x00,0x1E,0xE0,0x00,0x00,0x07,0x80,0x00,0x00,0x01,
(0230) };
(0231)
(0232) //发送8位数据
(0233) void send_8bit(uchar ch)
(0234) {
(0235) char i;
(0236) for(i=0;i<8;i++)
0225 2744 CLR R20
0226 C013 RJMP 0x023A
(0237) { setCKL;
0227 9ADB SBI 0x1B,3
0228 E001 LDI R16,1
0229 E010 LDI R17,0
022A DFCF RCALL _delay_nus
(0238) if((ch<<i)&0x80)setRW;
022B 2F06 MOV R16,R22
022C 2F14 MOV R17,R20
022D 940E0892 CALL lsl8
022F 2F80 MOV R24,R16
0230 7880 ANDI R24,0x80
0231 F011 BEQ 0x0234
0232 9ADA SBI 0x1B,2
0233 C001 RJMP 0x0235
(0239) else clearRW;
0234 98DA CBI 0x1B,2
(0240) clearCKL;
0235 98DB CBI 0x1B,3
0236 E001 LDI R16,1
0237 E010 LDI R17,0
0238 DFC1 RCALL _delay_nus
0239 9543 INC R20
023A 3048 CPI R20,0x8
023B F358 BCS 0x0227
023C 940E084A CALL pop_gset2
023E 9508 RET
_WriteData:
data --> R20
023F 940E085E CALL push_gset1
0241 2F40 MOV R20,R16
(0241) }
(0242) }
(0243) //写数据
(0244) void WriteData(uchar data)//
(0245) {
(0246) setRS;
0242 9AD9 SBI 0x1B,1
(0247) send_8bit(0xfa);
0243 EF0A LDI R16,0xFA
0244 DFDD RCALL _send_8bit
(0248) send_8bit(data&0xf0);
0245 2F04 MOV R16,R20
0246 7F00 ANDI R16,0xF0
0247 DFDA RCALL _send_8bit
(0249) send_8bit(data<<4);
0248 2F04 MOV R16,R20
0249 700F ANDI R16,0xF
024A 9502 SWAP R16
024B DFD6 RCALL _send_8bit
(0250) clearRS;
024C 98D9 CBI 0x1B,1
024D 940E0861 CALL pop_gset1
024F 9508 RET
_WriteCommand:
command --> R20
0250 940E085E CALL push_gset1
0252 2F40 MOV R20,R16
(0251) }
(0252) //写地址
(0253) void WriteCommand(uchar command)//
(0254) {
(0255) setRS;
0253 9AD9 SBI 0x1B,1
(0256) send_8bit(0xf8);
0254 EF08 LDI R16,0xF8
0255 DFCC RCALL _send_8bit
(0257) send_8bit(command&0xf0);
0256 2F04 MOV R16,R20
0257 7F00 ANDI R16,0xF0
0258 DFC9 RCALL _send_8bit
(0258) send_8bit(command<<4);
0259 2F04 MOV R16,R20
025A 700F ANDI R16,0xF
025B 9502 SWAP R16
025C DFC5 RCALL _send_8bit
(0259) clearRS;
025D 98D9 CBI 0x1B,1
025E 940E0861 CALL pop_gset1
0260 9508 RET
_guangbiao:
x --> R20
0261 940E085E CALL push_gset1
0263 2F40 MOV R20,R16
(0260) }
(0261) //光标开关,1开,0关
(0262) void guangbiao(uchar x) //
(0263) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -