標(biāo)題:
一個單片機超聲波尋物循跡小車的源碼
[打印本頁]
作者:
fy666
時間:
2019-7-3 21:24
標(biāo)題:
一個單片機超聲波尋物循跡小車的源碼
電路設(shè)計圖
QQ截圖20190703212224.jpg
(131.47 KB, 下載次數(shù): 38)
下載附件
電路設(shè)計圖
2019-7-3 21:22 上傳
實現(xiàn)的功能:從一個位置出發(fā),開始尋物,在物體前10-20厘米處停下并亮燈,按一下開關(guān)后繼續(xù)尋物,找到三個物體后沿場地邊緣黑線到指定位置停車。
單片機源程序如下:
#include <reg51.h>
#include <stdio.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
//管腳定義
sbit P2_0=P2^0;
sbit P2_1=P2^1;
sbit P2_2=P2^2;
sbit P2_3=P2^3;
sbit P2_4=P2^4;
sbit P2_5=P2^5;
sbit Tr=P3^7; //超聲波觸發(fā)
sbit Ec=P3^6; //超聲波輸出
sbit key=P1^0; //按鍵
sbit PCA_LED=P1^1; //數(shù)碼管
sbit zhong=P0^6;
sbit zuo=P0^5;
sbit you=P0^7;
sbit hou=P0^1;
//定義變量
uint L = 0; //距離長度(cm)
uint time=0;
uint L1=0;
uint L2=0;
uint a=3;
uchar zdbz;
void ultInit()
{
TMOD=0X11;
TH1=(65536-100)/256; //100US定時
TL1=(65536-100)%256;
TH0=0;
TL0=0;
TR1= 1;
ET1= 1;
ET0= 1;
EA = 1;
}
void ultStart()
{
Tr = 1;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
Tr = 0;
}
void count()
{
while(!Ec); //當(dāng)RX為零時等待
TR0=1; //開啟計數(shù)
while(Ec); //當(dāng)RX為1計數(shù)并等待
TR0=0; //關(guān)閉計數(shù)
time=TH0*256+TL0; //讀取脈寬長度
TH0=0;
TL0=0;
L=(time*1.7)/100; //算出來是CM
}
void softqianjin()
{
uchar zdbz=1;
P2_4=1;
P2_5=1; //ENA ENB置為1
P2_0=1;
P2_1=0;
P2_2=1;
P2_3=0;
TMOD=0x11;
TH1=0xfd;
TL1=0x44;
EA=1;
ET1=1;
TR1=1;
}
void left(void)
{
P2_4=1; //ENA為1
P2_5=0; //ENB為0
P2_0=1;
P2_1=0;
P2_2=1;
P2_3=0;
}
void right(void)
{
P2_4=0; //ENA為1
P2_5=1; //ENB為0
P2_0=1;
P2_1=0;
P2_2=1;
P2_3=0;
}
void qianjin(void)
{
P2_4=1;
P2_5=1; //ENA ENB置為1
P2_0=1;
P2_1=0;
P2_2=1;
P2_3=0;
}
void houtui(void)
{
P2_4=1;
P2_5=1;
P2_0=0;
P2_1=1;
P2_2=0;
P2_3=1;
}
void shating(void)
{
P2_4=0;
P2_5=0; //ENA ENB置為1
P2_0=0;
P2_1=0;
P2_2=0;
P2_3=0;
}
void softqianjinzd() interrupt 3
{
if(zdbz==1)
{
P2_0=0;
P2_2=0;
TH1=0xfe;
TL1=0xd4;
zdbz=0;
}
else
{
P2_0=1;
P2_2=1;
TH1=0xfd;
TL1=0x44;
zdbz=1;
}
}
void delay(unsigned int i)
{
unsigned int j;
unsigned char k;
for(j=i;j>0;j--)
for(k=125;k>0;k--);
}
void main()
{
PCA_LED=0;
while(key==1);
qianjin();
delay(10000);
ultInit();
while(a)
{
ultStart();
count();
if(L>70)
{
PCA_LED=0;
left();
}
else if(L<15)
{shating();
while(key==1);
a--;
}
else if(L>15&&L<70)
{
PCA_LED=1;
qianjin();
}
}
softqianjin();
while(1)
{
if(zhong==1&&zuo==1&&you==1) {shating();delay(2000);break;}
if(zhong==1&&zuo==1&&you==0) {left();}
if(zhong==1&&zuo==0&&you==1) {right();}
}
left();delay(2000);shating();delay(2000);
while(1)
{
if(zhong==0&&zuo==0&&you==0) {softqianjin();}
if(zhong==0&&zuo==0&&you==1) {right();}
if(zhong==0&&zuo==1&&you==0) {left();}
if(zhong==0&&zuo==1&&you==1) {softqianjin();}
if(zhong==1&&zuo==0&&you==0) {softqianjin();}
if(zhong==1&&zuo==0&&you==1) {right();}
if(zhong==1&&zuo==1&&you==0) {left();}
if(zhong==1&&zuo==1&&you==1) {shating();delay(2000);houtui();delay(1000);left();delay(2000);qianjin();}
if(zhong==1&&hou==1&&you==1) {shating();}
if(zhong==1&&hou==1) {shating();}
}
while(1);
}
復(fù)制代碼
全部程序51hei下載地址:
C文件代碼.zip
(1.26 KB, 下載次數(shù): 20)
2019-7-3 21:28 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1