找回密码
 立即注册

QQ登录

只需一步,快速开始

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

求救···51单片机写的超声波测距程序 ,改来改去都不对,大神帮忙看看哪里错了啊

[复制链接]
跳转到指定楼层
楼主
ID:99453 发表于 2016-5-29 19:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit SID=P2^4;
sbit SCIK=P2^5;
sbit ECHO=P3^2;
sbit TRIG=P1^0;
uint sum=1240,i=0,a=0;
void bizhang();
void StartMo();
void display();
void delay(uchar z)
{
uint i,j;
for(i=0;i<=z;i++)
  for(j=0;j<=110;j++);
  }
void sendbyte(uchar byte)
{
   uchar i;
   for(i=0;i<8;i++)
    {
SCIK=0;               //拉低时钟线
SID=(bit)(byte&0x80);    //发送最高位数据
SCIK=1;               //上升沿发送数据
byte=byte<<1;                  //左移一位
}
}
void write_com(uchar com)
{
sendbyte(0xf8);       //送入5个连续的“1“,启动一个周期,11111,RW(0),RS(0),0
sendbyte(0xf0&com);           
sendbyte(0xf0&(com<<4));      
delay(10);        
}
void write_data(uchar date)
{
sendbyte(0xfa);        //送入5个连续的“1“,启动一个周期,11111,RW(0),RS(1),0
sendbyte(0xf0&date);       //取高四位,数据分两次传送,
                                 //每个字节的内容被送入两个字节
               //高四位放在第一个字节的高四位
sendbyte(0xf0&(date<<4));        //低四位放在第二个字节
delay(10);
}
void write_hz(uchar *hz)
{         
while(*hz!='\0')
{
  write_data(*hz); //写入汉字
  hz++;
}
}
void display()
{
write_com(0x80);
write_hz("sum=");
write_data(sum/1000+0x30);
write_data(sum/100%10+0x30);
write_data(sum/10%10+0x30);
write_data(sum%10+0x30);
write_hz("cm");
write_data(a);
}
void main()
{      
//定时器部分
TMOD=0X10;
EA=1;
ET1=1;
//定时器部分   
write_com(0xf8);//送11111        
write_com(0x0c);//整体和游标显示
write_com(0x01);//清屏
delay(5);
write_com(0x06);//写一个字符,地址和光标指针加1
while(1)
  {
   a=0;
   bizhang();   
   display();
   delay(200);      
  }  
}
void bizhang()
{
ECHO=0;
StartMo();
while(!ECHO);
TH1=0;
TL1=0;
TR1=1; //定时器初始化
while(ECHO);
TR1=0;
sum=(TH1*256+TL1)*0.00017;//
TH1=0;TL1=0;
delay(80);
}
void StartMo()      
  {
   TRIG=0;
   TRIG=1;                        
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   _nop_();   
   _nop_();
   TRIG=0;
}
void ds1()interrupt 3
{
   a=1;
}
12864可以显示,但超声波就是测不了啊,真心求帮助,

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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