当前位置:首页 > 超声波测距
信息工程学院课程设计(论文)
开,并开始计时了。当超声波接收电路接收了到回波信号的同时时,电路便会产生一个低电平到单片机的P0.0端口,在单片机检测到该信号后,定时器计时就将停止,同时定时器的计数的次数将被提取出来,这样就可以得到以cm为单位的测量的距离值。
程序如下:
#include
#define uchar unsigned char #define uint unsigned int #define zw P2 #define zx P0 sbit trig=P1^0; sbit echo=P3^2;
uint distance; uint x; uint time; uchar flag;
uchar buffer[4]={0,0,0,0}; uchar code
table[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
void delay(uint j) { uint i; uint k;
for(i=0;i for(k=0;k<100;k++); } void dispaly(x) { buffer[0]=x/1000; buffer[1]=x00/100; buffer[2]=x000/10; buffer[3]=x000; zx=table[buffer[0]]; zw=0x10; delay(1); zw=0x00; zx=table[buffer[1]]; zw=0x20; delay(1); zw=0x00; zx=table[buffer[2]]; zw=0x40; delay(1); zw=0x00; zx=table[buffer[3]]; zw=0x80; 18 信息工程学院课程设计(论文) delay(1); zw=0x00; zx=0x80; zw=0x40; delay(1); zw=0x00; void main (void) { uint m; delay(100); while(1) } void init0(void) { TMOD=0x01; EA=1; ET0=1; EX0=0; TH0=0; TL0=0; TR0=0; } void read_distance(void) { uint timeh; uint timel; timeh=TH0; timel=TL0; time=timeh*256+timel; + distance=time*19/100; } { 19 init0(); flag=0; trig=0; delay(1); trig=1; delay(2); trig=0; while(echo==0); TR0=1; EX0=1; while(echo==1); for(m=0;m<=100;m++) { if(flag==1) {dispaly(distance);} if(flag==0) { distance=0; dispaly(distance); } } 信息工程学院课程设计(论文) } } void timer0() interrupt 3 { TH0=0; TL0=0; } void int0() interrupt 0 { TR0=0; read_distance(); flag=1; EX0=0; } 20 信息工程学院课程设计(论文) 整体电路图: 21
共分享92篇相关文档