超声波测距,求大侠帮助
本帖最后由 龙道行 于 2012-9-1 10:15 编辑#include<reg52.h>
#define u unsigned int
#define uchar unsigned char
uchar code table0[]="距离是:";
uchar code table[]="0123456789";
u s,time;
uchar bai,shi,ge,qian;
sbit trig=P2^1;
sbit echo=P2^2;
sbit en=P3^4;
sbit rs=P3^5;
sbit rw=P3^6;
sbit psb=P3^7;
void delay(u x)
{
u y,z;
for(y=x;y>0;y--)
for(z=110;z>0;z--);
}
void mai()
{
trig=0;
delay(1);
trig=1;
delay(1);
trig=0;
}
void wrcom(uchar com)
{
rs=0;
rw=0;
P0=com;
delay(1);
en=1;
delay(1);
en=0;
}
void wrdat(uchar dat)
{
rs=1;
rw=0;
P0=dat;
delay(1);
en=1;
delay(1);
en=0;
}
void init()
{
EA=1;
TMOD=0x01;
ET0=1;
TH0=0;
TL0=0;
psb=1;
wrcom(0x38);
wrcom(0x0c);
wrcom(0x01);
}
void dis0()
{
uchar i;
wrcom(0x80);
for(i=0;i<8;i++)
{
wrdat(table0);
delay(1);
}
wrcom(0x86);
wrdat('c');
wrdat('m');
}
void dis()
{
wrcom(0x84);
wrdat(table);
wrdat(table);
wrdat(table);
wrdat(table);
}
void jisuan()
{
time=TH0*256+TL0;
s=time*1.87/100+1;
TH0=0;
TL0=0;
if(s>9999)
{
uchar i;
wrcom(0x86);
for(i=0;i<4;i++)
{
wrdat('-');
}
}
else
{
qian=s/1000;
bai=s%1000/100;
shi=s%100/10;
ge=s%10;
}
}
void main()
{
init();
dis0();
while(1)
{
mai();
while(!echo);
TR0=1;
while(echo);
TR0=0;
jisuan();
dis();
delay(1000);
}
}
void timer0() interrupt 1
{
TH0=0;
TL0=0;
}
测距离时,老是卡在那里,一转换距离,就不准,甚是郁闷 到底有什么问题, 让别人猜 ? avr-qq 发表于 2012-9-1 10:01 static/image/common/back.gif
到底有什么问题, 让别人猜 ?
测距离时,老是卡在那里,一转换距离,就不准,甚是郁闷 {:lol:}贴个程序算啥? 主函数里面的超声波出发程序 换到中断里面,让中断定时60-100MS触发一次就可以了
页:
[1]