3567|1

2

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

我的超声波程序总是出错,不知道哪儿有问题,请高手帮忙解决!!!非常感谢 [复制链接]

#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int

sbit echo=P3^2;//接收端
sbit clk=P2^0;//脉冲输入
sbit lcdrs=P1^0;//液晶命令数据选择端
sbit lcdrw=P1^1;//读写选择端
sbit lcden=P1^2;//使能端
uint distance;
uchar num,flag1,flag2,timeh,timel;
uchar code table[]="distance:   cm";

void delay(uint z)//延时1ms
{
 uint x,y;
 for(x=z;x>0;x--)
  for(y=110;y>0;y--); 
}

void write_com(uchar com)//液晶写命令
{
 lcdrs=0;
 lcden=0;
 P0=com;
 delay(5);
 lcden=1;
 delay(5);
 lcden=0;
}

void write_data(uchar date) //液晶写数据
{
 lcdrs=1;
 lcden=0;
 P0=date;
 delay(5);
 lcden=1;
 delay(5);
 lcden=0;
}

void display(uint distance)//液晶显示函数
{
 uchar bai,shi,ge;
 bai=distance%1000/100;
 shi=distance%1000%100/10;
 ge=distance%10;
 write_com(0x89);
 write_data(0x30+bai);
 delay(2);
 write_data(0x30+shi);
 delay(2);
 write_data(0x30+ge);
 delay(2);  
}

void csb_fs()//超声波发送
{
 clk=1;
 _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
     _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();//延时21us
 clk=0;
}
void get_distance()
{
 csb_fs();
 delay(1);
 while(echo==0);//等待接收信号
 flag1=0;
 flag2=0;
 TH0=0X00;
 TL0=0X00;
 IT0=1;//下降沿触发
 EX0=1;//开外部中断
 ET0=1;//开定时器中断
 TR0=1;//开始计时
 while(echo==1)
 {
  if(flag2==1) break;
 }
 if(flag1==1)
 {
  distance=(timeh*256+timel)*0.0172;
  display(distance);  
 }
 if((flag1==0)&&(flag2==1))
 {
  distance=0;
  display(distance);
 }
}

void init()
{
 lcdrw=0;
 lcden=0;
 distance=0;
 clk=0;
 EA=1;
 EX0=0;
 TMOD=0X01;
 write_com(0x38);
 write_com(0x0c);
 write_com(0x06);
 write_com(0x01);
 write_com(0x80);
    for(num=0;num<14;num++)
  { 
   write_data(table[num]);
   delay(2);
  }
}

void main()
{
 init();
 while(1)
 {
  get_distance();
  delay(10);
 }
}

void extenr0()interrupt 0
{
 EX0=0;
 TR0=0;
 timeh=TH0;
 timel=TL0;
 flag1=1;
}

void timer0()interrupt 1
{
 TF0=0;
 TR0=0;
 TH0=0;
 TL0=0;
 EX0=0;
 flag2=1;
  
}

此帖出自51单片机论坛

最新回复

你把错误原因说出来啊!不然别人怎么帮你啊!  详情 回复 发表于 2011-8-27 11:17
点赞 关注
 

回复
举报

21

帖子

0

TA的资源

一粒金砂(中级)

沙发
 
你把错误原因说出来啊!不然别人怎么帮你啊!
此帖出自51单片机论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表