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

標(biāo)題: STM32超聲波OLED顯示不出來距離值 溫度顯示正常求教 [打印本頁]

作者: bbxyliyang    時間: 2023-7-29 16:39
標(biāo)題: STM32超聲波OLED顯示不出來距離值 溫度顯示正常求教
#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);
        
        
}
//外部中斷服務(wù)函數(shù)
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出現(xiàn)低電平
                printf("3");                 
                TIM_Cmd(TIM3,DISABLE);//關(guān)閉定時器
               
        EXTI_ClearITPendingBit(EXTI_Line12);//清除中斷標(biāo)志
  }
}
//超聲波工作條件
//Trig產(chǎn)生一個不低于10us的高電平信號

u8 Wave_SRD_Strat(u8 time)
{
        if(time>10)
        {
        GPIO_SetBits(GPIOA,Trig);//設(shè)置Trig為高電平輸出
        delay_us(time);
        GPIO_ResetBits(GPIOA,Trig);
        return 0;//產(chǎn)生高于10us高電平,返回0
        }
        else return 1;//為產(chǎn)生高于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);//設(shè)置中斷優(yōu)先級分組為組2:2位搶占優(yōu)先級,2位響應(yīng)優(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,"-");                        //顯示負(fù)號
                                temperature=-temperature;                        //轉(zhuǎn)為正數(shù)
                        }else{
                                OLED_ShowCH(50,6," ");                        //去掉負(fù)號
                        }
                        OLED_ShowNum(60,6,temperature/10,2,16);                        //顯示整數(shù)部分            
                           OLED_ShowNum(60+28,6,temperature%10,1,16);        //顯示小數(shù)部分                    
                }                                   
                 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,"℃");                //顯示:℃

                //產(chǎn)生高于10Us的高電平與OLED上顯示超聲波所測距離               
                Wave_SRD_Strat(t);
                Distance = TIM_GetCounter(TIM3)*340/200.0;//計(jì)算距離: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);                //測試顯示數(shù)字

                OLED_DrawBMP(0,0,128,8,(u8 *)BMP1);                //測試顯示圖片
*/
        }
}

作者: yzwzfyz    時間: 2023-7-31 16:48
先調(diào)試好硬件。
作者: bbxyliyang    時間: 2023-8-1 10:42
yzwzfyz 發(fā)表于 2023-7-31 16:48
先調(diào)試好硬件。

您好,硬件是好的,硬件沒問題的
作者: lkc8210    時間: 2023-8-1 14:45

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

作者: bbxyliyang    時間: 2023-8-2 07:53
lkc8210 發(fā)表于 2023-8-1 14:45
串口有沒有返回"2"和"3"?

沒有,我打印就是為了測試有沒有進(jìn)入,結(jié)果沒進(jìn)入




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 国产精品我不卡 | 亚洲视频一区二区三区 | 国产欧美一区二区精品忘忧草 | 国产一区二区日韩 | 日韩亚洲视频 | 久热国产在线 | 国产三级精品视频 | 免费一级片 | 成人av播放 | 日韩精品 电影一区 亚洲 | 免费性视频 | 国产99精品| 天天色天天射天天干 | 91精品国产色综合久久 | 亚洲成人av在线播放 | 久久免费精品 | 国产精品一区二区不卡 | 丁香综合 | 久久久国产精品 | 国产成人福利 | 欧美日韩国产一区 | av网站免费观看 | 国产一区欧美 | 亚洲精品乱码久久久久久按摩观 | 欧美一级二级三级视频 | 久久久福利| 看片网站在线 | 亚洲成人精品一区 | 日韩国产一区二区三区 | 亚洲精品欧美一区二区三区 | 国产一区二区免费 | 国产99视频精品免视看9 | 欧美日韩在线成人 | 久久lu| 91亚洲国产| 天堂一区二区三区四区 | 欧美中文字幕 | 精品国产免费一区二区三区五区 | 国产成人免费视频网站视频社区 | 精品视频一区二区三区四区 | 日韩电影中文字幕 |