帮我看一下我的用51单片机控制HY-SRF-05超声波模块测距的C语言程序那里错了,我实在检查不出来了。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了帮我看一下我的用51单片机控制HY-SRF-05超声波模块测距的C语言程序那里错了,我实在检查不出来了。相关的知识,希望对你有一定的参考价值。

#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit Trig=P2^1;
sbit Echo=P3^2;
sbit rs=P2^4;
sbit rw=P2^5;
sbit e=P2^6;
uchar xianshi1[]=" ch sh bo bi zh ";
uchar num[]="0123456789";
uint n=0,dist;
void delay_ms(uint t)

uint i;
for(;t>0;t--)
for(i=125;i>0;i--);

void delay20us()

uchar a;
for(a=0;a<100;a++);

void writecom(uint com)

e=0;
rs=0;
rw=0;
P0=com;
delay_ms(5);
e=1;
delay_ms(10);
e=0;

void writedate(uint date)

e=0;
rs=1;
rw=0;
P0=date;
delay_ms(5);
e=1;
delay_ms(10);
e=0;


void chushihua(void) //初始化

delay_ms(15);
writecom(0x38);
delay_ms(5);
writecom(0x38);
delay_ms(5);
writecom(0x38);
writecom(0x38);
writecom(0x08);
writecom(0x01);
writecom(0x06);
writecom(0x0c);

void lcdxianshi(uint d)

uint j;
chushihua();
writecom(0x80);
for(j=0;j<16;j++)

writedate(xianshi1[j]);

writecom(0xc0);
writedate(num[dist]);
writedate(' ');
writedate(' ');
writedate('s');
writedate(' ');
writedate('=');
writedate(' ');
writedate(num[d/100]);
writedate(num[d/10%10]);
writedate(num[d%10]);
writedate(' ');
writedate('c');
writedate('m');
// writedate(' ');
writedate(num[TR0]);
writedate(num[n/10]);
writedate(num[n%10]);

void main()

Trig=0;
uint j,b=10;
uint time;
EA=0;
chushihua();
TMOD=0x01;
while(1)

Trig=0;
Trig=1;
delay20us();
Trig=0;
while(Echo==0);
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
EA=1;
ET0=1;
TF0=0;
TR0=1;
while(TR0==0);
if(n<20)

dist=n*17;

else
dist=400;

lcdxianshi(dist);
n=0;


void int0() interrupt 0

TR0=0;

void timer0() interrupt 1

TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
n++;
IT0=1;EX0=1;
if(n>=36)
TR0=0;

参考技术A TR0=1;
while(TR0==0); //你这里有等待的效果嘛?
if(n<20)

dist=n*17;

else
dist=400;追问

while(TR0==0);//这里我写错了但即使while(TR0==1);也是错的

追答

出来的现象是什么现象呢?

参考技术B 不会 参考技术C echo =1的时候才可以啊!!

谁能帮我看一下这些代码的意思

public static byte[] b(byte paramByte1, byte paramByte2, byte paramByte3)

byte[] arrayOfByte = new byte[5];
arrayOfByte[0] = -1;
arrayOfByte[1] = paramByte1;
arrayOfByte[2] = paramByte2;
arrayOfByte[3] = paramByte3;
arrayOfByte[4] = -1;
return arrayOfByte;

public static byte[] b(String paramString)

try

byte[] arrayOfByte1 = new BigInteger(paramString, 16).toByteArray();
return arrayOfByte1;

catch (Exception e)

e.printStackTrace();
return null;


@SuppressWarnings("unused")
private void sendMsg (byte [] result)
// TODO Auto-generated method stub
// 发送数据
try

//InputStream socketReader = c.getInputStream();
OutputStream socketWriter = socket.getOutputStream();
socketWriter.write(result);
socketWriter.flush();
//PrintWriter out = new PrintWriter(socket.getOutputStream());
//out.println(data);
//out.flush();

catch (IOException e)

// TODO Auto-generated catch block
e.printStackTrace();


//下面是一个静态的方法b,它的返回类型是byte[ ],有三个byte类型的参数
public static byte[] b(byte paramByte1, byte paramByte2, byte paramByte3)

byte[] arrayOfByte = new byte[5];//声明一个byte[ ]数组,长度是5
//下面给这个数组的5个元素赋值
arrayOfByte[0] = -1;
arrayOfByte[1] = paramByte1;
arrayOfByte[2] = paramByte2;
arrayOfByte[3] = paramByte3;
arrayOfByte[4] = -1;
return arrayOfByte;//最后返回这个数组

//下面是一个静态的方法b,它的返回类型是byte[ ],有1个String类型的参数
public static byte[] b(String paramString)

try //声明一个byte[ ],用BigInteger的构造方法将String类型的参数传进去,构建了对象后再.toByteArray();转为byte[ ] 数组..try是为了捕获类型转换异常

byte[] arrayOfByte1 = new BigInteger(paramString, 16).toByteArray();
return arrayOfByte1;//无异常,则返回arrayOfByte1

catch (Exception e)//如果捕获异常,执行以下 内代码

e.printStackTrace();
return null;//假如捕获异常,则返回null


@SuppressWarnings("unused")//忽略警告的一个注解
private void sendMsg (byte [] result) //一个无返回值的方法,用来发送消息,1个byte[ ]类型参数
// TODO Auto-generated method stub
// 发送数据
try

//InputStream socketReader = c.getInputStream();
OutputStream socketWriter = socket.getOutputStream(); //socket是一种"套接字"的通讯机制,OutputStream对象要从socket.getOutputStream()的方法获得,用于socket输出流;
socketWriter.write(result);//将参数写入
socketWriter.flush();//释放
//PrintWriter out = new PrintWriter(socket.getOutputStream());
//out.println(data);
//out.flush();

catch (IOException e) //捕获异常后执行 内代码

// TODO Auto-generated catch block
e.printStackTrace();



基本每行都写注释了,你看的懂就看吧,基础不好的话,从基础学起,先不要看太复杂的
参考技术A 公共静态字节(字节[ ]乙parambyte1,parambyte2 parambyte3字节,字节)

字节[ ] arrayofbyte =新字节[ 5 ];
arrayofbyte [ 0 ] = - 1;
arrayofbyte [ 1 ] = parambyte1;
arrayofbyte [ 2 ] = parambyte2;
arrayofbyte [ 3 ] = parambyte3;
arrayofbyte [ 4 ] = - 1;
返回arrayofbyte;

公共静态字节[ ]乙(字符串paramstring)

试试看

字节[ ] arrayofbyte1 =新(paramstring为此分数,16)。tobytearray();
返回arrayofbyte1;

捕获(异常欧)

E . printstacktrace();
返回空;


“suppresswarnings(“闲置”)
私人无效发送短消息(字节[ ]结果)
/ /做的自动生成方法存根
/ /发送数据
试试看

/ /输入流socketreader = C getinputstream();
将socketwriter = getoutputstream()插座;
socketwriter写(结果);
socketwriter flush();
/ / printwriter =新printwriter(getoutputstream()插座。);
/ /输出(数据);
/ / flush()出来;

抓住(类电子)

/ /待办事项自动生成块
E . printstacktrace();

追问

什么意思啊?翻译的啊

追答

这是编的程序吧 其他的我就不知道了 该翻译的 我全翻译了........

参考技术B 我看啊,前两个方法就是转换格式的,第三个适用于网络发送数据的。
貌似是个自定义协议的发送静态工具类。
说简单点儿,就是用既定的数据,全都转化成byte[],然后发送出去。

以上是关于帮我看一下我的用51单片机控制HY-SRF-05超声波模块测距的C语言程序那里错了,我实在检查不出来了。的主要内容,如果未能解决你的问题,请参考以下文章

这个单片机控制舵机的程序 舵机会抖动 哪位大侠帮我改一下c程序?

java超难题,高手帮我看一下下哪里有错误,重谢!

hy-srf05管脚该如何接在stc12c5a60s2单片机上

使用超声波传感器HY-SRF05时,VCC端接在STM32F103C8T6单片机的5V引脚?

用Keil C51编写单片机程序,怎么看程序多少行

求教哪位高手帮我看一下这篇文章究竟说了啥啊???详细一点~~~ www.arl.wustl.edu/~pcrowley/p51-kum