51單片機wifi小車代碼
#include
本文引用地址:http://butianyuan.cn/article/201611/319843.htm#include
#define uchar unsigned char
#define uint unsigned int
uchar Buffer =0; //從串口接收的數(shù)據(jù)
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 (延時一毫秒的個數(shù))
* 輸出 : 無
***********************************************************************/
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()
* 功能 : 串口中斷子函數(shù)
* 輸入 : 無
* 輸出 : 無
***********************************************************************/
void Com_Int(void) interrupt 4
{
EA = 0;
if(RI == 1) //當硬件接收到一個數(shù)據(jù)時,RI會置位
{
Buffer = SBUF-48; //這里減去48是因為從電腦中發(fā)送過來的數(shù)據(jù)是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啟動,都是前進,整車表現(xiàn)為前進。
* 輸入 : 無
* 輸出 : 無
***********************************************************************/
void Moto_Forward()
{
P1= 0x06;
Delay_1ms(100);
}
/********************************************************************
* 名稱 :Moto_Backward()
* 功能 : 電機1、2啟動,都是后退,整車表現(xiàn)為后退。
* 輸入 : 無
* 輸出 : 無
***********************************************************************/
void Moto_Backward()
{
P1= 0x05;
Delay_1ms(100);
}
/********************************************************************
* 名稱 :Moto_TurnLeft()
* 功能 : 電機1后退,電機2前進,整車表現(xiàn)為左轉。
* 輸入 : 無
* 輸出 : 無
***********************************************************************/
void Moto_TurnLeft()
{
P1= 0x09;
Delay_1ms(100);
}
/********************************************************************
* 名稱 :Moto_TurnRight()
* 功能 : 電機1前進,電機2后退,整車表現(xiàn)為右轉。
* 輸入 : 無
* 輸出 : 無
***********************************************************************/
void Moto_TurnRight()
{
P1= 0x0A;
Delay_1ms(100);
}
/********************************************************************
* 名稱 :Moto_Stop()
* 功能 : 電機1停止,電機2停止,整車表現(xiàn)為停止。
* 輸入 : 無
* 輸出 : 無
***********************************************************************/
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) //根據(jù)鍵值不同,執(zhí)行不同的內(nèi)容
{
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;
}
評論