搜索
bottom↓
回复: 10

啊啊啊51单片机驱动超声波侧距离模块真是菜了,,,进来...

[复制链接]

出0入0汤圆

发表于 2012-5-29 23:28:46 | 显示全部楼层 |阅读模式
刚买的模块上面芯片的信号没抹去了现在自己看着资料弄弄不出结果····菜鸟不是伤神是神伤了。。。。。。。。。。。。。。。。。。



#include<reg52.h>
#include<1602lcd.c>
#define uchar unsigned char
#define uint unsigned int
sbit lcd_rw_port = P2^6;
sbit key=P1^0;
sbit Trig=P3^7;
sbit Echo=P3^2;
uint distance_data;
void delay(char xms)                                //延时xms
{
    char i,j;
         for(i=xms;i>0;i--)
            for(j=300;j>0;j--);
}
void delay_20us()
{
     uchar bt ;
    for(bt=0;bt<10;bt++);
        }
void disp(int lcd_data)
{
      
          lcd_locate(1,1);
          lcd_4_char(lcd_data);
               
          lcd_locate(2,1);       
          lcd_4_char(3000);
}
void main()
{    lcd_rw_port=0;
     lcd_int();
     lcd_write_com(0x01);
         Trig=0;
          
         TMOD=0x09;
         TH0=0x00;
         TL0=0x00;
         ET0=1;
         TR0=1;
         EA=1;
         while(1)
         {
             Trig=1;
                 delay_20us;
                 Trig=0;
                 
                while(Echo==0)
                           ;
                     TH0=0x00;
                 TL0=0x00;

                  
             while(Echo==1)
                          ;       
                          distance_data=TH0;
                          distance_data<<=8;
                          distance_data=distance_data|TL0;
                          distance_data*=12;
                          distance_data/=58;
                          disp(distance_data);

                                   
                       
       
        }
}

上面是自己弄得···得不到结果,得不到结果·······
大虾们能给个好点的参考吗·······

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

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

出0入0汤圆

发表于 2012-5-30 11:23:29 | 显示全部楼层
爱莫能助,连你用的是什么模块都不知道而且现在遇到什么问题也没有描述清楚

出0入0汤圆

发表于 2012-5-30 11:32:55 | 显示全部楼层
xsh2005105326 发表于 2012-5-30 11:23
爱莫能助,连你用的是什么模块都不知道而且现在遇到什么问题也没有描述清楚 ...

确实,看楼主的问题描述,我需要看了几遍,也不明其意,也就只能猜猜了

出0入0汤圆

发表于 2012-6-1 10:39:59 | 显示全部楼层
不知道楼主想干啥。

出0入0汤圆

发表于 2012-6-1 15:33:09 | 显示全部楼层
同意楼上,起码资料要给全点吧

出0入0汤圆

发表于 2012-6-1 20:00:27 | 显示全部楼层
是不是HC-SR04,上面主控芯片是给磨过了的,不知道是啥玩意。

出0入0汤圆

 楼主| 发表于 2012-6-2 12:35:22 | 显示全部楼层
啊啊啊看到了····HC-SR04
HC-SR04HC-SR04HC-SR04HC-SR04
大虾···能给点资料么或者提点建议哦


出0入0汤圆

发表于 2012-6-2 13:01:27 | 显示全部楼层
就是用定时器计时啊,控制发个脉冲,然后开始计时,然后返回脉冲到,定时器数值就是距离了。

出0入134汤圆

发表于 2012-6-2 14:05:15 | 显示全部楼层
本帖最后由 elecfun 于 2012-6-2 14:08 编辑

给个你参考下

#include <AT89x51.H>          //器件配置文件
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char   //宏定义
#define  RX  P3_5
#define  TX  P3_4
unsigned int  time = 0;
unsigned int
  timer = 0;
unsigned char
posit = 0;
unsigned long
S = 0;
bit
      flag = 0;
#define SET P1_0    //定义调整键
#define ADD P1_1    //定义减少键
#define DEC P1_2    //定义增加键
#define BEEP P3_7    //定义蜂鸣器
bit shanshuo_st;    //闪烁间隔标志
bit beep_st;     //蜂鸣器间隔标志
uchar x = 0;    //计数器
uchar set_st = 0;   //状态标志
unsigned long m;     //温度值全局变量
unsigned long shangxian = 200; //上限报警,默认值为38
unsigned long xiaxian = 150; //下限报警,默认值为38
unsigned char const discode[] = {0x28, 0xeb, 0x32, 0xa2, 0xe1, 0xa4, 0x24,
                                 0xea
, 0x20, 0xa0, 0xf7, 0xff
                                };
//1-9 "-" 全灭
unsigned char const positon[4] = { 0xfe, 0xfb, 0xef, 0xbf};
unsigned char
disbuff[4] = { 0, 0, 0, 0,};
/*****延时子程序*****/

void
Delay(uint num)
{

    while
(--num);
}

/********************************************************/

void
Display(void)                     //扫描数码管
{
    if
(posit == 2)
        {
P2 = (discode[disbuff[posit]]) & 0xdf;}
    else

        {
P2 = discode[disbuff[posit]];}

    P0 = positon[posit];

    if
(++posit >= 4)
        posit = 0;
}

/*****显示报警温度子程序*****/

Disp_alarm(uchar baojing)
{

    P2 = discode[baojing%10];
    P0 = 0xbf;
    Delay(200);
    P2 = discode[baojing%100/10]; //显示十位
    P0 = 0xef;
    Delay(200);
    P2 = discode[baojing/100]; //显示百位
    P0 = 0xfb;
    Delay(200);

    if
(set_st == 1)P2 = 0x61;
    else if
(set_st == 2)P2 = 0x3d; //上限H、下限L标示

    P0 = 0xfe;
    Delay(200);
    P0 = 0xff;         //关闭显示
}
/********************************************************/

void
Conut(void)
{

    time = TH0 * 256 + TL0;
    TH0 = 0;
    TL0 = 0;

    S = (time * 1.7) / 10; //算出来是CM
    m = S / 10;

    if
(S >= 7000) { //超出测量范围显示-
        disbuff[0] = 10;      //-
        disbuff[1] = 10;      //-
        disbuff[2] = 10;      //-
        disbuff[3] = 10;      //-
    } else {
        disbuff[0] = S % 10000 / 1000;
        disbuff[1] = S % 10000 % 1000 / 100;
        disbuff[2] = S % 10000 % 1000 % 100 / 10;
        disbuff[3] = S % 10000 % 1000 % 100 % 10;
    }
}

/********************************************************/
/*****报警子程序*****/

void
Alarm()
{

    if
(x >= 3) {beep_st = ~beep_st; x = 0;}

    if
((m >= shangxian && beep_st == 1) || (m < xiaxian && beep_st == 1))BEEP = 1; //&&beep_st==1//&&beep_st==1
    else BEEP = 0;
}

/********************************************************/

void
  zd3()  interrupt 3 {      //T1中断用来扫描数码管和计800MS启动模块
    TH1 = 0xf8;
    TL1 = 0x30;
    Display();
    timer++;
    x++;

    if
(timer >= 400) {
        timer = 0;
        TX = 1;                             //800MS  启动一次模块
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        TX = 0;
    }
}

/*********************************************************/


void
  main(void)

{

    TMOD = 0x11;           //设T0为方式1,GATE=1;
    TH1 = 0xf8;           //2MS定时
    TL1 = 0x30;
    ET1 = 1;                //允许T1中断
    TR1 = 1;
    EA = 1;                //开启总中断
    BEEP = 0;

    while
(1) {

        if
(SET == 0) {
            Delay(2000);
            do
{} while(SET == 0);

            set_st++; x = 0;
            shanshuo_st = 1;

            if
(set_st > 2)set_st = 0;
        }


        if
(set_st == 0) {
            EA = 1;

            while
(!RX);          //当RX为零时等待

            TR0 = 1;                 //开启计数

            while
(RX);               //当RX为1计数并等待

            TR0 = 0;                    //关闭计数
            Conut();               //计算
            Alarm();
        }
else if(set_st == 1) {
            BEEP = 0;  //关闭蜂鸣器
            EA = 0;

            if
(DEC == 0) {
                Delay(2000);
                do
{} while(DEC == 0);

                shangxian--;

                if
(shangxian < xiaxian)shangxian = xiaxian;
            }


            if
(ADD == 0) {
                Delay(2000);
                do
{} while(ADD == 0);

                shangxian++;

                if
(shangxian > 500)shangxian = 500;
            }


            if
(x >= 10) {shanshuo_st = ~shanshuo_st; x = 0;}

            if
(shanshuo_st) {Disp_alarm(shangxian);}
        }
else if(set_st == 2) {
            BEEP = 0;  //关闭蜂鸣器
            EA = 0;

            if
(DEC == 0) {
                Delay(2000);
                do
{} while(DEC == 0);

                xiaxian--;

                if
(xiaxian < 0)xiaxian = 0;
            }


            if
(ADD == 0) {
                Delay(2000);
                do
{} while(ADD == 0);

                xiaxian++;

                if
(xiaxian > shangxian)xiaxian = shangxian;
            }


            if
(x >= 10) {shanshuo_st = ~shanshuo_st; x = 0;}

            if
(shanshuo_st) {Disp_alarm(xiaxian);}
        }
    }

}


出0入0汤圆

 楼主| 发表于 2012-6-2 18:45:24 | 显示全部楼层
elecfun 发表于 2012-6-2 14:05
给个你参考下

#include           //器件配置文件

//800MS  启动一次模块
这个是什么哦??

出0入0汤圆

 楼主| 发表于 2012-6-2 18:46:10 | 显示全部楼层
gongnn 发表于 2012-6-2 13:01
就是用定时器计时啊,控制发个脉冲,然后开始计时,然后返回脉冲到,定时器数值就是距离了。 ...

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

本版积分规则

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

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

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

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