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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1969|回復(fù): 7
打印 上一主題 下一主題
收起左側(cè)

STM32單片機溫度報警器和無線通信的問題,要重新按一次rest按鈕,溫度才會改變

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:975500 發(fā)表于 2021-12-5 21:34 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
這個程序一運行,溫度就不會改變,每次都需要重新按一次rest按鈕,溫度才會改變,怎么去解決這個問題
單片機源程序如下:
#include "string.h"
#include "stm32f10x.h"
#include "system.h"
#include "SysTick.h"
#include "led.h"
#include "usart.h"
#include "tftlcd.h"
#include "beep.h"
#include "key.h"
#include "ds18b20.h"
#include "24l01.h"
#include "spi.h"


u8 waring[] = {10,35};
u8 *p = waring;
u8 data[200];


int main(void)
{
    u8 key,mode;
    u8 t1=0;
    u16 t2=0;
    u8 tmp_buf[1];
    float temperature;
    int tmp;
    NRF24L01_Init();
    LED_Init();
    KEY_Init();
    delay_init();
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);  
    uart_init(115200);
   
    LCD_Init();  
    BEEP_Init();
   
    POINT_COLOR=RED;
    LCD_ShowString(30,80,lcddev.width,lcddev.height,16,"4 ZU ZY PCC LXK YQK");
   
    while(DS18B20_Init())
    {
        LCD_ShowString(30,100,lcddev.width,lcddev.height,16,"DS18B20 Error");
        delay_ms(200);
        LCD_Fill(30,100,100,66,WHITE);
        delay_ms(200);
    }
    LCD_ShowString(30,100,lcddev.width,lcddev.height,16,"DS18B20 OK!");
    while(NRF24L01_Check())
    {
        LCD_ShowString(30,120,lcddev.width,lcddev.height,16,"NRF24L01 Error");
        delay_ms(200);
        LCD_Fill(30,120,239,120+16,WHITE);
         delay_ms(200);
    }
    LCD_ShowString(30,120,lcddev.width,lcddev.height,16,"NRF24L01 OK");
    POINT_COLOR=BLUE;
    LCD_ShowString(30,150,lcddev.width,lcddev.height,16,"xiaxian:");
    LCD_ShowString(30,170,lcddev.width,lcddev.height,16,"shangxian:");

   
    while(1)
    {
        if(t1%10==0)
        {
            temperature=DS18B20_Get_Temp();
            if(temperature<0)
            {
                LCD_ShowChar(30+80,190,'-',16,0);
                temperature = -temperature;
            }
            else LCD_ShowChar(30+80,190,' ',16,0);
            
            sprintf((char *)data,"temperature:%.2f",temperature);
                LCD_ShowString(30,190,lcddev.width,lcddev.height,16,data);
            LCD_ShowNum(30+80+8,150,waring[0],2,16);
            LCD_ShowNum(30+80+8,170,waring[1],2,16);        
        }   
        

        t1++;
        if(t1==20)
        {
            t1=0;
            LED0 = !LED0;
        }
        delay_ms(10);
        
        tmp = (int)temperature;
        if((tmp<=waring[0]) || (tmp >= waring[1]))
        {
            BEEP = !BEEP;
            LED1 = 1;
        }
        else
        {
            BEEP = 0;
            LED1 = 0;
        }
    while(1)
    {   
        key=KEY_Scan(0);
        if(key==KEY0_PRES)
        {
            mode=0;   
            break;
        }else if(key==KEY1_PRES)
        {
            mode=1;
            break;
        }
        t2++;
        if(t2==100)LCD_ShowString(10,210,lcddev.width,lcddev.height,16,"KEY0:RX_Mode  KEY1:TX_Mode");
         if(t2==200)
        {   
            LCD_Fill(10,210,240,210+16,WHITE);
            t2=0;
        }
        delay_ms(5);      
    }   
     LCD_Fill(10,210,240,210+16,WHITE);      
     POINT_COLOR=BLUE;   
    if(mode==0)
    {
        LCD_ShowString(30,210,lcddev.width,lcddev.height,16,"NRF24L01 RX_Mode");   
        LCD_ShowString(30,230,lcddev.width,lcddev.height,16,"Received DATA:");   
        NRF24L01_RX_Mode();         
        while(1)
        {                                               
            if(NRF24L01_RxPacket(tmp_buf)==0)
            {
                if((tmp<=waring[0]) || (tmp >= waring[1]))
        {
            LCD_ShowString(30,250,lcddev.width,lcddev.height,16,"wendubaojin");
        }
        else
        {
            LCD_ShowString(30,250,lcddev.width,lcddev.height,16,"wenduzhengchang");
        }
                                
            }else delay_us(100);      
            t2++;
            if(t2==10000)
            {
                t2=0;
                LED0=!LED0;
            }                     
        };   
    }else//TXģʽ
    {                                
        LCD_ShowString(30,210,lcddev.width,lcddev.height,16,"NRF24L01 TX_Mode");
        NRF24L01_TX_Mode();
        while(1)
        {                                 
            if(NRF24L01_TxPacket(tmp_buf)==TX_OK)
            {
                LCD_ShowString(30,230,lcddev.width,lcddev.height,16,"Sended DATA:");   
                if((tmp<=waring[0]) || (tmp >= waring[1]))
        {
            LCD_ShowString(30,250,lcddev.width,lcddev.height,16,"wendubaojin");
        }
        else
        {
            LCD_ShowString(30,250,lcddev.width,lcddev.height,16,"wenduzhengchang");
        }
                key=mode;
                for(t2=0;t2<32;t2++)
                {
                    key++;
                    if(key>('~'))key=' ';
                    tmp_buf[t2]=key;   
                }
                mode++;
                if(mode>'~')mode=' ';        
                tmp_buf[0]=0;        
            }else
            {                                               
                 LCD_Fill(0,230,lcddev.width,230+16*3,WHITE);            
                LCD_ShowString(30,230,lcddev.width-1,32,16,"Send Failed ");
            };
            LED0=!LED0;
            delay_ms(1500);                    
    };
    }
}
}


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:975500 發(fā)表于 2021-12-5 21:35 | 只看該作者
無線通信模塊沒有while循環(huán)就發(fā)送不了信息
回復(fù)

使用道具 舉報

板凳
ID:313048 發(fā)表于 2021-12-6 14:35 | 只看該作者
當(dāng)你理解了while是做啥的  你就知道你程序為啥有問題了
回復(fù)

使用道具 舉報

地板
ID:228494 發(fā)表于 2021-12-6 16:17 | 只看該作者
大師們研究我學(xué)習(xí)
回復(fù)

使用道具 舉報

5#
ID:624769 發(fā)表于 2021-12-6 16:33 | 只看該作者
從表面來講,問題在于 while(1) 太多了。

從本質(zhì)來講,你需要先學(xué)一下C語言的基礎(chǔ)概念。
回復(fù)

使用道具 舉報

6#
ID:975500 發(fā)表于 2021-12-6 19:59 | 只看該作者
AUG 發(fā)表于 2021-12-6 14:35
當(dāng)你理解了while是做啥的  你就知道你程序為啥有問題了

我知道是由while導(dǎo)致的,后面的while循環(huán)導(dǎo)致這個程序返回不到第一個while,就是不知道怎么改
回復(fù)

使用道具 舉報

7#
ID:624769 發(fā)表于 2021-12-6 20:16 | 只看該作者
2719221825zy 發(fā)表于 2021-12-6 19:59
我知道是由while導(dǎo)致的,后面的while循環(huán)導(dǎo)致這個程序返回不到第一個while,就是不知道怎么改

原則上,整個程序, 有且僅有一個 while(1)  你按這個思路去改就行了。
回復(fù)

使用道具 舉報

8#
ID:420836 發(fā)表于 2021-12-7 09:06 | 只看該作者
不要到處使用 while() 函數(shù),它可能很容易捕獲程序的執(zhí)行。
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 久草免费在线视频 | 久久久网 | 日韩中文欧美 | 久久亚洲精品国产精品紫薇 | 成人精品视频 | 欧美日韩在线观看一区 | 国产精品一区在线观看 | 亚洲国产专区 | 亚州影院 | 色婷婷亚洲一区二区三区 | 一区二区三区四区不卡视频 | 久久不卡日韩美女 | 99久久久无码国产精品 | 午夜爽爽爽男女免费观看影院 | 亚洲婷婷六月天 | 亚洲日本欧美日韩高观看 | 欧美亚洲视频在线观看 | 一区精品在线观看 | 一级免费黄色 | 久久久久国产精品一区二区 | 丁香五月网久久综合 | 欧美激情在线精品一区二区三区 | 超碰97干 | 国产做a爱免费视频 | 日韩av一区二区在线观看 | 久久精品国产一区老色匹 | 国产精品国产精品 | 欧美成人免费在线视频 | 天天操妹子 | 99精品视频在线观看 | 亚洲精品一区二区在线观看 | 亚洲视频中文字幕 | 一区二区三区不卡视频 | 日韩精品在线视频 | 久久久久成人精品免费播放动漫 | 国产精品久久性 | 国产激情在线 | 日韩视频一区二区在线 | 国产精品网页 | 在线视频国产一区 | 一区二区三区四区五区在线视频 |