|
|
僅供大家參考
超聲波程序.zip
(61.16 KB, 下載次數(shù): 15)
2017-12-23 16:33 上傳
點擊文件名下載附件
lcd1602顯示 下載積分: 黑幣 -5
#include<reg51.h>
#include<intrins.h>
#include"lcd.h"
sbit Trig = P2^1;
sbit Echo = P2^0;
unsigned char PuZh[]="Distance: ";
unsigned char code ASCII[15] = {'0','1','2','3','4','5','6','7','8','9','.','-','M'};
static unsigned char DisNum = 0; //顯示用指針
unsigned int time=0;
unsigned long S=0;
bit flag =0; //標(biāo)志位flag
unsigned char disbuff[4] ={ 0,0,0,0,};
void Conut(void)
{
time=TH0*256+TL0; //*256是16位計數(shù)器的高8位和低八位之分,恢復(fù)成16位數(shù)的時候要*256
// 將字節(jié)轉(zhuǎn)化成十進制數(shù),比如定時器中裝的是0xabcd,轉(zhuǎn)化成十進制就是d+c*16+b*16*16+a*16*16*16=43981。
// 發(fā)現(xiàn)ab*256=(b+a*16)*256=43776,cd=d+c*16=205,43776+205=43981
TH0=0;
TL0=0;
S=(time*1.7)/100; //算出來是CM 其中*0.0172是根據(jù)超聲的聲速、單片機的頻率,得出來的一個系數(shù)。
if((S>=300)) //超出測量范圍顯示“-”||flag==1
{
flag=0;
// P1 = 0XFD;
DisplayOneChar(0, 1, ASCII[11]);
DisplayOneChar(1, 1, ASCII[10]); //顯示個點
DisplayOneChar(2, 1, ASCII[11]);
DisplayOneChar(3, 1, ASCII[11]);
DisplayOneChar(4, 1, ASCII[12]); //顯示M
}
else
{
// P1 = 0X00;
disbuff[0]=S%1000/100;
disbuff[1]=S%1000%100/10;
disbuff[2]=S%1000%10 %10;
DisplayOneChar(0, 1, ASCII[disbuff[0]]);
DisplayOneChar(1, 1, ASCII[10]); //顯示點
DisplayOneChar(2, 1, ASCII[disbuff[1]]);
DisplayOneChar(3, 1, ASCII[disbuff[2]]);
DisplayOneChar(4, 1, ASCII[12]); //顯示M
}
}
void zd0() interrupt 1 //T0中斷用來計數(shù)器溢出,超過測距范圍
{
flag=1; //中斷溢出標(biāo)志
}
void StartModule() //啟動模塊
{
Trig=1; //啟動一次模塊
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
Trig=0;
}
void delayms(unsigned int ms)
{
unsigned char i=100,j;
for(;ms;ms--)
{
while(--i)
{
j=10;
while(--j);
}
}
}
void main(void)
{
TMOD=0x01; //設(shè)定時器0為工作方式1,GATE=1;
TH0=0;
TL0=0;
ET0=1; //開定時器0中斷
EA=1; //開啟總中斷
InitLcd1602();
LcdShowStr(0,0,PuZh);
while(1)
{
StartModule();
while(!Echo); //當(dāng)RX為零時等待
TR0=1; //開啟計數(shù)
while(Echo); //當(dāng)RX為1計數(shù)并等待
TR0=0; //關(guān)閉計數(shù)
Conut(); //計算
delayms(80);
}
}
|
|