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

📄 main.c

📁 这个文档程序主要应用了单片机的串行通讯部分
💻 C
📖 第 1 页 / 共 2 页
字号:
	while(!((temp[i]==0xee)&&(temp[i+1]==0xee)&&(temp[i+2]==0xee)))
	{
		eep_write_byte(addrh,addrl++,temp[i++]);
		//temp[i-1]=0xee;
	}
	for(i=0;i<3;i++)eep_write_byte(addrh,addrl+i,0xee);//写结束码

}

void storegprsnews(void)
{
	uchar i;	
	for(i=0;i<82;i++)gprsres[i]=temp[i+6];
}



/************************************载入消息*******************************/
void loadnews(uchar m)
{	
	uchar addrh,addrl;
	uint i=0;
	if(!m)//载入新消息
	{
		if     (newnewsf2){addrh=0x84;addrl=0x00;newnewsf2=0;oldnewsf2=1;}
		else if(newnewsf1){addrh=0x82;addrl=0x00;newnewsf1=0;oldnewsf1=1;}
		else if(newnewsf0){addrh=0x80;addrl=0x00;newnewsf0=0;oldnewsf0=1;}
		else {tiaoshi=1;lightflag=0;}
	}
	else//载入旧消息
	{
		if     (m==1){addrh=0x80;addrl=0x00;}
		else if(m==2){addrh=0x82;addrl=0x00;}
		else if(m==3){addrh=0x84;addrl=0x00;}
		else {tiaoshi=1;lightflag=0;}
	}
	for(i=0;i<256;i++){temp[i]=eep_read_byte(addrh,addrl++);}
}
/***********************************列表旧消息******************************/
void showoldnews(void)
{
	clrscr(0);clrscr(1);clrscr(2);
	lcd_prt_char(72,'j');lcd_prt_char(74,'k');//退出
	if(oldnewsf0){lcd_prt_char(78,'l');lcd_prt_char(80,'m');lcd_prt_letter(82,1,0);}
	else {lcd_prt_char(79,'s');lcd_prt_char(81,'t');}//图象
	if(oldnewsf1){lcd_prt_char(84,'l');lcd_prt_char(86,'m');lcd_prt_letter(88,2,0);}
	else {lcd_prt_char(85,'s');lcd_prt_char(87,'t');}//图象
	if(oldnewsf2){lcd_prt_char(90,'l');lcd_prt_char(92,'m');lcd_prt_letter(94,3,0);}
	else {lcd_prt_char(92,'s');lcd_prt_char(94,'t');}//图象
}


/************************************显示消息*******************************/
void displaynews(uchar startstr)
{
	uchar position=0;
	uchar *str=temp;
	
	clrscr(0);clrscr(1);clrscr(2);
	while(!((*(startstr+str)==0xee)&&(*(startstr+str+1)==0xee)&&(*(startstr+str+2)==0xee)))
	{
		lcd_prt_letter(position++,(*(startstr+str)>>4)&0x0f,0);
		lcd_prt_letter(position++,(*(startstr+str))&0x0f,0);
		str++;
		lcd_prt_letter(position++,0x2a,0);

		if(position==96){lcd_prt_letter(95,0x2d,0);break;}//满屏,,跳出循环
	}
	if(position<92){statefinish=0;state=0x28;}
	if(position>=92&&position<96){lcd_prt_letter(95,0x2d,0);newsoverf=1;}
		
	//startposition=0;	
}

/********************************辅助显示GPRS配置***************************/
void adisplaygprs(uchar point,uint num,uchar ipf)
{
	uchar temppoint;
	if(gprsturner>100)temppoint=gprsturner-100;
	else temppoint=gprsturner;

	if(!ipf)//IP不显示前面的0
	lcd_prt_letter(point,num/1000,temppoint==point);
	num%=1000;
	lcd_prt_letter(point+1,num/100,temppoint==point+1);
	num%=100;
	lcd_prt_letter(point+2,num/10,temppoint==point+2);
	num%=10;
	lcd_prt_letter(point+3,num,temppoint==point+3);	
}

/**********************************显示GPRS配置*****************************/
void displaygprs(void)
{
	uchar i;
	uint num;
	if(gprsturner<100)
	{
		if(!gprsturner)
		{
			gprsturner=8;
			clrscr(0);clrscr(1);clrscr(2);
			lcd_prt_char(0,'M');//“手机号码”
			lcd_prt_char(2,'N');
			lcd_prt_char(4,'O');
			lcd_prt_char(6,'P');
			lcd_prt_char(24,'I');//“心跳时间”
			lcd_prt_char(26,'J');
			lcd_prt_char(28,'K');
			lcd_prt_char(30,'L');
			lcd_prt_char(36,'Q');//“接入点”
			lcd_prt_char(38,'R');
			lcd_prt_char(40,'S');
			lcd_prt_char(48,'u');//“重连时间”
			lcd_prt_char(50,'E');
			lcd_prt_char(52,'K');
			lcd_prt_char(54,'L');
			lcd_prt_char(60,'U');//“断开时间”
			lcd_prt_char(62,'V');
			lcd_prt_char(64,'K');
			lcd_prt_char(66,'L');
			lcd_prt_char(72,'j');//“退出”
			lcd_prt_char(74,'k');//
			lcd_prt_char(79,'v');//“→”
			lcd_prt_letter(86,0x30,0);//“+_”
			lcd_prt_char(92,'G');//“配置”
			lcd_prt_char(94,'H');
		}
		else
		{		
			//手机号码	
			for(i=0;i<11;i++)lcd_prt_letter(8+i,gprsres[23+i]-0x30,gprsturner==8+i);
			//心跳时间
			num=gprsres[14]*5;
			adisplaygprs(32,num,0);
			//接入点
			for(i=0;i<gprsres[42];i++)lcd_prt_letter(42+i,gprsres[43+i],gprsturner==42+i);
			//重连时间
			num=(gprsres[34]*256+gprsres[35])*5;
			adisplaygprs(56,num,0);
			//断开时间
			num=(gprsres[36]*256+gprsres[37])*5;
			adisplaygprs(68,num,0);
		}
	}
	else
	{
		if(gprsturner==100)
		{
			gprsturner=106;
			clrscr(0);clrscr(1);clrscr(2);
			lcd_prt_char(0,'o');//“终端号”
			lcd_prt_char(2,'Y');
			lcd_prt_char(4,'O');
			lcd_prt_char(24,'Z');//“远程IP”
			lcd_prt_char(26,'w');
			lcd_prt_letter(28,0x18,0);
			lcd_prt_letter(29,0x1f,0);
			lcd_prt_char(48,'W');//“本地端口”
			lcd_prt_char(50,'X');
			lcd_prt_char(52,'Y');
			lcd_prt_char(54,'T');
			lcd_prt_char(60,'Z');//“远程端口”
			lcd_prt_char(62,'w');
			lcd_prt_char(64,'Y');
			lcd_prt_char(66,'T');
			lcd_prt_char(72,'j');//“退出”
			lcd_prt_char(74,'k');//
			lcd_prt_char(79,'v');//“→”
			lcd_prt_letter(86,0x30,0);//“+_”
			lcd_prt_char(92,'G');//“配置”
			lcd_prt_char(94,'H');
		}
		else
		{
			//终端号
			lcd_prt_letter(6,(gprsres[12]>>4)&0x0f,gprsturner==106);
			lcd_prt_letter(7,gprsres[12]&0x0f,gprsturner==107);
			lcd_prt_letter(8,(gprsres[13]>>4)&0x0f,gprsturner==108);
			lcd_prt_letter(9,gprsres[13]&0x0f,gprsturner==109);
			//远程IP
			num=gprsres[0];
			adisplaygprs(30-1,num,1);//留出千位,,位置内部自加一
			lcd_prt_letter(33,0x2f,0);
			num=gprsres[1];
			adisplaygprs(34-1,num,1);
			lcd_prt_letter(37,0x2f,0);
			num=gprsres[2];
			adisplaygprs(38-1,num,1);
			lcd_prt_letter(41,0x2f,0);
			num=gprsres[3];
			adisplaygprs(42-1,num,1);
			//本地端口
			num=(gprsres[10]*256+gprsres[11]);
			adisplaygprs(56,num,0);
			//远程端口
			num=(gprsres[4]*256+gprsres[5]);
			adisplaygprs(68,num,0);
		}
	}

}
/**********************************显示CDMA配置*****************************/
void displaycdma(void)
{
	//uchar i;
	uint num;
	if(gprsturner<100)
	{
		if(!gprsturner)
		{
			gprsturner=6;
			clrscr(0);clrscr(1);clrscr(2);
			lcd_prt_char(0,'o');//“终端号”
			lcd_prt_char(2,'Y');
			lcd_prt_char(4,'O');
			lcd_prt_char(24,'Z');//“远程IP”
			lcd_prt_char(26,'w');
			lcd_prt_letter(28,0x18,0);
			lcd_prt_letter(29,0x1f,0);
			lcd_prt_char(48,'W');//“本地端口”
			lcd_prt_char(50,'X');
			lcd_prt_char(52,'Y');
			lcd_prt_char(54,'T');
			lcd_prt_char(60,'Z');//“远程端口”
			lcd_prt_char(62,'w');
			lcd_prt_char(64,'Y');
			lcd_prt_char(66,'T');
			lcd_prt_char(72,'j');//“退出”
			lcd_prt_char(74,'k');//
			lcd_prt_char(79,'v');//“→”
			lcd_prt_letter(86,0x30,0);//“+_”
			lcd_prt_char(92,'G');//“配置”
			lcd_prt_char(94,'H');
		}
		else
		{
			//终端号
			lcd_prt_letter(6,(gprsres[8]>>4)&0x0f,gprsturner==6);
			lcd_prt_letter(7,gprsres[8]&0x0f,gprsturner==7);
			lcd_prt_letter(8,(gprsres[9]>>4)&0x0f,gprsturner==8);
			lcd_prt_letter(9,gprsres[9]&0x0f,gprsturner==9);
			//远程IP
			num=gprsres[0];
			adisplaygprs(30-1,num,1);//留出千位,,位置内部自加一
			lcd_prt_letter(33,0x2f,0);
			num=gprsres[1];
			adisplaygprs(34-1,num,1);
			lcd_prt_letter(37,0x2f,0);
			num=gprsres[2];
			adisplaygprs(38-1,num,1);
			lcd_prt_letter(41,0x2f,0);
			num=gprsres[3];
			adisplaygprs(42-1,num,1);
			//本地端口
			num=(gprsres[6]*256+gprsres[7]);
			adisplaygprs(56,num,0);
			//远程端口
			num=(gprsres[4]*256+gprsres[5]);
			adisplaygprs(68,num,0);
		}
	}
	else
	{
		if(gprsturner==100)
		{
			gprsturner=133;
			clrscr(0);clrscr(1);clrscr(2);
			lcd_prt_char(0,'Z'+1);//“显示IP”
			lcd_prt_char(2,'Z'+2);
			lcd_prt_letter(4,0x18,0);
			lcd_prt_letter(5,0x1f,0);
			lcd_prt_char(24,'I');//“心跳时间”
			lcd_prt_char(26,'J');
			lcd_prt_char(28,'K');
			lcd_prt_char(30,'L');
			lcd_prt_char(72,'j');//“退出”
			lcd_prt_char(74,'k');//
			lcd_prt_char(79,'v');//“→”
			lcd_prt_letter(86,0x30,0);//“+_”
			lcd_prt_char(92,'G');//“配置”
			lcd_prt_char(94,'H');
		}
		else
		{
			//显示IP
			num=gprsres[10];
			adisplaygprs(6-1,num,1);//留出千位,,位置内部自加一
			lcd_prt_letter(9,0x2f,0);
			num=gprsres[11];
			adisplaygprs(10-1,num,1);
			lcd_prt_letter(13,0x2f,0);
			num=gprsres[12];
			adisplaygprs(14-1,num,1);
			lcd_prt_letter(17,0x2f,0);
			num=gprsres[13];
			adisplaygprs(18-1,num,1);
			//心跳时间
			num=gprsres[15]*5;
			adisplaygprs(32,num,0);
		}
	}

}
/************************************定时器0********************************/
//定时器0初始化,,用于时间机制	  
void time0_init(void)
{
	TMOD&=0xf0;
	TMOD|=0x01;//T0工作方式1
	
	TL0=0x00;//初值28672
	TH0=0x70;

	TR0=1;
}

/************************************时间机制*******************************/
void time_manager(void)
{
	//uchar *ptr;
	//重设定时值
	TF0=0;
	TL0+=0x00;
	TH0+=0x70;
	
	//下面是时间处理,,24h为一个循环
	timer++;
	if(timer==50)
	{
		timer=0;
		second++;				
		if(second==60)
		{
			second=0;
			minute++;
			if(minute==60)
			{
				minute=0;
				hour++;
				if(hour==24)
			 	{
				 	second=0;
					minute=0;
				 	hour=0;
				}
			}
		}
	}
	//下面开始检测
	//gprs回复检测
	if(gprscarryf)
	{
		if((signed char)(second-gprssendtime)>3||(signed char)(gprssendtime-second)>3)
		{gprscarryf=0;gprslostf=1;}
	}
	//数据接收检测		
	if(slimitf)//间隔小于一秒的数据将被认为是同一串数据
	{
		
		if((signed char)(second-secondcopy)>1||(signed char)(secondcopy-second)>1)
		{
			slimitf=0;//解除秒检测			
			temp[datacounter++]=0xee;//写结束码,,这里要求收到数据小于253,,不然会出错
			temp[datacounter++]=0xee;
			temp[datacounter++]=0xee;

			if(gprscarryf)
			{
				
				storegprsnews();
				datacounter=0;//计数复位,,准备接收新数据
				gprscarryf=0;gprsresf=1;//
				

			}
			else
			{
				newnewsf=1;//设置收到数据标志
				storenews();//内部标志了newnewsf0或者newnewsf1或者newnewsf2			
				datacounter=0;//计数复位,,准备接收新数据
				scrfreshf=1;
			}
						
			//usemark++;
			//if(usemark==3)usemark=0;
		}
	}
	//消息显示检测
	if(mlimitf)
	{
		if((signed char)(minute-minutecopy)>1||(signed char)(minutecopy-minute)>1)
		{mlimitf=0;state=0x00;oldnewsf=1;scrfreshf=1;}//解除分检测
	}
}


/**********************************设备初始化*******************************/
//所有设备初始化
void device_init(void)
{
	WDT_CONTR=0x3f;//开启看门狗
	time0_init();
	lcd_init();//液显初始化
	serial_init();//串口初始化
}
/************************************纠错程序*******************************/
//纠错程序
/*void rectify(void)
{
	//标志位
	
	lcd_prt_letter(0,ti,0);
}*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -