原味的优乐美 发表于 2015-8-4 11:31:16

求一份STC12C5A60S2超声波HC-SR04模块测距的程序和电路!非常...

求一份STC12C5A60S2超声波HC-SR04模块测距的程序和电路!非常感谢...

原味的优乐美 发表于 2015-8-4 11:36:03

麻烦有的大哥大姐给我发下811043655@qq.com!

原味的优乐美 发表于 2015-8-4 11:36:25

{:smile:}{:smile:}{:smile:}{:smile:}{:smile:}{:smile:}{:smile:}{:smile:}{:smile:}{:smile:}{:smile:}{:smile:}

hck2llj 发表于 2015-8-4 13:04:49

伸手党吗?本论坛不提供这样的服务。
你要想做,自己先尝试,有了问题才来求助。

tam2907 发表于 2015-8-4 13:56:10

开个价吧。

tam2907 发表于 2015-8-4 14:05:35

开个价吧。

原味的优乐美 发表于 2015-8-4 15:20:25

hck2llj 发表于 2015-8-4 13:04
伸手党吗?本论坛不提供这样的服务。
你要想做,自己先尝试,有了问题才来求助。 ...

好吧,我有弄了程序仿真还好,硬件LCD老是没显示!

原味的优乐美 发表于 2015-8-4 20:42:42

tam2907 发表于 2015-8-4 14:05
开个价吧。

开什么价?莫元还是飞币这些吗?

大米饭 发表于 2015-8-4 20:44:07

买模块送的有资料的,很简单,多尝试一下

原味的优乐美 发表于 2015-8-4 21:05:44

大米饭 发表于 2015-8-4 20:44
买模块送的有资料的,很简单,多尝试一下

#include <reg52.h>   
#define uchar unsigned char
#define uintunsigned int
uchar code table1[]="The distance is :";
uchar code table2[]="0123456789";
uchar code table3[]=" CM";
double distance;
sbit lcden=P2^6;
sbit lcdrs=P2^4;
sbit rw= P2^5;
sbit Trig=P2^0;
sbit Echo=P3^3;
bit succeed_flag=0;
void delay(uint z)
{
         uint x,y;
         for(x=z;x>0;x--)
                        for(y=110*10;y>0;y--);
}
void delay_20us()
{
         uchar a ;
         for(a=0;a<20;a++);
}
//***************************************************************
//显示数据转换程序
void write_com(uchar com)
{
                lcdrs=0;
                P0=com;
                delay(5);
                lcden=1;
                delay(5);
                lcden=0;
}
void write_date(uchar date)
{
                lcdrs=1;
                P0=date;
                delay(5);
                lcden=1;
                delay(5);
                lcden=0;
}
void LCD_init()
{   
                uchar num;
                lcden=0;rw=0;
                write_com(0x38);
                write_com(0x0c);
                write_com(0x06);
                write_com(0x01);
                write_com(0x80);
                for(num=0;num<17;num++){
                        write_date(table1);
                        delay(2);                  
                                                         }   
                write_com(0x80+0x43);
                for(num=0;num<3;num++)
                {
                write_date(table3);
                delay(2);
                                                               }
}         
                  
      
void LCD_show( int m)
{         
                write_com(0x80+0x40);
                {
                        uchar num2;
                        num2=m/100%10;
                        write_date(table2);
                        delay(2);
                        num2=m/10%10;
                        write_date(table2);
                        delay(2);
                        num2=m%10;
                        write_date(table2);
                        delay(2);
                        }
}

//***************************************************************
//主程序
void main()
{            
                LCD_init();
                Trig=0;   //首先拉低脉冲输入引脚
                TMOD=0x10;//定时器1,16位工作方式
                while(1)      
                        {      
                              EA=0;//关总中断
                              IT1=1;         
                              Trig=1;//超声波输入端
                              delay_20us();   //延时20us
                              Trig=0;       //产生一个20us的脉冲
                              while(Echo==0); //等待Echo回波引脚变高电平
                              succeed_flag=0; //清测量成功标志
                              EA=1;
                              EX1=1;
                              TR1=1;          //启动定时器1
                              delay(20);      //等待测量的结果                                             
                              if(succeed_flag==1)
                              LCD_show(distance);               
                              if(succeed_flag==0)
                                        { distance=0;                  //没有回波则清零
                                       LCD_show(distance);
                                        }               
                              }
}
//***************************************************************
                                    //外部中断0,用做判断回波电平
void exter()interrupt 2// 外部中断1是2号
{         
                TR1=0;
                EX1=0;
                distance=(TH1*256+TL1+59)*0.0172;//厘米   
                succeed_flag=1;//至成功测量的标志
                TH1=0;          //定时器1清零
                TL1=0;      //关闭外部中断1
}

原味的优乐美 发表于 2015-8-4 21:06:43

大米饭 发表于 2015-8-4 20:44
买模块送的有资料的,很简单,多尝试一下

能帮我看下哪里有错吗?

大米饭 发表于 2015-8-4 21:50:13

原味的优乐美 发表于 2015-8-4 21:06
能帮我看下哪里有错吗?

调整一下屏幕对比度,先把显示整出来在整超声波的

完美幸 发表于 2015-8-4 21:58:39

要自己学会摸索,一有问题就问这问那,伸手党没人鸟你的。

小李非刀 发表于 2015-8-5 21:59:39

这个很简单的啊,就是检测一个脉冲的宽度而已,我放过在四轴上,做2米以内的定高。

小小怪 发表于 2015-8-5 22:10:31

模块化调试,不思进取,终会失败
页: [1]
查看完整版本: 求一份STC12C5A60S2超声波HC-SR04模块测距的程序和电路!非常...