一款液晶顯示的超聲波測(cè)距板
////////////////////////主函數(shù)////////////////////////////////
void main()
{
unsigned long Sum;
uchar i;
uchar num;
bit bOK;
uchar
TCON=B00000000; //INT0電平觸發(fā)
TMOD=0X01; //T0作為計(jì)數(shù)輸入
IP=B00000001; //置INT0優(yōu)先級(jí)最高
LCD_init(); //液晶初始化
LCD_clear(); //清屏顯示
DisplayChinese(0,0,13,16,3,0,0,WORD); //在LCD上顯示“溫度:”
DisplayChinese(72,0,13,16,1,3,0,WORD); //在LCD上顯示“℃”
DisplayChinese(0,2,13,16,3,4,0,WORD); //在LCD上顯示"聲速:”
while(1) //測(cè)量系統(tǒng)主循環(huán)
{
bOK=0;
num=0;
Sum=0;
ReadTemperature(); //檢測(cè)當(dāng)前環(huán)境溫度
for(i=1; i<=3; ++i) //循環(huán)測(cè)量,求平均值
{
StartInit(); //測(cè)量初始化
StartMeasure(); //開始測(cè)量第1次,確定大概范圍
if(Success==1)
{
bOK=1; //有1次成功,則測(cè)距成功
Sum=(nCount>Sum)?nCount:Sum; //取測(cè)量最大值
}
Delay_ms(80); //延時(shí)10ms后繼續(xù)測(cè)量
}
nCount=Sum;
Success=bOK;
DisplayResult();
}
}
/***************所用到的相關(guān)函數(shù)功能實(shí)現(xiàn)*****************/
void INT_0() interrupt 0 using 0 //運(yùn)行到此處說明測(cè)距成功
{
TR0=0; //關(guān)計(jì)數(shù)
ET0=0; //關(guān)定時(shí)器中斷
EX0=0; //關(guān)INT0中斷
while(!P3_2); //等待CX20106輸出電平變高
//將計(jì)數(shù)器數(shù)據(jù)放進(jìn)nCount,用來進(jìn)行數(shù)據(jù)處理
nCount=TH0;
nCount=nCount<<8;
nCount|=TL0;
Success=1;
Done=1;
return;
}
void INT_T0() interrupt 1 using 1
{
//運(yùn)行到此處說明測(cè)距失敗
TR0=0;
EX0=0;
Success=0;
Done=1;
return ;
}
void StartInit()
{
TH0=0;
TL0=0; //計(jì)數(shù)器置0
EA=1; //開總中斷
ET0=0; //關(guān)T0中斷
EX0=0; //關(guān)INT0中斷
Success=0; //測(cè)量成功標(biāo)志位
Done=0; //測(cè)量一次標(biāo)志位
}
void StartMeasure()
{
//產(chǎn)生脈沖波
uchar LOOP;
ET0=1;
for (LOOP = 0;LOOP < 4; )
{
P3 = P3 ^ 0x80;
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();//_nop_();_nop_();
LOOP++;
}
VOUT = 1;
TR0 = 1; //啟動(dòng)計(jì)數(shù)器
if(Mode==0) //近距離測(cè)量模式
{
Delay_us(41); //50us延時(shí)測(cè)量,防止回波干擾
}
else //遠(yuǎn)距離測(cè)量模式
{
Delay_us(300); //50us延時(shí)測(cè)量,防止回波干擾
}
EX0=1; //開INT0中斷
while(Done==0); //等待測(cè)量結(jié)束
}
void DisplayResult()
{
float temp=0;
char String[10];
//算出當(dāng)前溫度
temp=TempInt+TempDot/10000.0;
//顯示當(dāng)前溫度
sprintf(String,"%0.2f",temp);
DisplayEnglish(33,0,String);
//算出當(dāng)前聲速
temp=332+0.607*temp;
//顯示當(dāng)前聲速
sprintf(String,"%0.1fm",temp);
DisplayEnglish(33,2,String);
if(Success==1) //測(cè)距成功,顯示“成功”,并顯示距離
{
temp=nCount*temp/2000+0.5; // 算出距離
//顯示遠(yuǎn)、近距離測(cè)量的結(jié)果
if(Mode==0)
{
nResult=(0.9723*temp-14.803)+0.5; //此式由擬合得到
DisplayEnglish(0,4,"N");
}
else
{
nResult=0.9648*temp-5.7716+0.5; //此式由擬合得到
DisplayEnglish(0,4,"F");
}
sprintf(String,"%5u cm",nResult); //將整數(shù)轉(zhuǎn)換為字符串
//拼湊顯示最終結(jié)果“xxx.xcm”
DisplayEnglish(8,4,String);
DisplayEnglish(40,4,".");
String[5]=看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();