|
#include "12864.h"
#include<reg52.h>
typedef unsigned int u16;
typedef unsigned char u8;
u16 d,q,s;
u16 distance,distance1,distance2,out_TH0,out_TL0,out_TH1,out_TL1,out_TH2,out_TL2;
//TRIG为控制端
sbit TRIG = P1^0;
//ECHO 为接收端
sbit ECHO = P1^1;
void delay(u16 i)
{
while(--i);
}
void xiangshi()
{
/*超声波传感器的使用方法:
控制口发一个10US 以上的高电平,就可以在接收口等待高电平输出。一有输出就可以开定时器计时,当此口变为低电平时就可以读定时器的,此时就为此次测距的时间,方可算出距离。如此不断的周期测, 就可以达到移动测量的值了*/
//控制口发一个10US 以上的高电平
TRIG = 1;
delay(2);
TRIG = 0;
//等待接收端出现高电平
while(ECHO)s++; //等待高电平结束
delay(100);
out_TH0 = s; //取定时器的值
distance = out_TH0;
distance =34*out_TH0/1000 ;
}
void main()
{
v_Lcd12864Init_f();
TRIG = 0; // 先给控制端初始化为0
while(1)
{
xiangshi();
v_Lcd12864PutString_f( 0,0, "高度:") ;//显示字符串
v_Lcd12864SetAddress_f(3,0);
v_Lcd12864SendData_f(distance/100+0x30);//显示变量
v_Lcd12864SetAddress_f(4,0);
v_Lcd12864SendData_f(distance/10%10+0x30);//显示变量
v_Lcd12864SetAddress_f(5,0);
v_Lcd12864SendData_f(distance%10+0x30);//显示变量
v_Lcd12864PutString_f(6,0, "cm") ;//显示字符串
v_Lcd12864PutString_f( 7,0,'s' ) ;//显示字符串
delay(5000);
}
}
|
|