unsigned int chaosheng()
{
unsigned int temp1,temp2;//定義兩個(gè)無(wú)符號(hào)整型的變量用于存儲(chǔ)距離值
{
unsigned int temp1,temp2;//定義兩個(gè)無(wú)符號(hào)整型的變量用于存儲(chǔ)距離值
INPUT = 1;
delay(50);//延時(shí)
INPUT = 0;
delay(50);//延時(shí)
INPUT = 0;
while(!OUTPUT);//當(dāng)超聲波的輸出引腳輸出高電平時(shí),打開(kāi)定時(shí)器0,開(kāi)始計(jì)時(shí)
TMR1ON = 1;
while(OUTPUT);//當(dāng)超聲波的輸出引腳輸出低電平時(shí),關(guān)閉定時(shí)器0,停止計(jì)時(shí)
TMR1ON = 0;
TMR1ON = 1;
while(OUTPUT);//當(dāng)超聲波的輸出引腳輸出低電平時(shí),關(guān)閉定時(shí)器0,停止計(jì)時(shí)
TMR1ON = 0;
//計(jì)算超聲波測(cè)出的距離
temp1 = TMR1L;//將TMR1的低8位賦值給temp1變量
temp2 = TMR1H;//將TMR1的高8位賦值給temp2變量
temp2 = (temp2 << 8) + temp1;//temp2左移8位,加上temp1
temp1 = TMR1L;//將TMR1的低8位賦值給temp1變量
temp2 = TMR1H;//將TMR1的高8位賦值給temp2變量
temp2 = (temp2 << 8) + temp1;//temp2左移8位,加上temp1
TMR1H = 0;//TMR1的高8位清零,為下一次測(cè)距做準(zhǔn)備
TMR1L = 0;//TMR1的低8位清零,為下一次測(cè)距做準(zhǔn)備
//距離 = 時(shí)間/2 * 速度
//距離:distance;時(shí)間:temp2/2單位為μs;速度:340m/s
//這里注意下單位,需要進(jìn)行換算讓最終距離的單位為cm/s
distance = temp2 * 1.7/100;//有一定的誤差,可以軟件填補(bǔ)誤差,根據(jù)實(shí)測(cè)值,在右側(cè)的表達(dá)式上加減一誤差數(shù)值。
return distance;//返回超聲波測(cè)得的距離值,這里的distance為全局變量,可以在其他程序中用到,例如液晶顯示部分,可以作為實(shí)參傳遞給其對(duì)應(yīng)程序,用于顯示。
}
最后:很欣賞Google的面試題:用3句話向老太太講清楚什么是數(shù)據(jù)庫(kù)。喬布斯說(shuō):“最好的東西就是關(guān)注簡(jiǎn)單”,因?yàn)楹?jiǎn)單的東西比復(fù)雜的東西更難做到。
TMR1L = 0;//TMR1的低8位清零,為下一次測(cè)距做準(zhǔn)備
//距離 = 時(shí)間/2 * 速度
//距離:distance;時(shí)間:temp2/2單位為μs;速度:340m/s
//這里注意下單位,需要進(jìn)行換算讓最終距離的單位為cm/s
distance = temp2 * 1.7/100;//有一定的誤差,可以軟件填補(bǔ)誤差,根據(jù)實(shí)測(cè)值,在右側(cè)的表達(dá)式上加減一誤差數(shù)值。
return distance;//返回超聲波測(cè)得的距離值,這里的distance為全局變量,可以在其他程序中用到,例如液晶顯示部分,可以作為實(shí)參傳遞給其對(duì)應(yīng)程序,用于顯示。
}
最后:很欣賞Google的面試題:用3句話向老太太講清楚什么是數(shù)據(jù)庫(kù)。喬布斯說(shuō):“最好的東西就是關(guān)注簡(jiǎn)單”,因?yàn)楹?jiǎn)單的東西比復(fù)雜的東西更難做到。