标题:
一个单片机超声波寻物循迹小车的源码
[打印本页]
作者:
fy666
时间:
2019-7-3 21:24
标题:
一个单片机超声波寻物循迹小车的源码
电路设计图
QQ截图20190703212224.jpg
(131.47 KB, 下载次数: 38)
下载附件
电路设计图
2019-7-3 21:22 上传
实现的功能:从一个位置出发,开始寻物,在物体前10-20厘米处停下并亮灯,按一下开关后继续寻物,找到三个物体后沿场地边缘黑线到指定位置停车。
单片机源程序如下:
#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; //超声波触发
sbit Ec=P3^6; //超声波输出
sbit key=P1^0; //按键
sbit PCA_LED=P1^1; //数码管
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); //当RX为零时等待
TR0=1; //开启计数
while(Ec); //当RX为1计数并等待
TR0=0; //关闭计数
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);
}
复制代码
全部程序51hei下载地址:
C文件代码.zip
(1.26 KB, 下载次数: 20)
2019-7-3 21:28 上传
点击文件名下载附件
下载积分: 黑币 -5
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1