今天介绍一下51单片机wifi小车代码,如下:
#include
#include
#define uchar unsigned char
#define uint unsigned int
uchar Buffer =0; //从串口接收的数据
uint i,j;
uchar flag=0;
uchar key_stime_counter,hight_votage=15,timeT_counter;
bit key_stime_ok;
sbit control_signal=P3^6;
sbit StatusLight=P2^2;
sbit MainLight=P2^3;
/********************************************************************
* 名称 : Delay_1ms()
* 功能 : 延时子程序,延时时间为 1ms * x
* 输入 : x (延时一毫秒的个数)
* 输出 : 无
***********************************************************************/
void Delay_1ms(uint i)//1ms延时
{
uchar x,j;
for(j=0;j
for(x=0;x<=148;x++);
}
void Turn*****tatusLight()
{
StatusLight=0;
}
/********************************************************************
* 名称 : Com_Int()
* 功能 : 串口中断子函数
* 输入 : 无
* 输出 : 无
***********************************************************************/
void Com_Int(void) interrupt 4
{
EA = 0;
if(RI == 1) //当硬件接收到一个数据时,RI会置位
{
Buffer = SBUF-48; //这里减去48是因为从电脑中发送过来的数据是ASCII码。
RI = 0;
}
EA = 1;
}
/********************************************************************
* 名称 : Com_Init()
* 功能 : 串口初始化,晶振11.0592,波特率9600,使能了串口中断
* 输入 : 无
* 输出 : 无
***********************************************************************/
void Com_Init(void)
{
TMOD = 0x21;
PCON = 0x00;
SCON = 0x50;
TH1 = 0xFd; //设置波特率 9600
TL1 = 0xFd;
TR1 = 1; //启动定时器1
ES = 1; //开串口中断
EA = 1; //开总中断
IT0=0;
EX0=1;
}
void TimerInit()
{
control_signal=0;
EA=1; //开总中断
ET0=1; //定时器0中断允许
TH0 = 0xFF; //定时器装初值
TL0 = 0xA3;
TR0=0;
}
/********************************************************************
* 名称 :Moto_Forward()
* 功能 : 电机1、2启动,都是前进,整车表现为前进。
* 输入 : 无
* 输出 : 无
***********************************************************************/
void Moto_Forward()
{
P1= 0x06;
Delay_1ms(100);
}
/********************************************************************
* 名称 :Moto_Backward()
* 功能 : 电机1、2启动,都是后退,整车表现为后退。
* 输入 : 无
* 输出 : 无
***********************************************************************/
void Moto_Backward()
{
P1= 0x05;
Delay_1ms(100);
}
/********************************************************************
* 名称 :Moto_TurnLeft()
* 功能 : 电机1后退,电机2前进,整车表现为左转。
* 输入 : 无
* 输出 : 无
***********************************************************************/
void Moto_TurnLeft()
{
P1= 0x09;
Delay_1ms(100);
}
/********************************************************************
* 名称 :Moto_TurnRight()
* 功能 : 电机1前进,电机2后退,整车表现为右转。
* 输入 : 无
* 输出 : 无
***********************************************************************/
void Moto_TurnRight()
{
P1= 0x0A;
Delay_1ms(100);
}
/********************************************************************
* 名称 :Moto_Stop()
* 功能 : 电机1停止,电机2停止,整车表现为停止。
* 输入 : 无
* 输出 : 无
***********************************************************************/
void Moto_Stop()
{
P1= 0x00;
Delay_1ms(100);
}
/********************************************************************
* 名称 :SteerEngineTurningUp()
* 功能 : 舵机向上转。
* 输入 : 无
* 输出 : 无
***********************************************************************/
void SteerEngineTurningUp()
{
ET0=1;
TR0=1;
Delay_1ms(40);
hight_votage-=1;
if(hight_votage<5)
hight_votage=5;
}
/********************************************************************
* 名称 :SteerEngineTurningDown()
* 功能 : 舵机向下转。
* 输入 : 无
* 输出 : 无
***********************************************************************/
void SteerEngineTurningDown()
{
ET0=1;
TR0=1;
Delay_1ms(40);
hight_votage+=1;
if(hight_votage>20)
hight_votage=20;
}
/********************************************************************
* 名称 : SteerEngine()
* 功能 : 舵机PWM中断
* 输入 : 无
* 输出 : 无
***********************************************************************/
void SteerEngine() interrupt 1
{
TH0=0xFF;
TL0=0xA3;
if (++key_stime_counter>=200)
{
key_stime_counter=0;
control_signal=1;
key_stime_ok = 1; // 20ms到
timeT_counter=0;
}
if (key_stime_ok&&(++timeT_counter>=hight_votage))
{
key_stime_ok=0;
timeT_counter=0;
control_signal=0; // hight_votage*0.1ms到
}
}
void main()
{
MainLight=0;
Delay_1ms(200);
Com_Init();//串口初始化
TimerInit();//舵机初始化
while(1)
{
switch (Buffer) //根据键值不同,执行不同的内容
{
case 0:
Moto_Stop();
break;
case 1:
Moto_Forward();
break;
case 2:
Moto_Backward();
break;
case 3:
Moto_TurnLeft();
break;
case 4:
Moto_TurnRight();
break;
case 5:
SteerEngineTurningUp();
break;
case 6:
SteerEngineTurningDown();
break;
case 8:
MainLight=1;
break;
case 9:
MainLight=0;
break;
default : TR0=0;TR2=0;
break;
}
}
}
//红外壁障
void extern_int0(void) interrupt 0 using 0
{
EX0=0;
Moto_TurnLeft();
Buffer=0;
EX0=1;
IE0=0;
}
tid=4877