藍橋杯備忘錄——超聲波
有關藍橋杯的超聲波代碼
實測測距能達到兩米多
以下是代碼
void chao_init()
{
uchar i;
for(i=0;i<8;i++)
{
na1=1; //連續發送8個頻率為40Khz的超聲波信號
Delay12us();
na1=0;
Delay12us();
}
}
//////////////////////////////////////////////////
接下來是計算函數的定時器初始化
定時器初始化可以直接用軟件生成,但需要把TH0和TL0的值清零
void Timer0_Init(void) //10微秒@12.000MHz
{
AUXR |= 0x40; //定時器時鐘12T模式
TMOD &= 0xF0; //設置定時器模式
TL0 = 0x00; //設置定時初始值
TH0 = 0x00; //設置定時初始值
}
//////////////////////////////////////////////////
計算函數
uint get_chao()
{
uint time=0; //計算變量,通過return返回出去
TMOD &= 0xf0; //設置定時器模式
TL0 = 0x00; //設置定時初值
TH0 = 0x00; //設置定時初值
chao_init(); //發送八個40k的方波
TR0=1; //迅速開啟定時器
while(nb1&&TF0==0); //當NB1等于0時或者TF標志位中斷時推出while循環
TR0=0; //關閉定時器
if(TF0==0) //如果未溢出則判定值有效
{
time=TH0<<8|TL0; //將定時器值高八位和低八位賦值給time
return time*0.017; //測試發現無論定時器以1t還是12t的頻率下都是乘與0.017
}
else
{
TF0=0; //如果中斷標志位超出,則清空中斷標志位
time=0;
return time;
}
}

浙公網安備 33010602011771號