找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3212|回复: 8
打印 上一主题 下一主题
收起左侧

再帮我看看这个超声波测距程序,太感谢了!

[复制链接]
跳转到指定楼层
楼主
ID:50469 发表于 2013-7-23 19:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include<reg52.h>
#include<intrins.h>
#define uint  unsigned int
#define uchar unsigned char   
#define NOP() {_nop_();_nop_();_nop_();_nop_();}
//------LCD引脚-----
sbit LCD_RS=P4^5;
sbit LCD_RW=P5^5;
sbit LCD_EN=P5^4;
//------超声波引脚---
sbit Tx=P1^0; //触发控制信号输入
sbit Rx=P3^2;  //回响信号输出
uchar code table[]="Distance:"; //LCD第一行显示
uchar temp_dis[]="000.0cm"; //LCD第二行
uint t,distance;
uchar cache[4]={0,0,0,0};
//--------延时-------
void delay(uint ms)
{
uint t;
while(ms--)
  for(t=0;t<120;t++);  
}   
//----------LCD写指令----------
void lcd_write_com(uchar com)
{   
LCD_RS=0;
LCD_RW=0;
P0=com;
LCD_EN=1;         
   delay(5);
LCD_EN=0;
}
//----------LCD写数据----------
void lcd_write_data(uchar dat)
{  
LCD_RS=1;
LCD_RW=0;
P0=dat;  
LCD_EN=1;
delay(5);
LCD_EN=0;  
}  
//-------LCD初始化-------
void lcd_init()
{
LCD_EN=0;
lcd_write_com(0x38); //LCD显示模式设置
lcd_write_com(0x0c); //LCD显示开/关及光标设置
lcd_write_com(0x06); //当写一个字符后地址指针加1,且光标加1
lcd_write_com(0x01);  //显示清屏
}   
//---------液晶显示程序----------
void lcd_print( )
{

uint num=0;
lcd_write_com(0x80);
while(table[num]!='\0')  
{
  lcd_write_data(table[num]);
  num++;
  delay(5);
}  
num=0;
lcd_write_com(0xc0);
while(temp_dis[num]!='\0')  
{
  lcd_write_data(temp_dis[num]);
  num++;
  delay(5);
}
}  
void hcsr04_Init()
{
delay(60);
Tx=1;//触发脉冲
NOP();NOP();NOP();
Tx=0;  
distance=1.7*t/100;   //距离计算cm
}  
void distance_convert( uint dat)
{
cache[0]=dat/100;
cache[1]=dat%100/10;
cache[2]=dat%10;
cache[3]=dat*10%10;
temp_dis[0]=cache[0]+'0';
temp_dis[1]=cache[1]+'0';
temp_dis[2]=cache[2]+'0';
temp_dis[4]=cache[3]+'0';  
}  
//------------主程序-----------
void main()
{
lcd_init();
delay(5);
TMOD=0x09;
EA=1;   //开总中断
TR0=1;  //启动定时器
EX0=1;  //开外部中断
// ET0=1; //开定时器中断
IT0=1;  //设置为下降沿中断方式
while(1)
{
  hcsr04_Init();
  lcd_print();
  distance_convert(distance);
}  
}
//外部中断0
void int0() interrupt 0
{
t=TH0*256+TL0; //计算高电平持续的时间,上升沿到来时候开始计时,
TH0=0;    //下降沿到来进入外部中断,关闭计时器,停止计时
TL0=0;  
}
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:1 发表于 2013-7-25 00:18 | 只看该作者
这个程序什么问题?
回复

使用道具 举报

板凳
ID:52115 发表于 2013-7-27 19:17 | 只看该作者
我记得我用的超声波模块触发信号要10us的高电平(30us最佳)
回复

使用道具 举报

地板
ID:52115 发表于 2013-7-27 19:19 | 只看该作者
你的触发信号好像不行
回复

使用道具 举报

5#
ID:52343 发表于 2013-7-27 22:49 | 只看该作者
回复

使用道具 举报

6#
ID:50469 发表于 2013-8-6 11:17 | 只看该作者
admin 发表于 2013-7-25 00:18
这个程序什么问题?

奇怪了,好像确实没什么问题了,但前两天写出来不能用啊,还是谢了,呵呵
回复

使用道具 举报

7#
ID:50469 发表于 2013-8-6 11:18 | 只看该作者
不过不是很准确,总是差那么2.3厘米
回复

使用道具 举报

8#
ID:159841 发表于 2017-1-4 23:22 | 只看该作者
这个程序是错的吧  你试国没有
回复

使用道具 举报

9#
ID:160258 发表于 2017-1-5 22:32 | 只看该作者
程序看不懂
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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