|
通過使用定時器的計數(shù)來實(shí)現(xiàn)HCSR04超聲波模塊測距的功能。
單片機(jī)源程序如下:
- #include "timer.h"
- #include "hc.h"
- #include "sys.h"
- #include "usart.h"
- #include "delay.h"
- #include "stdio.h"
- //PA9為模塊trig引腳接口
- //PA10為Echo引腳接口
- int main(void)
- {
- static u8 time;//單程運(yùn)行時間,單位s
- static u8 length;//路程,單位m
- uart_init(115200); //串口初始化波特率為115200
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//設(shè)置系統(tǒng)中斷優(yōu)先級分組2
- delay_init(168); //初始化延時函數(shù)
- while(1)
- {
- TIM3_Int_Init(100-1,16800-1); //初始化TIM3定時器,計數(shù)周期為0.02s
-
- if(TIM_GetITStatus(TIM3,TIM_IT_Update)==SET) //溢出中斷
- {
- while(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_10)==1);//echo為高電平時,則等待至低電平,才啟動超聲波
- GPIO_SetBits(GPIOA,GPIO_Pin_9); //TRIG置高
- delay_us(20);
- TIM_ClearITPendingBit(TIM3,TIM_IT_Update);
- }
-
- while(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_10) == 0)//等待echo的高電平到來
- TIM_SetCounter(TIM2,0); //清零計數(shù)器
-
- TIM_Cmd(TIM3, ENABLE); //使能定時器3,開始計數(shù)
-
- while(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_10) == 1);//等待echo的高電平結(jié)束
- TIM_Cmd(TIM3, DISABLE); //失能定時器3,截止計數(shù)
-
- TIM_GetCounter(TIM2);//得到計數(shù)器的值
- time=TIM_GetCounter(TIM2)/20000;//單程時間
- length=time*344;//計算出長度
-
- printf("\r\n當(dāng)前距離為:\r\n");
- }
- }
復(fù)制代碼
Keil代碼下載:
代碼.7z
(314.21 KB, 下載次數(shù): 29)
2022-4-1 02:18 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
評分
-
查看全部評分
|