搜索
bottom↓
回复: 9

超声波测距程序

[复制链接]

出0入0汤圆

发表于 2011-8-29 16:55:26 | 显示全部楼层 |阅读模式
发个超声波测距程序,今年电子大赛想用,求高手指教改进。
1602液晶显示。液晶显示没问题,发射脉冲有问题
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit enable=P2^4;
sbit wela=P2^6;//以下四个定义液晶的,不用看
sbit dula=P2^7;
sbit lcden=P3^4;
sbit lcdrs=P3^5;//
uchar  length[]="00.0000m";       
float time,len;
uchar flag=0,num=0,flag2=0;
void init();
void delay(uint);
void ledinit();
void write_com(uchar);
void write_date(uchar);
void lcddisplay();
void separate();

void main()
{
uchar i;
init();
while(1)
        {
        if(flag2==1)//外部中断收到后,显示距离
                {
                for(i=3;i>0;i--)
                        {
                    separate();
                    lcddisplay();
                        }
                 num=0;
                      flag=0;
                 flag2=0;
                 TR0=1;
                 }
        }
}

void init()//初始化
{
        TMOD=0x02;
        TH0=224;
        TL0=224;
        EA=1;
        ET0=1;
        TR0=1;
        IT0=1;
        EX0=0;
        enable=0;
    ledinit();
}

  void timer1() interrupt 1//定时器里循环发脉冲波
{   
              switch(flag)
              {
                      case 0:       
                                      EX0=0;
                                      num=0;
                                      enable=1;                  
                                   flag=1;
                                 break;//高电平100微秒

                   case 1:
                                   num++ ;
                                  if(num==3)
                                 {
                                  TR0=0;
                                  num=0;
                                  enable=0;
                                  flag=2;
                                  TR0=1;
                                 }
                                 break;//低电平大概50微秒

                    case 2:
                                  num++;
                               if(num==1)
                                {
                                  TR0=0;
                                     num=0;                 
                                  flag=3;
                                  TR0=1;
                                }
                                break;
                case 3:               EX0=1;               
                                  num++;
                                 if(num>=188)//大于188说明接收失败,外部中断没收到,循环;收到后进入外部中断
                                   {
                                     TR0=0;
                                     num=0;
                                    flag=0;
                                     TR0=1;
                               }
                              break;
        }
}


void  timer2() interrupt 0  //收到后进入外部中断,flag2置1
{  
TR0=0;
time=num*12.0/11059200+0.00015;
len=346.4*time/2;//计算
flag2=1;
EX0=0;
}

/******************液晶显示子函数****************************/
void ledinit()
{
wela=0;
dula=0;
write_com(0x38);
write_com(0x0f);
write_com(0x06);
write_com(0x10);
delay(5);
}

void write_com(uchar com)
{
lcdrs=0;
delay(5);
P1=com;
delay(5);
lcden=1;
delay(5);
lcden=0;
lcdrs=1;

}

void write_date(uchar date)
{
lcdrs=1;
delay(5);
P1=date;
delay(5);
lcden=1;
delay(5);
lcden=0;
lcdrs=1;

}
void lcddisplay()
{
uint j;
  write_com(0x80+0x01);
for(j=0;j<8;j++)
  write_date(length[j]);
/*for(j=0;j<8;j++)
     write_com(0x80+0x09);
  write_date(' ');
write_com(0x80+0x40);
for(j=0;j<16;j++)
  write_date(' ');         */
}

/***************分离各位数*****************/
void separate()
{
  length[6]=((int)(len*10000))%10+'0';
  length[5]=((int)(len*1000))%10+'0';
  length[4]=((int)(len*100))%10+'0';
  length[3]=((int)(len*10))%10+'0';
  length[1]=((int)len)%10+'0';
  length[0]=((int)len)/10+'0';
}
/**************************************************/
  void delay(uint z)
{
   uint x,y;
  for(x=z;x>0;x--)
    for(y=110;y>0;y--);
}

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2011-8-29 17:05:06 | 显示全部楼层
呵呵  上午调好的超声波  可惜只能测到3米 不知道为什么 距离远了 就出错

出0入0汤圆

发表于 2011-8-29 17:59:41 | 显示全部楼层
呵呵,先收下,学习一下

出0入0汤圆

发表于 2011-8-29 19:24:19 | 显示全部楼层
回复【楼主位】pengkingli  
-----------------------------------------------------------------------

求讲解。。。。

出0入0汤圆

发表于 2011-8-29 20:21:29 | 显示全部楼层
能注释下么~哈哈,看不懂啊。我也刚学

出0入0汤圆

发表于 2011-8-29 20:21:43 | 显示全部楼层
能注释下么~哈哈,看不懂啊。我也刚学

出0入0汤圆

发表于 2011-8-31 14:25:37 | 显示全部楼层
你的超声波模块不行,一般的能够测量3cm到3m的范围,国外的可以测量3cm到10M的范围,呵呵 换个就行了

出0入0汤圆

发表于 2012-5-5 12:17:32 | 显示全部楼层
本帖最后由 SHUDAIZI13 于 2012-5-5 13:23 编辑

求高手按电路图写程序。。。也是超声波测距

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2012-5-5 13:56:16 | 显示全部楼层
lz说的发射脉冲有问题是指的啥问题? 这个程序不好使??
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-24 02:22

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表