amoBBS 阿莫电子论坛

 找回密码
 注册
搜索
bottom↓
查看: 890|回复: 14

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

[复制链接]
发表于 2015-8-4 11:31:16 | 显示全部楼层 |阅读模式
求一份STC12C5A60S2超声波HC-SR04模块测距的程序和电路!非常感谢...
 楼主| 发表于 2015-8-4 11:36:03 | 显示全部楼层
麻烦有的大哥大姐给我发下811043655@qq.com!
 楼主| 发表于 2015-8-4 11:36:25 | 显示全部楼层
发表于 2015-8-4 13:04:49 | 显示全部楼层
伸手党吗?本论坛不提供这样的服务。
你要想做,自己先尝试,有了问题才来求助。
发表于 2015-8-4 13:56:10 | 显示全部楼层
开个价吧。
发表于 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 | 显示全部楼层

开什么价?莫元还是飞币这些吗?
发表于 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 uint  unsigned 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[num]);
                        delay(2);                    
                                                         }   
                write_com(0x80+0x43);
                for(num=0;num<3;num++)
                {
                write_date(table3[num]);
                delay(2);
                                                                 }
}         
                  
        
void LCD_show( int m)
{         
                write_com(0x80+0x40);
                {
                        uchar num2;
                        num2=m/100%10;
                        write_date(table2[num2]);
                        delay(2);
                        num2=m/10%10;
                        write_date(table2[num2]);
                        delay(2);
                        num2=m%10;
                        write_date(table2[num2]);
                        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
}
IMG_20150804_210326.jpg
 楼主| 发表于 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 | 显示全部楼层
模块化调试,不思进取,终会失败
友情提示:标题不合格、重复发帖,将会被封锁ID。详情请参考:论坛通告:封锁ID、获得注册邀请码、恢复被封ID、投诉必读
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|阿莫电子论坛(原ourAVR/ourDEV) ( 公安备案:44190002001997(交互式论坛) 工信部备案:粤ICP备09047143号 )

GMT+8, 2019-6-21 06:16

阿莫电子论坛, 原"中国电子开发网"

© 2004-2018 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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