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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

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

[復制鏈接]
跳轉到指定樓層
樓主
ID:975500 發表于 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空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

地板
ID:228494 發表于 2021-12-6 16:17 | 只看該作者
大師們研究我學習
回復

使用道具 舉報

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

從本質來講,你需要先學一下C語言的基礎概念。
回復

使用道具 舉報

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

我知道是由while導致的,后面的while循環導致這個程序返回不到第一個while,就是不知道怎么改
回復

使用道具 舉報

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

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 一区视频在线 | 午夜一级做a爰片久久毛片 精品综合 | 日韩在线视频精品 | 色www精品视频在线观看 | 亚洲自拍一区在线观看 | 99久久国产免费 | www.久久影视 | 久久精品二区亚洲w码 | 亚洲成人在线网 | 国产精品久久久久久久久久免费 | 国产视频中文字幕 | 日韩成人性视频 | 久久夜视频 | 91亚洲国产成人精品一区二三 | 狠狠爱视频 | 祝你幸福电影在线观看 | 久久伊人青青草 | 亚洲精品久久久久国产 | 欧美精品一区二区三区在线 | 国产一级片久久久 | 一级少妇女片 | 在线免费av观看 | 日本不卡免费新一二三区 | 91国产视频在线观看 | 欧美日韩国产一区二区 | 高清18麻豆| 午夜视频免费在线观看 | 久久久久久国产精品免费免费 | 午夜久久久久久久久久一区二区 | 国产一区在线免费 | 亚洲高清视频在线 | 国产视频在线观看一区二区三区 | 久久综合一区 | 四虎永久免费地址 | 午夜精品91 | 隔壁老王国产在线精品 | 久久久久国产精品一区 | 男女网站免费观看 | 九七午夜剧场福利写真 | 日本成人中文字幕 | 成人亚洲精品 |