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

📄 gps.lst

📁 利用AVRM16单片机读与GPS接收模块进行通信
💻 LST
📖 第 1 页 / 共 2 页
字号:
__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 + -