来论坛也挺长时间了 学到了不少东西 总觉得该为坛子做的点什么 但限于本人水平有限 弄不出什么有水平的东东 这个得有待于以后的提升了 原来也做过点东西 就想把曾经做过的东东发上来给新手们练练手也是好的吧 今天发个超声波测距的 大二上的时候参加院的电子设计竞赛竞赛做的 其实这个东东做过的人很多了吧 现在也有好多成熟的模块 但是自己锻炼一下对新手的能力提升还是有帮助的吧 其中发送端用的是反相器推挽输出 加大发射功率 接收端用的CX20106A这个红外芯片接收40KHZ的方波 都是很经典的模式 按照这个电路应该挺容易成功的吧 废话不多说了 上图吧 补充一下测量误差的问题 1m内应为mm级 2m内1cm左右 5m的时候3cm左右
外观
(原文件名:QQ截图20111204113625.jpg)
外观
(原文件名:QQ截图20111204113648.jpg)
外观
(原文件名:QQ截图20111204113659.jpg)
下面的程序也挺简单的,用的定时器和外部中断 接收到回波的时候触发外部中断,在中断服务程序中进行处理 不用加注释应该能看懂吧 水平有限 程序肯定还有很多不足 给初学者用用应该也可以吧。
#include <reg52.h>
#define unit unsigned int
#define uchar unsigned char
sbit fs=P3^0; //发送端;
sbit h=P2^0;
sbit l=P2^1;
sbit m=P2^2;//数码管位选端;
sbit jieshou=P3^2;
uchar tab[16]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x8e};
uchar u[3]; //显示数组;
unit count,b,outcomeH,outcomeL,textover;
void delay(unit a) //延时;
{
unit m;
for(m=0;m<a;m++);
}
void delayms(uchar z)
{
uchar x,y;
for(x=0;x<z;x++)
for(y=110;y>0;y--);
}
void tx() //从P3.0发出40KHz的脉冲
{
uchar n,p;
for(n=0;n<40;n++)
{
fs=1;
for(p=0;p<3;p++);
fs=0;
for(p=0;p<2;p++);
fs=0;
}
}
void display(void) //显示;
{
for(b=0;b<3000;b++)
{
l=1;m=1;h=1;
P1=tab[u[0]];
m=0;
delay(10);
m=1;
P1=tab[u[1]];
l=0;
delay(10);
l=1;
P1=tab[u[2]];
h=0;
delay(10);
h=1;
}
}
void rx() interrupt 0 //外部中断0,接收信号
{
TR0=0;
outcomeH=TH0;
outcomeL=TL0;
count=outcomeH;
count<<=8;
count=count|outcomeL;
count/=59;
if(count>=10)
{
u[0]=count%10;
u[1]=(count/10)%10;
u[2]=(count/100)%10;
display();
}
TH0=0;
TL0=0;
//textover=1;
}
void over()interrupt 1 //T0溢出为无效测量显示FFF;
{
u[0]=10;
u[1]=10;
u[2]=10;
display();
TR0=0;
}
void main()
{
fs=0;
delay(8600);
TH0=0;
TL0=0;
TMOD=0x01;
EA=1;
ET0=1;
PT0=1;
IT0=1;
IE=0x83;
while(1)
{
delayms(50);
fs=0;
jieshou=1;
tx();
TR0=1;
}
}
(原文件名:发送.png)
(原文件名:接收.png)
(原文件名:显示.png)
剩下的是点资料 包括答辩时候的论文了 有用的朋友可以拿去
点击此处下载
ourdev_701393U9N14U.doc(文件大小:454K) (原文件名:最终提交-创兴杯答辩论文 超声波测距系统.doc)
点击此处下载
ourdev_701394FS3WOV.pdf(文件大小:59K) (原文件名:超声波测距电路图.pdf)
看看你的晶振频率 我的是12M
一周热门 更多>