超声波测距模块
超声波测距模块
oled显示模块
oled显示模块
使用stm32f103rct6单片机,接线说明在工程文件mian.c里面备注了的,使用的定时器计时。
单片机源程序如下:
- /*lin辰 2018.9.26*/
- /*按键控制led亮灭,通过"GPIO_ReadInputDataBit(GPIOx, GPIO_Pin_x)"函数实现读取IO口状态,
- 并使用"!=RESET"进行判断按键是否按下,加入按键抖动判断*/
- /*说明:按键接地,"!=RESET":不等于0,也可写成 "!=0" ,即按键没有按下*/
- // 功能描述 : 0.96寸OLED 接口演示例程(STM32F103系列IIC)
- // 说明:
- // ----------------------------------------------------------------
- // GND 电源地
- // VCC 接5V或3.3v电源
- // SCL 接PB13(SCL)
- // SDA 接PB15(SDA)
- // ----------------------------------------------------------------
-
-
- //测距模块引脚:
- // TRIG---GPIOC-PIN2
- // ECHO---GPIOA-PIN4
- // VCC----5V
-
- //////////////////////////////////////////////////////////////////////////////////
- #include "stm32f10x.h"
- #include "ranging.h"
- #include "systick_delay.h"
- #include "timer.h"
- #include "oled.h"
- #include "bmp.h"
- u16 TIMCounter;
- u16 Dis;
- int main(void)
- {
- TRIG_Config(); //IO输出触发初始化 C2
- ECHO_Config(); //IO输入时间检测初始化 A4
- OLED_Init(); //初始化OLED
- OLED_Clear();
- TIMER_Init();//初始化,未使能
- while(1)
- {
- OLED_DrawBMP(0,0,128,8,BMP1);
-
-
- GPIO_SetBits(GPIOC, GPIO_Pin_2); //给10us高电平
- Delay_us(11);//最少10us触发信号
- GPIO_ResetBits(GPIOC, GPIO_Pin_2);//拉低电平
- while(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_4)==0);//等待接受高电平
- TIMER_ON(); //定时器开
- while(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_4)==1);//等待接受低电平
- TIMCounter = TIM_GetCounter(TIM6);//获取计数器值
- TIMER_OFF(); //定时器关
- Dis = TIMCounter/58;//计算距离
- OLED_ShowNum(62,2,Dis,3,16);//显示ASCII字符的码值,显示距离
- Delay_ms(1000);
- if(Dis>=390){ //超出测量距离警告!
- OLED_ShowString(80,4,"Error!",16);
- Delay_ms(1000);
- }
-
- }
- }
复制代码
所有资料51hei提供下载:
OLED超声波测距系统.7z
(189.09 KB, 下载次数: 158)
|