通過使用定時器的計數來實現HCSR04超聲波模塊測距的功能。
單片機源程序如下:
- #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;//單程運行時間,單位s
- static u8 length;//路程,單位m
- uart_init(115200); //串口初始化波特率為115200
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//設置系統中斷優先級分組2
- delay_init(168); //初始化延時函數
- while(1)
- {
- TIM3_Int_Init(100-1,16800-1); //初始化TIM3定時器,計數周期為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); //清零計數器
-
- TIM_Cmd(TIM3, ENABLE); //使能定時器3,開始計數
-
- while(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_10) == 1);//等待echo的高電平結束
- TIM_Cmd(TIM3, DISABLE); //失能定時器3,截止計數
-
- TIM_GetCounter(TIM2);//得到計數器的值
- time=TIM_GetCounter(TIM2)/20000;//單程時間
- length=time*344;//計算出長度
-
- printf("\r\n當前距離為:\r\n");
- }
- }
復制代碼
Keil代碼下載:
代碼.7z
(314.21 KB, 下載次數: 29)
2022-4-1 02:18 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|