📄 main.c
字号:
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 + -