|
利用定時(shí)器3產(chǎn)生pwm波,使能超聲波模塊。利用定時(shí)器4計(jì)時(shí),計(jì)算出時(shí)間。
單片機(jī)源程序如下:
- #include "led.h"
- #include "delay.h"
- #include "key.h"
- #include "sys.h"
- #include "oled.h"
- #include "SR04.h"
- #include "usart.h"
-
- /************************************************
- 時(shí)間:2019.7.25
- 作者:菜雞
- 利用定時(shí)器TIM3的PWM輸出得到觸發(fā)信號(hào)
- TIM4用于計(jì)算回響電平輸出時(shí)間
- ************************************************/
-
- void Count(void);
- uint32_t Distance;
- uint16_t Time;
- uint8_t ShowData[5]={0,0,0,0,0};
- int main(void)
- {
- delay_init(); //延時(shí)函數(shù)初始化
- LED_Init(); //LED端口初始化
- OLED_Init(); //初始化OLED
- Uitr_GPIO_Config();
- OLED_ShowString(0,0,"now:",24);
- OLED_ShowString(50,0,"unknow",24);
- OLED_ShowString(0,24,"distance:",16);
- OLED_ShowString(53,40,"mm",24);
- OLED_Refresh_Gram(); //更新顯示到OLED
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //設(shè)置NVIC中斷分組2:2位搶占優(yōu)先級(jí),2位響應(yīng)優(yōu)先級(jí)
- TIM3_PWM_Init(999,7199); //不分頻。PWM頻率=72000000/900=80Khz
- TIM4_Config();
- while(1)
- {
- TIM_SetCompare2(TIM3,1);
- while(ECHO_IN != 1);
- TIM_Cmd(TIM4,ENABLE); //計(jì)數(shù)器開始計(jì)數(shù)
- while(ECHO_IN == 1);
- TIM_Cmd(TIM4,DISABLE); //計(jì)數(shù)器停止計(jì)數(shù)
- Count();
- }
-
- }
-
- void Count(void)
- {
- Time = TIM4->CNT; //讀計(jì)數(shù)器值
- TIM4->CNT = 0; //清除計(jì)數(shù)器
- if(Time>23530) //判斷是否在4M范圍,超出顯示ERRO
- {
- OLED_ShowString(50,0,"failed",24);
- OLED_Refresh_Gram(); //更新顯示到OLED
- }
- else
- {
- Distance = (uint32_t)(Time*340/2/1000) ; //計(jì)算出來的是MM
- ShowData[0] = (Distance%10000/1000)+'0';
- ShowData[1] = (Distance%1000/100)+'0';
- ShowData[2] = (Distance%100/10)+'0';
- ShowData[3] = (Distance%10/1)+'0';
- OLED_ShowString(50,0,"normal",24);
- OLED_ShowString(0,40,ShowData,24);
- OLED_Refresh_Gram(); //更新顯示到OLED
- }
-
- }
復(fù)制代碼
所有資料51hei提供下載:
HC-SR04超聲波測(cè)距.7z
(197.2 KB, 下載次數(shù): 60)
2019-7-27 03:23 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
|