打印

超声波测距程序问题

[复制链接]
3590|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
发射电路

接受短路


程序:
#include
#include
/***************************
数码管为共阳数码管
***************************/
sbit s0=P2^7;//个位选通
sbit s1=P2^6;//十位选通
sbit s2=P2^5;//百位选通
sbit s3=P2^4;//千位选通
sbit dp=P0^7;//小数点
sbit in=P3^2;//外部中断,接CX20106的脚
sbit csb=P3^4;//40KHz方波输出脚
#define seg P0 //数码管的数据口为P0口
#define uchar unsigned char
#define uint unsigned int
#define nop _nop_()
/****************************/
void init(void);//初始化
void delay_nms(uint n);//延时nms
void delay100us();//延时us
void display(uint dat);//4位数码管显示函数,只用了位
void tran(void);//超声波测量函数
/***************************/
uint dis,H=100,L=20;
uchar flag=0,high_time,low_time,m=0;
uchar leddata[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x40};

void delay100us()
{
uchar i;
for(i=0;i<50;i++)
;
}


/**********************************
函数名称:主函数
修改日期:
入口参数:无
返回值: 无
**********************************/
void main(void)
{
init();
while(1) //循环测量并显示
{
tran();//发送超声波信号测距
display(dis);//显示距离
}
}
/**********************************
函数名称:初始化函数
修改日期:
入口参数:无
返回值: 无
**********************************/
void init(void)
{
TMOD=0x01;//定时器方式用于计时
TH0=0;
TL0=0; /* 设定T0的工作模式为*/
EA=1;
IT0=1;//下降沿有效,左传感器
}
/**********************************
函数名称:延时函数
修改日期:
入口参数:n
返回值: 无
**********************************/
void delay_nms(uint n)
{
uchar i;
while(n--)
{
for(i=123;i>0;i--);
}
}
/**********************************
函数名称:显示函数
修改日期:
入口参数:data
返回值: 无
**********************************/
void display(uint dat)
{

uchar i,j,k;//分别为百十个位的缓存
P2=0xff;
seg=0xff;
i=dat/100;//百位
j=dat%100/10;//十位
k=dat%100%10;//个位
//P1=1;
s3=0;//s2=0;s1=1;s0=1;
seg=leddata;
dp=0;
delay_nms(2);
dp=1;
//P1=2;
s2=0;
//s3=1;s2=1;s1=0;s0=1;
seg=leddata[j];
delay_nms(2);
s1=0;
//s3=1;s2=1;s1=1;s0=0;
//P1=3;
seg=leddata[k];
delay_nms(2);
s0=0;
}

//****************************************************************
//定时器0中断,用做显示
/*timer0() interrupt 1 // 定时器0中断是1号
{
TH0=0xfd; //写入定时器0初始值
TL0=0x77;
switch(flag)
{case 0x00:P0=ge; P2=0xfd;flag++;break;
case 0x01:P0=shi;P2=0xfe;flag++;break;
case 0x02:P0=bai;P2=0xfb;flag=0;break;
}
}*/
//*****************************************************************
/*


/**********************************
函数名称:超声波测量函数
修改日期:
入口参数:无
返回值: 无
**********************************/
void tran(void)
{
uchar i;
float temp;
TH0=0;
TL0=0;//清定时
TR0=1;//开定时
for(i=8;i>0;i--)
{
csb=!csb;
nop;
nop;
nop;
nop;
nop;
nop;
nop;
nop;
nop;


}
csb=1;
delay_nms(1);
EX0=1;//开中断
if(flag==1) //中断标志位置,说明有回波
{ //以下为路程计算
EX0=0;
temp=high_time*256+low_time;
temp=(temp/1000)/2;
temp*=340;
temp=temp/10;
dis=(unsigned int)temp;
flag=0;
//EX0=1;
}
}
/**********************************
函数名称:中断函数
修改日期:
入口参数:无
返回值: 无
**********************************/
void TT() interrupt 0
{
uint tmp;
EX0=0;
TR0=0;//关定时器
ET0=0;//关外部中断
flag=1; //置位标志位
tmp=TH0*256+TL0; //读取定时器的值
if((tmp>0)&&(tmp<60000))//判断是否超出范围,此设置的范围为到米,实际不能达到米
{
high_time=TH0;//把计时值放入缓冲
low_time=TL0;

}
else //超出范围则重新测量
{
high_time=0;
low_time=0;
}
EX0=1;
}


看一下我的电路和程序吧  我的现在 数码管不停跳数字不定,并且值也不对,我用的AT89S52单片机,发射用的P3.4  ;接受用的中断P3.2   

我理解的原理大致是这样的:单片机发送出去40Khz方波,我用示波器测试了有41KHZ左右,经过放大后驱动超声波发射探头,发出波形,然后遇到障碍物返回波形被超声波接受探头获取,然后由于信号弱所以用CX20106A解调(包括滤波放大),然后会在CX20106a 7角产生低电平,(之前一直为高电平)触发中断,单片机会把发射信号出去的时间和出发中断的时间 记录下来再乘以340在除以2 就是距离。

        现在我的问题是 数码管上的数字根本就没有一个定值,闪烁的很快,并且数字都是不对的。并且也就1米内有反应,反应还是错的,请求帮助。


电路图及其程序:
http://dl.vmall.com/c062km95pa
我是菜鸟 求各位高手帮忙啊  我弄了一个多月了,由于基础不好,所以做起来很费劲,单片机都是现学的。

相关帖子

沙发
airwill| | 2012-11-27 20:05 | 只看该作者
可能反射点太多, 噪声太多.
接收中断请设置最高优先级.一进去就读取定时器值, 避免延时影响测量精度.
一次发送后, 只接受一次接收中断. 避免多个信号引起混乱.

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
pinghaowin + 1 赞一个!
板凳
彼得威克| | 2013-5-16 22:08 | 只看该作者
你试试不要在中断里面放太多语句

使用特权

评论回复
地板
kpzclxtx| | 2013-5-18 10:07 | 只看该作者
不知道楼主解决没有,本科毕设就是这玩意,首先那个4.7偶电阻换大点降低灵敏度会好点,超声波发生后延时数秒再开启外部中断,探头之间会有影响,

使用特权

评论回复
5
chensnowenglish| | 2013-5-29 20:19 | 只看该作者
支持楼上的回答。

使用特权

评论回复
6
hmw890514| | 2013-5-31 16:23 | 只看该作者
kpzclxtx 发表于 2013-5-18 10:07
不知道楼主解决没有,本科毕设就是这玩意,首先那个4.7偶电阻换大点降低灵敏度会好点,超声波发生后延时数 ...

我毕设也做这个,现在就差程序,找到的都有错误,你的程序能不能给我看看,我邮箱775941220@qq.com
谢谢了啊

使用特权

评论回复
7
035197_X| | 2013-7-24 17:05 | 只看该作者

使用特权

评论回复
8
飞辉会i| | 2013-12-19 11:35 | 只看该作者
未躲避盲区检测,

使用特权

评论回复
9
xiongxiaoshuang| | 2014-4-2 13:59 | 只看该作者
好贴

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

20

帖子

0

粉丝