|
/*********************************************************/
/*主要控制程序,length=(tim+time*1000)*100/58.0;乘100是為了將M轉(zhuǎn)為CM*/
float Senor_Using(void)
float length=0,sum=0;
u16 tim;
unsigned int i=0;
/*測(cè)5次數(shù)據(jù)計(jì)算一次平均值*/
while(i!=5)
{
printf("111");
GPIO_SetBits(GPIOC,GPIO_Pin_8);
SysTick_Delay_Us(20); //高電平信號(hào)超過(guò)10us
GPIO_ResetBits(GPIOC,GPIO_Pin_8);
/*等待回響信號(hào)*/
while(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_9)==0);
TIM_Cmd(GENERAL_TIM,ENABLE);
//回響信號(hào)到來(lái),開啟定時(shí)器計(jì)數(shù)
while(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_9)==1);
//回響信號(hào)消失
TIM_Cmd(GENERAL_TIM,DISABLE);
printf("222");
//關(guān)閉定時(shí)器
tim=TIM_GetCounter(GENERAL_TIM);
//獲取計(jì)TIM3數(shù)寄存器中的計(jì)數(shù)值,一邊計(jì)算回響信號(hào)時(shí)間
length=(tim+time*1000)*100/58.0;
//通過(guò)回響信號(hào)計(jì)算距離
sum=length+sum;
GENERAL_TIM->CNT=0; //將TIM3計(jì)數(shù)寄存器的計(jì)數(shù)值清零
time=0; //中斷溢出次數(shù)清零
SysTick_Delay_Ms(60);
i+=1; //每收到一次回響信號(hào)+1,收到5次就計(jì)算均值
}
length=sum/5;
return length;
//距離作為函數(shù)返回值
}
/****************************************************************************/
另外對(duì)一些不了解的朋友說(shuō)一下請(qǐng)千萬(wàn)注意定時(shí)器的值。
|
-
-
超聲波顯示.7z
2019-8-4 15:39 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
232.63 KB, 下載次數(shù): 129, 下載積分: 黑幣 -5
源碼
評(píng)分
-
查看全部評(píng)分
|