久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1939|回復: 4
打印 上一主題 下一主題
收起左側

STM32超聲波OLED顯示不出來距離值 溫度顯示正常求教

[復制鏈接]
跳轉到指定樓層
樓主
ID:190577 發(fā)表于 2023-7-29 16:39 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
#include "wave.h"
#include "delay.h"
#include "sys.h"
#include "usart.h"

#define Trig GPIO_Pin_15//超聲發(fā)射引腳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);
        //中斷優(yōu)先級管理
        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引腳高電平持續(xù)時間
        short temperature;                                             
        u8 Distance;
        
        uart_init(115200);//串口初始化
        Wave_SRD_Init();//初始化超聲波
        Timer_SRD_Init(9998,7199);//定時器初始化        

        extern const u8 BMP1[];
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//設置中斷優(yōu)先級分組為組2:2位搶占優(yōu)先級,2位響應優(yōu)先級
        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);                //測試顯示圖片
*/
        }
}
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發(fā)
ID:123289 發(fā)表于 2023-7-31 16:48 | 只看該作者
先調試好硬件。
回復

使用道具 舉報

板凳
ID:190577 發(fā)表于 2023-8-1 10:42 | 只看該作者

您好,硬件是好的,硬件沒問題的
回復

使用道具 舉報

地板
ID:161164 發(fā)表于 2023-8-1 14:45 | 只看該作者

串口有沒有返回"2"和"3"?
回復

使用道具 舉報

5#
ID:190577 發(fā)表于 2023-8-2 07:53 | 只看該作者
lkc8210 發(fā)表于 2023-8-1 14:45
串口有沒有返回"2"和"3"?

沒有,我打印就是為了測試有沒有進入,結果沒進入
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美人人 | 国产成人99久久亚洲综合精品 | 欧美另类日韩 | 国产精品99久久久久久人 | 国产91久久久久久 | 国产福利91精品一区二区三区 | 国产高清视频一区 | 久久99精品久久 | 欧美成人a| 黄色精品 | 日本在线一二 | 欧美性久久 | 国产日韩av一区二区 | 综合久| av免费电影在线 | 国产精品美女一区二区 | 久久精品国产久精国产 | 99在线播放 | 久久久久九九九女人毛片 | 91成人免费电影 | 久久国产精品99久久久大便 | 国产欧美日韩精品一区二区三区 | www.久久艹 | 欧美性久久 | 在线观看国产91 | 国产精品视频免费看 | www.亚洲 | 日韩av成人 | 亚洲九九色 | 91视频中文 | av色站| 久久国产精品亚洲 | 精品视频在线观看 | 欧美一级视频在线观看 | 国产精品国产a级 | 日本三级网站在线观看 | 高清av电影 | 日韩成人免费视频 | 久久久日韩精品一区二区三区 | 久草视频在线播放 | 玖玖色在线视频 |