找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3417|回復: 0
收起左側

求救···51單片機寫的超聲波測距程序 ,改來改去都不對,大神幫忙看看哪里錯了啊

[復制鏈接]
ID:99453 發(fā)表于 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);    //發(fā)送最高位數據
SCIK=1;               //上升沿發(fā)送數據
byte=byte<<1;                  //左移一位
}
}
void write_com(uchar com)
{
sendbyte(0xf8);       //送入5個連續(xù)的“1“,啟動一個周期,11111,RW(0),RS(0),0
sendbyte(0xf0&com);           
sendbyte(0xf0&(com<<4));      
delay(10);        
}
void write_data(uchar date)
{
sendbyte(0xfa);        //送入5個連續(xù)的“1“,啟動一個周期,11111,RW(0),RS(1),0
sendbyte(0xf0&date);       //取高四位,數據分兩次傳送,
                                 //每個字節(jié)的內容被送入兩個字節(jié)
               //高四位放在第一個字節(jié)的高四位
sendbyte(0xf0&(date<<4));        //低四位放在第二個字節(jié)
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可以顯示,但超聲波就是測不了啊,真心求幫助,

回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表