欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標(biāo)題:
51單片機(jī)掃地機(jī)器人程序有問題
[打印本頁]
作者:
小兔吃棗拼乎哩
時間:
2018-10-24 23:13
標(biāo)題:
51單片機(jī)掃地機(jī)器人程序有問題
請求大佬幫忙看一下程序 程序廢真的整不出來
我想的是這個小車可以直接用藍(lán)牙遙控(用手機(jī)app操控)著走動 也可以按一下app上一個按鍵(參考程序的case5)可以自動清掃 加了驅(qū)動 最小系統(tǒng) 避障模塊 就是程序整不了了 希望大佬們幫忙看一下 代碼沒有寫完 如下:
#include<reg52.h>
typedef unsigned int uint;
typedef unsigned char uchar;
sbit ZA1A=P1^0;
sbit ZA1B=P1^1;
sbit ZB1A=P1^2;
sbit ZB1B=P1^3;
sbit YA1A=P1^4;
sbit YA1B=P1^5;
sbit YB1A=P1^6;
sbit YB1B=P1^7;
sbit Trig = P3^2 ;
sbit Echo = P3^3 ;
uchar rev=0; //藍(lán)牙接收緩存值
bit rok=0; //接收標(biāo)志
/********************************************************************
* 名稱 :qianjin()
* 功能 : 電機(jī)1、2啟動,都是前進(jìn),整車表現(xiàn)為前進(jìn)。
* 輸入 : 無
* 輸出 : 無
***********************************************************************/
void qianjin(){
ZA1A=0;
ZA1B=1;
ZB1A=0;
ZB1B=1;
YA1A=0;
YA1B=1;
YB1A=0;
YB1B=1;
}
void houtui(){
ZA1A=1;
ZA1B=0;
ZB1A=1;
ZB1B=0;
YA1A=1;
YA1B=0;
YB1A=1;
YB1B=0;
}
void zuozhuan(){
ZA1A=1;
ZA1B=0;
ZB1A=1;
ZB1B=0;
YA1A=0;
YA1B=1;
YB1A=0;
YB1B=1;
}
void youzhuan(){
ZA1A=0;
ZA1B=1;
ZB1A=0;
ZB1B=1;
YA1A=1;
YA1B=0;
YB1A=1;
YB1B=0;
}
void tingche(){
ZA1A=0;
ZA1B=0;
ZB1A=0;
ZB1B=0;
YA1A=0;
YA1B=0;
YB1A=0;
YB1B=0;
}
void chaoshengbo ()
{
TR0=0; //定時器開關(guān)
TH0=0;
TL0=0;
Trig=0;
Echo=0;
Trig=1;
DelayUs2x(20);
Trig=0;
while(Echo==0); //等待Echo回波引腳變高電平
TR0=1; //定時器0開關(guān)打開
while(Echo); //等待
time=TH0*256+TL0; //*256是16位計數(shù)器的高8位和低八位之分.恢復(fù)成16位數(shù)的時候要*256。讀取脈寬長度
S=time*0.0172; //(厘米)*0.0172,根據(jù)超聲的聲速,單片機(jī)的頻率,得出來的一個系數(shù).
if(S>400)S=400;
}
void bizhang() //避障功能
{
if(S<=10) //距離小于15CM
{
tingche(); //小車停止
zuozhuan();
delay(1000);
chaoshengbo();
szuo=s;
youzhuan(2000);
chaoshengbo();
syou=s;
zuozhuan(1000);
if(szuo>=syou){
zuozhuan();
delay(2000);
else if(szuo<syou){
youzhuan();
delay(2000);
}
}
}
else if(S>15) //距離大于,30CM往前走
qianjin();
}
void suiyuanqingsao(){
qianjin();
}
}
void COMM( void ) //到達(dá)某一位置后左右前后測距判斷應(yīng)該怎么走
{
chaoshengbo();//超聲波測距如果還可以直行則直行,不能直行的話判斷應(yīng)該左轉(zhuǎn)還是右轉(zhuǎn)
{if(s>5){
qianjin();
delay(500);
zuoyouzhuanceju();
}
else if(){
tingche();
zuoyouzhaunceju();
}
}
void zuoyouzhuanceju()
{tingche();
zuozhuan();
delay(1000);//需要計算時間
chaoshengbo(); //啟動超聲波測距
S2=S;
youzhuan();//小車向右轉(zhuǎn)180度
delay(2000);
chaoshengbo(); //啟動超聲波測距
S4=S;
zuozhuan();//測完距離后讓小車回到原前進(jìn)方向
delay(1000);
chaoshengbo() //啟動超聲波測距
S1=S;
if((S2<15)||(S4<15)) //只要左右各有距離小于15CM小車后退
{
houtui(); //后退
}
if(S2>S4)
{
youzhuan(); //車的左邊比車的右邊距離小 右轉(zhuǎn)
delay(1000);
}
else
{
zuozhuan(); //車的左邊比車的右邊距離大 左轉(zhuǎn)
delay(1000);
}
}
/********************************************************************
* 名稱 : Com_Init()
* 功能 : 串口初始化,晶振11.0592,波特率9600,使串口中斷
* 輸入 : 無
* 輸出 : 無
***********************************************************************/
void Com_Init(void)
{
TMOD = 0x20;
PCON = 0x00;
SCON = 0x50; //0101 000設(shè)置串行口控制寄存器sm0,sm1為01,即為工作方式1
TH1 = 0xFd; //設(shè)置波特率 9600
TL1 = 0xFd;
TR1 = 1; //啟動定時器1
ES = 1; //開串口中斷
EA = 1; //開總中斷
}
void gongneng()
{
switch(rev)
{
case '0': tingche(); break;
case '1': qianjin(); break;
case '2': houtui(); break;
case '3': zuozhuan(); break;
case '4': youzhuan(); break;
case ’5’:suiyuanqingsao();break;
default:break;
}
rok=0;
}
void main()
{
Com_Init();//初始化
while(1)//循環(huán)結(jié)構(gòu),選擇函數(shù)控制小車的狀態(tài)
{
if(rok)gongneng();
}
}
/********************************************************************
* 名稱 : Com_Int()
* 功能 : 串口中斷子函數(shù)
* 輸入 : 無
* 輸出 : 無
***********************************************************************/
void Com_Int(void) interrupt 4
{
ES = 0;
if(RI) //當(dāng)硬件接收到一個數(shù)據(jù)時,RI會置位
{
rev=SBUF;
RI = 0;//取消本次中斷申請,方便進(jìn)入下一次
rok=1;
}
ES = 1;
}
復(fù)制代碼
作者:
星試試
時間:
2019-5-26 18:52
你好 請問你這個硬件設(shè)計里有幾個電機(jī)啊
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1