久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標(biāo)題:
WiFi智能小車程序
[打印本頁(yè)]
作者:
jiejie1111
時(shí)間:
2021-5-29 09:39
標(biāo)題:
WiFi智能小車程序
#include<reg52.h>
#include<math.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar Buffer =0; // 從串口接收的數(shù)據(jù)
uint URTAReceivedCount=0,n=1;
uchar dataTempdatatable[5],CommandDatatable[5];// 數(shù)據(jù)包
uchar serVal[2];
uintpwm[]={1120,1190,1382,1382,1382,1382,1382,1382}; // 初始 90 度 , (實(shí)際是 1382.4 ,取整得 1382 )
uchar pwm_flag=0;
uint code ms0_5Con=461; //0.5ms 計(jì)數(shù) (實(shí)際是 460.8 ,取整得 461 )
uint code ms2_5Con=2304; //2.5ms 計(jì)數(shù)
bit key_stime_ok;
sbit StatusLight=P2^0; // 狀態(tài)燈
sbit MainLight=P2^1; // 主大燈
sbit servo0=P0^0; // 舵機(jī)控制
sbit servo1=P0^1;
sbit servo2=P0^2;
sbit servo3=P0^3;
sbit servo4=P0^4;
sbit servo5=P0^5;
sbit servo6=P0^6;
sbit servo7=P0^7;
// 定義智能小車驅(qū)動(dòng)模塊輸入 IO
sbit IN1 = P1^0; // 高電平 1 后退(反轉(zhuǎn))
sbit IN2 = P1^1; // 高電平 1 前進(jìn)(正轉(zhuǎn))
sbit IN3 = P1^2; // 高電平 1 前進(jìn)(正轉(zhuǎn))
sbit IN4 = P1^3; // 高電平 1 后退(反轉(zhuǎn))
sbit EN1 = P1^4; // 高電平使能
sbit EN2 = P1^5; // 高電平使能
/********************************************************************
* 名稱 : Delay_1ms()
* 功能 : 延時(shí)子程序,延時(shí)時(shí)間為 1ms * x
* 輸入 : x ( 延時(shí)一毫秒的個(gè)數(shù) )
* 輸出 : 無(wú)
***********************************************************************/
void Delay_1ms(uint i)//1ms 延時(shí)
{
uchar x,j;
for(j=0;j<i;j++)
for(x=0;x<=148;x++);
}
void TurnOnStatusLight()
{
StatusLight=0;
}
/********************************************************************
* 名稱 : Send_Data()
* 功能 : 向上位機(jī)傳送字符
* 輸入 : 無(wú)
* 輸出 : 無(wú)
***********************************************************************/
void Send_Data(uchar type,uchar cmd,uchardat)
{
uchardata Buffer[5];// 構(gòu)建數(shù)據(jù)包
uchar*p;
uintSend_Count=0;
p =Buffer;
Buffer[0]=0XFF;
Buffer[1]=type;
Buffer[2]=cmd;
Buffer[3]=dat;
Buffer[4]=0XFF;
while(1)
{
if(*p==0XFF)
{
Send_Count++; //0XFF 標(biāo)志統(tǒng)計(jì)位
}
SBUF= *p; // 發(fā)送
while(!TI) // 如果發(fā)送完畢,硬件會(huì)置位 TI ,等待發(fā)送完畢
{
_nop_();
}
p++;
TI =0;
if(Send_Count == 2) // 當(dāng)統(tǒng)計(jì)到兩次出現(xiàn) 0XFF ,則認(rèn)為一個(gè)數(shù)據(jù)包發(fā)送完畢,跳出循環(huán)
{
TI =0;
break;
}
}
}
/********************************************************************
協(xié)議規(guī)定:
包頭 類型位 數(shù)據(jù)位 數(shù)據(jù)位 結(jié)束位
0XFF 0X** OX** 0X** 0XFF
各命令說(shuō)明:
類型位 數(shù)據(jù)位 數(shù)據(jù)位 功能
0X00 0X02 0X00 前進(jìn)
0X00 0X01 0X00 后退
0X00 0X03 0X00 左轉(zhuǎn)
0X00 0X04 0X00 右轉(zhuǎn)
0X00 0X00 0X00 停止
0X01 0X01 角度 舵機(jī) 1
0X01 0X02 . 舵機(jī) 2
0X01 0X01 . 舵機(jī) 3
0X01 0X02 . 舵機(jī) 4
0X01 0X01 . 舵機(jī) 5
0X01 0X02 . 舵機(jī) 6
0X01 0X01 . 舵機(jī) 7
0X01 0X02 數(shù)據(jù) 舵機(jī) 8
0X02 0X01 車燈亮
0X02 0X02 車燈滅
0X03 雷達(dá)數(shù)據(jù) 發(fā)送雷達(dá)數(shù)據(jù)
***********************************************************************/
/********************************************************************
* 名稱 : Com_Int()
* 功能 : 串口中斷子函數(shù)
***********************************************************************/
void Com_Int(void) interrupt 4
{
uchar temp;
ES=0; // 關(guān)串口中斷
RI=0; // 軟件清除接收中斷
temp=SBUF;
if(temp==0XFF &&URTAReceivedCount<3)
{
Tempdatatable[0]==0XFF; // 包頭
URTAReceivedCount++;
}
else
{
Tempdatatable[n]=temp;
n++;
if(URTAReceivedCount==0&&n==2)
n=1;
}
if(URTAReceivedCount==2)// 包尾
{
Tempdatatable[0]=0XFF;
Tempdatatable[4]=0XFF;
n=1;
URTAReceivedCount=0; // 組包完畢
temp="";
//Send_Data(Tempdatatable[1],Tempdatatable[2],Tempdatatable[3]); // 發(fā)送組成的數(shù)據(jù)包回去
}
CommandDatatable[0]=Tempdatatable[0];
CommandDatatable[1]=Tempdatatable[1];
CommandDatatable[2]=Tempdatatable[2];
CommandDatatable[3]=Tempdatatable[3];
CommandDatatable[4]=Tempdatatable[4];
ES=1;// 開(kāi)串口中斷
}
/********************************************************************
* 名稱 : Com_Init()
* 功能 : 串口初始化,晶振 11.0592, 波特率 9600 ,使能了串口中斷
***********************************************************************/
void Com_Init(void)
{
TMOD= 0x21;
PCON= 0x00;
SCON= 0x50;
TH1 =0xFd; // 設(shè)置波特率 9600
TL1 =0xFd;
TR1 =1; // 啟動(dòng)定時(shí)器 1
ES =1; // 開(kāi)串口中斷
EA =1; // 開(kāi)總中斷
IT0=0;
EX0=1;
}
/********************************************************************
* 名稱 :Moto_Forward()
* 功能 : 電機(jī) 1 、 2 啟動(dòng),都是前進(jìn),整車表現(xiàn)為前進(jìn)。
***********************************************************************/
void Moto_Forward()
{
IN1=0; // 左電機(jī)
IN2=1;
IN3=1; // 右電機(jī)
IN4=0;
EN1=1;
EN2=1;
Delay_1ms(100);
}
/********************************************************************
* 名稱 :Moto_Backward()
* 功能 : 電機(jī) 1 、 2 啟動(dòng),都是后退,整車表現(xiàn)為后退。
***********************************************************************/
void Moto_Backward()
{
IN1=1; // 左電機(jī)
IN2=0;
IN3=0; // 右電機(jī)
IN4=1;
EN1=1;
EN2=1;
Delay_1ms(100);
}
/********************************************************************
* 名稱 :Moto_TurnLeft()
* 功能 : 電機(jī) 1 后退,電機(jī) 2 前進(jìn),整車表現(xiàn)為左轉(zhuǎn)。
***********************************************************************/
void Moto_TurnLeft()
{
IN1=0; // 左電機(jī)
IN2=0;
IN3=1; // 右電機(jī)
IN4=0;
EN1=1;
EN2=1;
Delay_1ms(100);
}
/********************************************************************
* 名稱 :Moto_TurnRight()
* 功能 : 電機(jī) 1 前進(jìn),電機(jī) 2 后退,整車表現(xiàn)為右轉(zhuǎn)。
***********************************************************************/
void Moto_TurnRight()
{
IN1=0; // 左電機(jī)
IN2=1;
IN3=0; // 右電機(jī)
IN4=0;
EN1=1;
EN2=1;
Delay_1ms(100);
}
/********************************************************************
* 名稱 :Moto_Stop()
* 功能 : 電機(jī) 1 停止,電機(jī) 2 停止,整車表現(xiàn)為停止。
***********************************************************************/
void Moto_Stop()
{
IN1=0; // 左電機(jī)
IN2=0;
IN3=0; // 右電機(jī)
IN4=0;
EN1=1;
EN2=1;
Delay_1ms(100);
}
/********************************************************************
* 功能 : 舵機(jī) PWM 中斷初始化
***********************************************************************/
void Timer0Init()
{
/*0 度 =0.5ms, 45 度 =1ms, 90 度 =1.5ms, 135 度 =2ms, 180 度 =2.5ms
/.5ms 初始值 F700, (12n/11059200=2.5/1000,n=2304, X=65536-2304=63232 > F700)*/
TMOD|= 0x01; // 使用模式 1 , 16 位定時(shí)器,使用 "|" 符號(hào)可以在使用多個(gè)定時(shí)器時(shí)不受影響
TH0=-ms2_5Con>>8; // 給定初值, 17ms 中斷
TL0=-ms2_5Con;
EA=1;// 總中斷打開(kāi)
ET0=1; // 定時(shí)器 0 中斷打開(kāi)
TR0=1; // 定時(shí)器 0 開(kāi)關(guān)打開(kāi)
}
/********************************************************************
* 功能 : 舵機(jī) PWM 中斷 , // 舵機(jī)控制函數(shù) 周期為 20ms 一個(gè)循環(huán) 20MS = 8*2.5ms
***********************************************************************/
void SteeringGear() interrupt 1
{
switch(pwm_flag)
{
case1: servo0=1; TH0=-pwm[0]>>8; TL0=-pwm[0]; break;
case2: servo0=0; TH0=-(ms2_5Con-pwm[0])>>8; TL0=-(ms2_5Con-pwm[0]); break;
case3: servo1=1; TH0=-pwm[1]>>8; TL0=-pwm[1]; break;
case4: servo1=0; TH0=-(ms2_5Con-pwm[1])>>8; TL0=-(ms2_5Con-pwm[1]); break;
case5: servo2=1; TH0=-pwm[2]>>8; TL0=-pwm[2]; break;
case6: servo2=0; TH0=-(ms2_5Con-pwm[2])>>8; TL0=-(ms2_5Con-pwm[2]); break;
case7: servo3=1; TH0=-pwm[3]>>8; TL0=-pwm[3]; break;
case8: servo3=0; TH0=-(ms2_5Con-pwm[3])>>8; TL0=-(ms2_5Con-pwm[3]); break;
case9: servo4=1; TH0=-pwm[4]>>8; TL0=-pwm[4]; break;
case10: servo4=0; TH0=-(ms2_5Con-pwm[4])>>8; TL0=-(ms2_5Con-pwm[4]); break;
case11: servo5=1; TH0=-pwm[5]>>8; TL0=-pwm[5]; break;
case12: servo5=0; TH0=-(ms2_5Con-pwm[5])>>8; TL0=-(ms2_5Con-pwm[5]); break;
case13: servo6=1;TH0=-pwm[6]>>8; TL0=-pwm[6]; break;
case14: servo6=0;TH0=-(ms2_5Con-pwm[6])>>8; TL0=-(ms2_5Con-pwm[6]); break;
case15: servo7=1;TH0=-pwm[7]>>8; TL0=-pwm[7]; break;
case16: servo7=0;TH0=-(ms2_5Con-pwm[7])>>8; TL0=-(ms2_5Con-pwm[7]); break;
default: TH0=0xff; TL0=0x80; pwm_flag=0;
}
pwm_flag++;
}
voidSetSteeringGear(uchar i, uchar val)
{
uinta = (val+46)*10;
if(a<ms0_5Con)
a=ms0_5Con;
if(a>ms2_5Con)
a=ms2_5Con;
pwm[i]=a;
CommandDatatable[2]=0xff; // 清除緩存
}
/********************************************************************
* 功能 : 串口中斷接收數(shù)據(jù)
***********************************************************************/
/*********************************************************************************
** 函數(shù)功能 : 主函數(shù)
*********************************************************************************/
void main()
{
MainLight=0;
Delay_1ms(200);
Com_Init();// 串口初始化
Timer0Init();// 舵機(jī) PWM 中斷初始化
while(1)
{
if(CommandDatatable[0]==0XFF &&CommandDatatable[4]==0XFF)
{
switch (CommandDatatable[1]) // 根據(jù)鍵值不同,執(zhí)行不同的內(nèi)容
{
case0X00: // 類型位 0X00 ,表明是控制數(shù)據(jù)包,進(jìn)入控制數(shù)據(jù) case
switch(CommandDatatable[2]) // 根據(jù)數(shù)據(jù)位的值來(lái)進(jìn)行選擇執(zhí)行不同的動(dòng)作
{
case0X00:Moto_Stop();break;
case0X01:Moto_Forward();break;
case0X02:Moto_Backward();break;
case0X03:Moto_TurnLeft();break;
case0X04:Moto_TurnRight();break;
default : break;
}
break;
case0X01: // 類型位 0X01 ,表明是舵機(jī)數(shù)據(jù)包,進(jìn)入舵機(jī) case
switch(CommandDatatable[2])
{
case0x01:SetSteeringGear(0,CommandDatatable[3]);break;
case 0x02:SetSteeringGear(1,CommandDatatable[3]);break;
case 0x03:SetSteeringGear(2,CommandDatatable[3]);break;
case 0x04:SetSteeringGear(3,CommandDatatable[3]);break;
case 0x05:SetSteeringGear(4,CommandDatatable[3]);break;
case 0x06:SetSteeringGear(5,CommandDatatable[3]);break;
case 0x07:SetSteeringGear(6,CommandDatatable[3]);break;
case 0x08:SetSteeringGear(7,CommandDatatable[3]);break;
default : break;
}
break;
case0X02: // 類型位 0X02 ,表明是大燈數(shù)據(jù)包,進(jìn)入大燈 case
switch(CommandDatatable[2])
{
case0X01:MainLight=1;break;
case0X02:MainLight=0;break;
default : break;
}
break;
default : break;
}
}
}
}
復(fù)制代碼
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
久久88
|
欧美日韩在线视频观看
|
www.99精品
|
午夜欧美一区二区三区在线播放
|
亚洲欧美在线观看
|
精品小视频
|
亚洲视频一区二区三区四区
|
亚洲欧美在线免费观看
|
久久久久久久久久久高潮一区二区
|
久久一起草
|
精品国产欧美一区二区三区成人
|
很黄很污的网站
|
亚洲成网站
|
亚洲91视频
|
欧美日韩精品一区二区三区视频
|
羞羞网站免费观看
|
欧美一级久久
|
国产在线观看免费
|
亚洲一区国产
|
欧美网址在线观看
|
日韩高清中文字幕
|
高清一区二区视频
|
一区二区三区四区在线视频
|
日本不卡一区二区三区在线观看
|
日韩成人精品一区
|
91精品国产色综合久久不卡98口
|
欧美国产日韩一区
|
亚洲视频三
|
亚洲精品国产a久久久久久 中文字幕一区二区三区四区五区
|
国产精品视频一二三区
|
久久国产一区二区三区
|
久久亚洲欧美日韩精品专区
|
欧美日韩在线视频观看
|
欧美国产日韩在线观看成人
|
亚洲欧美一区二区三区在线
|
www视频在线观看
|
狠狠干影院
|
免费一级做a爰片久久毛片潮喷
|
中文字幕乱码一区二区三区
|
国产精品美女久久久久久久久久久
|
深夜福利影院
|