{
_delay(984);
}
}
voidLcd_WriteCmd(unsignedcharcmd)
{
unsignedchari;
_delay(200);
LCD_RS=1;
for(i=5;i>0;i--)
{
LCD_RW=1;
LCD_EN=1;
LCD_EN=0;
}
for(i=3;i>0;i--)
{
LCD_RW=0;
LCD_EN=1;
LCD_EN=0;
}
for(i=4;i>0;i--)
{
cmd=cmd<<1;
LCD_RW=CY;
LCD_EN=1;
LCD_EN=0;
}
for(i=4;i>0;i--)
{
LCD_RW=0;
LCD_EN=1;
LCD_EN=0;
}
for(i=4;i>0;i--)
{
cmd=cmd<<1;
LCD_RW=CY;
LCD_EN=1;
LCD_EN=0;
}
for(i=4;i>0;i--)
{
LCD_RW=0;
LCD_EN=1;
LCD_EN=0;
}
LCD_RS=0;
}
voidLcd_WriteDat(unsignedcharLCDdata)
{
unsignedchari;_delay(200);
LCD_RS=1;
for(i=5;i>0;i--)
{
LCD_RW=1;
LCD_EN=1;
LCD_EN=0;
}
LCD_RW=0;//RW
LCD_EN=1;
LCD_EN=0;
LCD_RW=1;//RS
LCD_EN=1;
LCD_EN=0;
LCD_RW=0;
LCD_EN=1;
LCD_EN=0;
for(i=4;i>0;i--)
{
LCDdata=LCDdata<<1;
LCD_RW=CY;
LCD_EN=1;
LCD_EN=0;
}
for(i=4;i>0;i--)
{
LCD_RW=0;
LCD_EN=1;
LCD_EN=0;
}
for(i=4;i>0;i--)
{
LCDdata=LCDdata<<1;
LCD_RW=CY;
LCD_EN=1;
LCD_EN=0;
}
for(i=4;i>0;i--)
{
LCD_RW=0;
LCD_EN=1;
LCD_EN=0;
}
LCD_RS=0;
}
voidLcd_Init(void)
{
//LCD_PSB=0;//并口方式
Lcd_WriteCmd(0x34);//扩充指令操作
_delay(500);
Lcd_WriteCmd(0x30);//基本指令操作
_delay(500);
Lcd_WriteCmd(0x0C);//显示开,关光标
_delay(500);
Lcd_WriteCmd(0x01);//清除LCD的显示内容
delayms(15);
Lcd_WriteCmd(0x06);
_delay(500);
}
voidgps_init()
{
uchari;
Lcd_WriteCmd(0x80);
for(i=0;i<12;i++)
{Lcd_WriteDat(init0[i]);_delay(50);}
Lcd_WriteCmd(0x90);
for(i=0;i<12;i++)
{Lcd_WriteDat(init1[i]);_delay(50);}
Lcd_WriteCmd(0x88);
for(i=0;i<12;i++)
{Lcd_WriteDat(init2[i]);_delay(50);}
Lcd_WriteCmd(0x98);
for(i=0;i<12;i++)
{Lcd_WriteDat(init3[i]);_delay(50);}
}
voidLcd_SetPos(ucharX,ucharY)
{
ucharpos;
if(X==0)
{X=0x80;}
elseif(X==1)
{X=0x90;}
elseif(X==2)
{X=0x88;}
elseif(X==3)
{X=0x98;}
pos=X+Y;
Lcd_WriteCmd(pos);//显示地址
}
voidLcd_DispLine(char*str)
{
inti=0;
while(str[i]!
='\0')
{
Lcd_WriteDat(str[i]);
i++;
}
}
voidUart_rinit()
{
_ucr1=0x80;//设置BNO,PRT,PREN,STOP位
_ucr2=0x64;//使能TXEN、RXEN
_brg=51;//设置波特率,8M,9600
_euri=1;//开串口中断
_emi=1;//开总中断
//_rxen=1;
}
voidUart_tinit()
{
_ucr1=0x80;//设置BNO,PRT,PREN,STOP位
_ucr2=0xe4;//使能TXEN、RXEN
_brg=51;//设置波特率,8M,9600
_euri=1;//开串口中断
_emi=1;//开总中断
//_rxen=1;
}
voidsendchar(unsignedchardata)
{
unsignedchari;
_txen=1;
i=_usr;
_txr_rxr=data;
_delay(2000);//延时
}
voidsend_AT()
{
ucharp;
for(p=0;p<2;p++)
{sendchar(AT[p]);}
sendchar(0x0D);//回车指令
sendchar(0x0A);//换行指令
}
voidsend_AT_CMGSS()//设置短信号码
{
ucharp;
for(p=0;p<24;p++)
sendchar(AT_CMGSS[p]);
sendchar(0x0D);//回车指令
sendchar(0x0A);//换行指令
}
voidsend_AT_CMGSS1()//设置短信号码
{
ucharp;
for(p=0;p<8;p++)
sendchar(AT_CMGSS[p]);
sendchar('"');
sendchar('+');
sendchar('8');
sendchar('6');
for(p=0;p<11;p++)
sendchar(telnum[p]);
sendchar('"');
sendchar(0x0D);//回车指令
sendchar(0x0A);//换行指令
}
voidsend_AT_CMGF()//设置短信格式
{
ucharp;
for(p=0;p<9;p++)
sendchar(AT_CMGF[p]);
sendchar(0x0D);//回车指令
sendchar(0x0A);//换行指令
}
voidsend_shuju1()//发送数据
{
ucharm;
sendchar('*');
sendchar(longitude_Degree/10+'0');
sendchar(longitude_Degree%10+'0');
sendchar('.');
sendchar(longitude_Cent/10+'0');
sendchar(longitude_Cent%10+'0');
sendchar(longitude_Second/100+'0');
sendchar(longitude_Second%100/10+'0');
sendchar(longitude_Second%10+'0');
sendchar('#');
sendchar('(');
sendchar(latitude_Degree/100+'0');
sendchar(latitude_Degree%100/10+'0');
sendchar(latitude_Degree%10+'0');
sendchar('.');
sendchar(latitude_Cent/10+'0');
sendchar(latitude_Cent%10+'0');
sendchar(latitude_Second/100+'0');
sendchar(latitude_Second%100/10+'0');
sendchar(latitude_Second%10+'0');
sendchar(')');
sendchar('<');
if(speed/100!
=0)
sendchar(speed/100+'0');
sendchar(speed%100/10+'0');
sendchar(speed%10+'0');
sendchar('>');
sendchar('%');
sendchar(direction/100+'0');
sendchar(direction%100/10+'0');
sendchar(direction%10+'0');
sendchar('&');
}
voidstart_GSM()
{
ruanqi=0;
delayms(500);
ruanqi=1;
delayms(500);
}
voidshining(ucharn)
{
uchari;
for(i=0;i{_pa3=0;delayms(100);
_pa3=1;delayms(100);
}
}
voidsendshuju()
{
send_AT_CMGSS();//发送短信号码
delayms(1000);//延时,TC35会返回一个">"符号
send_shuju1();//发送数据
sendchar(0x0D);//回车指令
sendchar(0x0A);//换行指令
delayms(20);
sendchar(0x1A);//发送结束标志
shining(3);
}
voidsendshuju2()
{
send_AT_CMGSS1();//发送短信号码
delayms(1000);//延时,TC35会返回一个">"符号
send_shuju1();//发送数据
sendchar('h');
sendchar('e');
sendchar('l');
sendchar('p');
sendchar(0x0D);//回车指令
sendchar(0x0A);//换行指令
delayms(20);
sendchar(0x1A);//发送结束标志
shining(3);
}
voidGSM_INIT(void)//初始化TC35模块
{
unsignedinti;
//for(i=10;i>0;i--)
//DataSbuf[i]=0;
send_AT();
delayms(1000);
shining(4);
}
ucharGetComma(ucharnum,char*str)
{
uchari,j=0;
intlen=0;
while(str[len]!
='\0')
len++;
for(i=0;i{
if(str[i]==',')
j++;
if(j==num)
returni+1;
}
return0;
}
voidget_num(uinta)
{
uchari,j,k;
i=GetComma(a,rev_buf);
j=GetComma(a+1,rev_buf);
k=j-i-1;
for(j=0;j{
buf1[j]=rev_buf[i];
i++;
}
}
intGPS_RMC_Parse()
{
ucharch,status;
ch=rev_buf[5];
status=rev_buf[GetComma(2,rev_buf)];
if(ch=='C')
{
if(status=='A')
{
NS=rev_buf[GetComma(4,rev_buf)];
EW=rev_buf[GetComma(6,rev_buf)];
return1;
}
}
return0;
}
voidInt_To_Str(intx,char*Str)
{
intt;
char*Ptr,Buf[5];
inti=0;
Ptr=Str;
if(x<10)//当整数小于10时,转化为"0x"的格式
{
*Ptr++='0';
*Ptr++=x+0x30;
}
else
{
while(x>0)
{
t=x%10;
x=x/10;
Buf[i++]=t+0x30;//通过计算把数字转化成ASCII码形式
}
i--;
for(;i>=0;i--)//将得到的字符串倒序
{
*(Ptr++)=Buf[i];
}
}
*Ptr='\0';
}
voiddisplay()
{
uchari,j,k,n,cent_flag;
intspeed_tmp,direction_tmp,cent_tmp;
longintcent;
//floatspeed_tmp1;
cent=0;
cent_tmp=0;
temp1=0;
if(GPS_RMC_Parse())
{
cent_flag=0;
get_num(5);