📄 code.c
字号:
#include<AT89X51.H>
void port_init(void);
void main(void)
{
unsigned char dflag,send_code;
unsigned int mod;
unsigned char i = 0,j = 0,data_buf;
unsigned char data latitude[11];//="(244)6.5211N";
unsigned char data longitude[12];//="(1210)0.1536E";
unsigned char data recieve[12];//="(1210)0.1536E";
port_init();
while(1)
{
while(!RI)
{}
data_buf = SBUF;
if(data_buf == '$')
break;
RI = 0;
}
TR1 = 0;
RI = 0;
/*接收数据 $GPRMC,062321,V,2446.5211,N,12100.1536,E,000.0,000.0,030222,,*0C */
do
{
while(!RI)
{}
data_buf = SBUF;
if(data_buf == ',') dflag++;
if(dflag == 3 && data_buf != ',')
{
latitude[i] = data_buf;
i++;
}
if(dflag == 4 && data_buf != ',')
{
latitude[i] = data_buf;
latitude[i+1] = '\0'; //以字符串的方式结束
}
if(dflag == 5 && data_buf != ',')
{
longitude[j] = data_buf;
j++;
}
if(dflag == 6 && data_buf != ',')
{
longitude[j] = data_buf;
longitude[j+1] = '\0'; //以字符串的方式结束
}
RI = 0;
}while(data_buf != 'E'); // latitude[11]: (244)6.5211N longitude[12]: (1210)0.1536E
RI = 0;
REN = 0; // forbid recieve
TR1 = 1; //握手信号
for(i = 0;i < 3;i ++)
{
SBUF = 0xFF;
while(!TI)
{}
TI = 0;
for(j = 0;j < 100;j ++)
{}
}
TR1 = 0;
for(i = 0;i < 14;i ++)
{
if(i < 7)
send_code = latitude[i + 3];
else
send_code = longitude[i - 3];
switch(send_code)
{
case '0': mod = 0x00;break; // 0b00000000 last bit odd check
case '1': mod = 0x17;break; // 0b00010111
case '2': mod = 0x2B;break; // 0b00101011
case '3': mod = 0x3C;break; // 0b00111100
case '4': mod = 0x4D;break; // 0b01001101
case '5': mod = 0x5A;break; // 0b01011010
case '6': mod = 0x66;break; // 0b01100110
case '7': mod = 0x71;break; // 0b01110001
case '8': mod = 0x8E;break; // 0b10001110
case '9': mod = 0x99;break; // 0b10011001
case '.': mod = 0xA5;break; // 0b10100101
case 'N': mod = 0xB2;break; // 0b10110010
case 'E': mod = 0xC3;break; // 0b11000011
case 'W': mod = 0xD4;break; // 0b11010100
case 'S': mod = 0xE8;break; // 0b11101000
default: break; // wrong coded , noted
}
TR1 = 1;
SBUF = mod;
while(!TI)
{}
TI = 0;
}
TR1 = 0;
}
void port_init(void)
{
TMOD=0x20;
PCON=0; //SMOD=0
SCON=0x50; // MODE 1
TH1=0xCC; //600baud 12MHz oscillator frequence,SMOD=0
TL1=0xCC;
TR1=1; //Start timer 1
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -