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

📄 code.c

📁 此程序实现无线信标定位
💻 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 + -