STM32F1控制US-100串口超声波测距
单片机源程序如下:
- #include "usart-ultrasonic.h"
- #include "usart.h"
- #include "SysTick.h"
- //超声波测距,获取一次测量值
- u16 Ultrasonic_ranging()
- {
- u16 range=0;
- usart_r=256;
- USART_SendData(USART1,'U');
- while(usart_r==256);
- range+=usart_r*256; usart_r=256;
- while(usart_r==256);
- range+=usart_r; usart_r=256;
- return range;
- }
- //超声波测距,多次测量滤波
- //参数是测量次数
- u16 Ultrasonic_ranging_s(u8 time)
- {
- u16 range=0,refer_range=0,sum_range=0,return_range=0;
- u8 num=0;
- range=Ultrasonic_ranging(); //先测一次得到参考值
- if((range>19)&&(range<4000))//当参考值大于19小于4000时正确
- {
- refer_range=range;
- for(;time>0;time--) //多测几次,矫正参考值
- {
- range=Ultrasonic_ranging();
- if((range>19)&&(range<4000)&&((refer_range-range<10)||(range-refer_range<10)))//测量值在20到4000之间,且偏离参考值不超过10
- {
- sum_range+=range;
- num++;
- refer_range=(refer_range+range)/2;//用有效测量值矫正参考值
- }
- delay_ms(10);//消除余波的干扰
- }
- return_range=(sum_range+refer_range)/(num+1);//把参考值和多次测量得到的有效值取算数平均数,作为返回值;
- return return_range;
- }
- else{ return 0; }//如果超出4000mm返回0
- }
复制代码- #include "system.h"
- #include "SysTick.h"
- #include "usart.h"
- #include "led.h"
- #include "tftlcd.h"
- #include "usart-ultrasonic.h"
- /*
- // 程序功能:使用US-100串口超声波模块测距,并滤波使测量值稳定
- // 芯片型号:STM32F103ZET6
- // 实验平台:普中PZ6806L开发板
- // 作者:XXK
- // 2018年10月20日
- */
- int main()
- {
- SysTick_Init(72);
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
- LED_Init();
- TFTLCD_Init();
- USART1_Init(9600);//超声波测距模块US-100使用的波特率是9600,不可更改
-
- while(1)
- {
- led1=!led1;
- LCD_ShowNum(50,50,(u32)Ultrasonic_ranging_s(3),4,24);//屏幕显示测量值,单位毫米
- }
- }
复制代码
所有资料51hei提供下载:
US-100串口超声波测距.rar
(297.75 KB, 下载次数: 218)
|