|
课题是输入时间发送给单片机,单片机控制南北方向,东西方向路口绿灯时间为输入时间。此为C语言单片机端源码,供需要的人参考
初始化ESP8266:
初始化之前用串口助手将ESP设置好运行模式AP和Station共存,设置好密码(这些助手都能够直接一键设置),设置好波特率9600指令AT+CIOBAUD=9600。
首先初始化定时器,因为我的课题要求
void time0_init()
{
EA = 1; //开总中断
SCON=0x50;
TMOD = 0X21; //定时器0、定时器1工作方式1
ET0 = 1; //开定时器0中断
TR0 = 1; //允许定时器0定时
ET1 = 0; //开定时器1中断
TH1=0xfd;//赋初值
TL1=0xfd;//同上,此为波特率9600的初值
TR1=1;
REN=1;//允许串口接收
}//(此为串口通行的基础)
接下来发送命令到ESP8266
void connect_init()
{
char *a="AT+CIPMUX=1\r\n";
char *b="AT+CIPSERVER=1,5000\r\n";
while(*a!='\0')
{
SBUF=*a; //写入要发送的字符
while(!TI); //等待发送完成
TI=0; //发送
a++;
}
delay_1ms(100);//这里添加延时函数,延时5ms左右,给ESP8266反应时间
while(*b!='\0')
{
SBUF=*b;
while(!TI); //等待发送完成
TI=0;
b++;
}
RI=0;
ES=1;
//初始化完成,串行口中断打开
}
然后
void main()
{
time0_init();
connect_init();
//此处添加其他要实现的代码
} //每次单片机开机都会向ESP发送命令将其初始化。
然后是发送完成以及接收完成时所产生的中断处理
void serial com()interrupt 4
{
if(RI==1)//接收的中断
{
RI=0;//取消本次接收中断申请,方便进入下次中断
temp=SBUF;//SBUF写在后是把接受寄存器的值赋给P1
if(temp==':'||j>0)//由于ESP发送的字符有+IPD,0,1:等字符,故此为截取:及其以后的字符然后根据自己的目的进行判断
{
receive[j]=temp; //截取的字符保存在数组中
j++;
if(temp=='J')//判断字符自设,不发生冲突即可
{
//添加要实现的功能
j=0;
}
if(temp=='G'){
j=0;
dai=dai+1;
memset(receive,0,3);
switch(dai){
case 1:dx_time=15,nb_time=35;
case 2:dx_time=35,nb_time=15,dai=0; //添加要实现的功能代码
}
}
if(temp=='N'||o>0){
receive[o]=temp;
o++;
if(temp=='S')
{
m= receive[1]*10+receive[2]-16;//此处截取的内容和我要实现的相差16,不知道为何,有知道的还望告知。
nb_time=m;
temp=0;
memset(receive,0,sizeof(receive));
o=0;j=0;
}
}
if(temp=='D'||l>0){
receive1[l]=temp;
l++;
if(temp=='S'){
dx_time=receive1[1]*10+receive1[2]-16;
temp=0;
memset(receive1,0,sizeof(receive1));//调用该函数需要头文件 string.h 不要忘了添加
l=0; j=0; }
}
}
RI=0;
}
if(TI==1){
TI=0;
}//发送中断在发送完成时产生的中断
RI=0;
}
好了,大概需要做的就这些,记得声明数组char receive[];
需要安卓客户端的再联系吧
|
评分
-
查看全部评分
|