OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 1813|回复: 4

STM32 超声波OLED显示不出来距离值 温度显示正常求教

[复制链接]

10

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
131
金钱
131
注册时间
2016-3-16
在线时间
33 小时
发表于 2023-7-29 16:43:43 | 显示全部楼层 |阅读模式
#include "wave.h"
#include "delay.h"
#include "sys.h"
#include "usart.h"

#define Trig GPIO_Pin_15//超声发射引脚pA15
#define Echo GPIO_Pin_12//超声波接受引脚pA12

void Wave_SRD_Init(void)
{
        GPIO_InitTypeDef GPIO_InitStruct;
        EXTI_InitTypeDef EXTI_InitStruct;
        NVIC_InitTypeDef NVIC_InitStruct;
        //初始化超声波
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO|RCC_APB2Periph_GPIOA,ENABLE);
      
        GPIO_InitStruct.GPIO_Pin=Trig;
        GPIO_InitStruct.GPIO_Mode=GPIO_Mode_Out_PP;
        GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;
        GPIO_Init(GPIOA,&GPIO_InitStruct);
      
        GPIO_InitStruct.GPIO_Pin=Echo;
        GPIO_InitStruct.GPIO_Mode=GPIO_Mode_IPD;
        GPIO_Init(GPIOA,&GPIO_InitStruct);
        //外部中断与引脚的配置,中断与端口12的映射
        GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource12);
        //外部中断配置
        EXTI_InitStruct.EXTI_Line=EXTI_Line12;
        EXTI_InitStruct.EXTI_LineCmd= ENABLE;
        EXTI_InitStruct.EXTI_Mode=EXTI_Mode_Interrupt;
        EXTI_InitStruct.EXTI_Trigger=EXTI_Trigger_Rising;
        EXTI_InitStruct.EXTI_LineCmd = ENABLE;
        EXTI_Init(&EXTI_InitStruct);
        //中断优先级管理
        NVIC_InitStruct.NVIC_IRQChannel=EXTI15_10_IRQn;
        NVIC_InitStruct.NVIC_IRQChannelCmd=ENABLE;
        NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority=0;
        NVIC_InitStruct.NVIC_IRQChannelSubPriority=0;
        NVIC_Init(&NVIC_InitStruct);
      
      
}
//外部中断服务函数
void EXTI15_10_IRQHandler(void)
{
        printf("2");
        delay_us(10);
        if(EXTI_GetITStatus(EXTI_Line12)!=RESET)//Echo检测到高电平
        {
                TIM_SetCounter(TIM3,0);//开启定时器
                TIM_Cmd(TIM3,ENABLE);//使能定时器
                while(GPIO_ReadInputDataBit(GPIOA,Echo));//等待Echo出现低电平
                printf("3");                 
                TIM_Cmd(TIM3,DISABLE);//关闭定时器
               
        EXTI_ClearITPendingBit(EXTI_Line12);//清除中断标志
  }
}
//超声波工作条件
//Trig产生一个不低于10us的高电平信号

u8 Wave_SRD_Strat(u8 time)
{
        if(time>10)
        {
        GPIO_SetBits(GPIOA,Trig);//设置Trig为高电平输出
        delay_us(time);
        GPIO_ResetBits(GPIOA,Trig);
        return 0;//产生高于10us高电平,返回0
        }
        else return 1;//为产生高于10us高电平返回1
}

主程序
#include "sys.h"  
#include "delay.h"
#include "oled_iic.h"
#include "stdio.h"
#include "wave.h"
#include "timer.h"
#include "usart.h"         
#include "ds18b20.h"

int main(void)
{               
        u8 a=0;      
        u8 t=20;//trig引脚高电平持续时间
        short temperature;                                             
        u8 Distance;
      
        uart_init(115200);//串口初始化
        Wave_SRD_Init();//初始化超声波
        Timer_SRD_Init(9998,7199);//定时器初始化      

        extern const u8 BMP1[];
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组为组2:2位抢占优先级,2位响应优先级
        delay_init();
        OLED_Init();                         //OLED屏幕初始化               
        DS18B20_Init();                //DS18B20初始化      
      
        while(Wave_SRD_Strat(t))
        {
        }
      
        OLED_Clear();      
                printf("1");
        while(1)
        {               
                //18B20读取温度               
                if(a%10==0)                        //每100ms读取一次
                {                                                                          
                        temperature=DS18B20_Get_Temp();
                        if(temperature<0)
                        {
                                OLED_ShowCH(50,6,"-");                        //显示负号
                                temperature=-temperature;                        //转为正数
                        }else{
                                OLED_ShowCH(50,6," ");                        //去掉负号
                        }
                        OLED_ShowNum(60,6,temperature/10,2,16);                        //显示整数部分            
                           OLED_ShowNum(60+28,6,temperature%10,1,16);        //显示小数部分                  
                }                                 
                 delay_ms(10);
                a++;
                if(a==20)
                {
                        a=0;
                }

                OLED_ShowCH(15,0,"屏幕显示测试");                //测试显示中文

                OLED_ShowCH(0,3,"距离:");                //显示中文:距离
//                OLED_ShowCH(0,3,"Distance: ");        //显示英文
                OLED_ShowCH(100,3,"cm");                //测试显示中文

                OLED_ShowCH(0,6,"温度:");                //显示中文:温度
//                OLED_ShowCH(0,6,"Temp: ");                //显示英文
                OLED_ShowCH(78,6,".");                        //显示.                       
                OLED_ShowCH(101,6,"℃");                //显示:℃

                //产生高于10Us的高电平与OLED上显示超声波所测距离               
                Wave_SRD_Strat(t);
                Distance = TIM_GetCounter(TIM3)*340/200.0;//计算距离:cnt * 1/10000 * 340 / 2(单位:m
                if(Distance>0)
                {
                        OLED_ShowNum(50,3,Distance,6,16);                //显示超声波测量距离
                        delay_ms(10);
                }

/*               
                OLED_ShowCH(20,1,"屏幕显示测试");                //测试显示中文

                OLED_ShowNum(20,3,314159265,9,0);                //测试显示数字

                OLED_DrawBMP(0,0,128,8,(u8 *)BMP1);                //测试显示图片
*/
        }
}
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

10

主题

3281

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8206
金钱
8206
注册时间
2020-5-11
在线时间
3700 小时
发表于 2023-7-29 16:58:56 | 显示全部楼层
“显示不出来”是指显示为空白吗?
专治疑难杂症
回复 支持 反对

使用道具 举报

10

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
131
金钱
131
注册时间
2016-3-16
在线时间
33 小时
 楼主| 发表于 2023-7-29 19:45:06 | 显示全部楼层
LcwSwust 发表于 2023-7-29 16:58
“显示不出来”是指显示为空白吗?

您好,就是显示值不对
回复 支持 反对

使用道具 举报

1

主题

3

帖子

0

精华

新手入门

积分
6
金钱
6
注册时间
2023-7-30
在线时间
0 小时
发表于 2023-7-30 03:01:13 来自手机 | 显示全部楼层
一直报错  feil not found咋解决啊
回复 支持 反对

使用道具 举报

0

主题

9

帖子

0

精华

新手上路

积分
37
金钱
37
注册时间
2023-4-17
在线时间
7 小时
发表于 2023-7-30 09:41:26 | 显示全部楼层
顶一下
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-24 04:27

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表