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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

我這個程序燒到單片機里,LCD顯示一翻頁第一頁的濕度就自己跳為零

[復制鏈接]
跳轉到指定樓層
樓主
ID:1071895 發表于 2023-5-22 22:38 來自觸屏版 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
我這個程序燒到單片機里,LCD顯示一翻頁第一頁的濕度就自己跳為零,然后就報警,第二頁的內容可以正常顯示。
void main()
{        
        BUT=1;
  uart_init();//初始化串口
        lcd1602_init();
        time0_init();
        while(DHT11_Init())        //檢測DHT11是否存在
        {
                lcd1602_show_string(0,0,"Error");               
        }
                DHT11_Read_Data(&temp,&humi);        
//        lcd1602_show_string(0,0,"Temp:   C");
//        lcd1602_show_string(0,1,"Humi:   %RH");
//                lcd1602_show_string(0,0,"Wating......");
//          delay_ms(2500);
        while(1)
        {
                i++;
                DHT11_Read_Data(&temp,&humi);
                valuedata1=200-Adc0832(0);
                delay_ms(100);
                valuedata2=Adc0832(1);
                key=key_scan(0);

                                        if(key==KEY1_PRESS)//檢測按鍵K1是否按下,按下進入設置閾值狀態
                        {
                                LED2=0;
                                while(1)   //溫度上限設置
                                {
                                                key=key_scan(0);
                                         if(key==KEY2_PRESS)
                                         {
                                                temphigh++;
                                         }
                                                if(key==KEY3_PRESS)
                                         {
                                                temphigh--;
                                         }
                                         
                                                if(key==KEY1_PRESS)
                                        {
                                                break;
                                        }
                                        tempgoal_bufhigh[0]=temphigh/10+0x30;
                                        tempgoal_bufhigh[1]=temphigh%10+0x30;
                                        lcd1602_show_string(10,0,tempgoal_bufhigh);
                                }
                                
                                                                while(1)   //溫度下限設置
                                {
                                                key=key_scan(0);
                                         if(key==KEY2_PRESS)
                                         {
                                                templow++;
                                         }
                                                if(key==KEY3_PRESS)
                                         {
                                                templow--;
                                         }
                                         
                                                if(key==KEY1_PRESS)
                                        {
                                                break;
                                        }
                                        tempgoal_buflow[0]=templow/10+0x30;
                                        tempgoal_buflow[1]=templow%10+0x30;
                                        lcd1602_show_string(13,0,tempgoal_buflow);
                                }

                                                                while(1)   //濕度上限設置
                                {
                                                key=key_scan(0);
                                         if(key==KEY2_PRESS)
                                         {
                                                humihigh++;
                                         }
                                                if(key==KEY3_PRESS)
                                         {
                                                humihigh--;
                                         }
                                         
                                                if(key==KEY1_PRESS)
                                        {
                                                break;
                                        }
                                        humigoal_bufhigh[0]=humihigh/10+0x30;
                                        humigoal_bufhigh[1]=humihigh%10+0x30;
                                        lcd1602_show_string(10,1,humigoal_bufhigh);
                                }

                                                                while(1)   //濕度下限設置
                                {
                                                key=key_scan(0);
                                         if(key==KEY2_PRESS)
                                         {
                                                humilow++;
                                         }
                                                if(key==KEY3_PRESS)
                                         {
                                                humilow--;
                                         }
                                         
                                                if(key==KEY1_PRESS)
                                        {
                                                break;
                                        }
                                        humigoal_buflow[0]=humilow/10+0x30;
                                        humigoal_buflow[1]=humilow%10+0x30;
                                        lcd1602_show_string(13,1,humigoal_buflow);
                                }
                                LED2=1;
                        }

                if(keydata==0)
                {
                        lcd1602_show_string(0,0,"Temp:   C");
                        lcd1602_show_string(0,1,"Humi:   %");
                        
                                        temp_buf[0]=temp/10+0x30;        
                                        temp_buf[1]=temp%10+0x30;
                                        temp_buf[2]='\0';
                                        lcd1602_show_string(6,0,temp_buf);

                                        humi_buf[0]=humi/10+0x30;        
                                        humi_buf[1]=humi%10+0x30;
                                        humi_buf[2]='\0';
                                        lcd1602_show_string(6,1,humi_buf);
                        
                        tempgoal_bufhigh[0]=temphigh/10+0x30;
                        tempgoal_bufhigh[1]=temphigh%10+0x30;
                        tempgoal_bufhigh[2]='\0';
                        
                        tempgoal_buflow[0]=templow/10+0x30;
                        tempgoal_buflow[1]=templow%10+0x30;
                        tempgoal_buflow[2]='\0';
                        
                        humigoal_bufhigh[0]=humihigh/10+0x30;
                        humigoal_bufhigh[1]=humihigh%10+0x30;
                        humigoal_bufhigh[2]='\0';
                        
                        
                        humigoal_buflow[0]=humilow/10+0x30;
                        humigoal_buflow[1]=humilow%10+0x30;
                        humigoal_buflow[2]='\0';
                        
                        lcd1602_show_string(10,0,tempgoal_bufhigh);
                        lcd1602_show_string(13,0,tempgoal_buflow);
                        lcd1602_show_string(10,1,humigoal_bufhigh);
                        lcd1602_show_string(13,1,humigoal_buflow);

                                        delay_ms(50);        
                }
                if(keydata==1)
                {
                        DHT11_Read_Data(&temp,&humi);
                        lcd1602_show_string(0,0,"GZ:   LUX");
                        lcd1602_show_string(0,1,"YW:   MMP");
                                        CO_buf[0]=valuedata1/100+0x30;
                                        CO_buf[1]=valuedata1%100/10+0x30;
                                        CO_buf[2]=valuedata1%10+0x30;
                                        CO_buf[3]='\0';        
                                        lcd1602_show_string(3,0,CO_buf);

                                        CH_buf[0]=valuedata2/100+0x30;
                                        CH_buf[1]=valuedata2%100/10+0x30;
                                        CH_buf[2]=valuedata2%10+0x30;
                                        CH_buf[3]='\0';
                                        lcd1602_show_string(3,1,CH_buf);
                                        delay_ms(50);        
                }
                if(temp>=temphigh||temp<=templow||humi>=humilow||humi<humihigh||valuedata2>=10)
                {
                 BEEP=0;
                 LED1=0;
                }
                else
                {
                 BEEP=1;
                 LED1=1;
                }
                                        if(temp>=temphigh)
                        {
                         IN1=0;
                        }
                        else
                        {
                         IN1=1;
                        }
                        if(temp<=templow)
                        {
                         IN2=0;
                        }
                        else
                        {
                         IN2=1;
                        }
                        if(humi<=humilow)
                        {
                         IN3=0;
                        }
                        else
                        {
                         IN3=1;
                        }
                        if(humi>=humihigh)
                        {
                         IN4=0;
                        }
                        else
                        {
                         IN4=1;
                        }
                        if(valuedata2>=10)
                        {
                         IN5=0;
                        }
                        else
                        {
                         IN5=1;
                        }
                delay_ms(1);               
        }
}
藍牙程序:
void time0() interrupt 1 //定時器0中斷函數
{
        TH0=0XDC;        //給定時器賦初值,定時10ms
        TL0=0X00;
        gmsec++;//10ms加1次
                        if(BUT==0)
                {
                        delay_ms(500);
                        lcd1602_clear();
                 keydata=!keydata;
                }
        if(gmsec%500==0)//定時5秒
        {
                                SendString("Temp:");
                                SendString(temp_buf);
                                SendString("C");
                                SendString("\r\n");
                                delay_ms(20);
                                SendString("Humi:");
                                SendString(humi_buf);
                                SendString("%");
                                SendString("\r\n");
                                delay_ms(20);
                                SendString("GZ:");
                                SendString("144");
                                SendString("LUX");
                                SendString("\r\n");
                                delay_ms(20);
                                SendString("YW:");
                                SendString(CH_buf);
                                SendString("MMP");
                                SendString("\r\n");
        }                                       
}
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:1071895 發表于 2023-5-23 00:15 來自觸屏版 | 只看該作者
求助,謝謝各位!
回復

使用道具 舉報

板凳
ID:1079239 發表于 2023-5-23 08:30 | 只看該作者
根據你提供的程序,可能是由于在主函數中的循環中,每次都會重新讀取DHT11的溫濕度數據,而在發送藍牙數據的定時器中斷中,只發送了之前讀取的溫濕度數據,因此第一頁顯示的溫濕度數據和第二頁顯示的溫濕度數據不一致,導致第一頁的濕度在顯示完一次之后就變成了零。  解決方法是在發送藍牙數據的定時器中斷中,每次發送之前重新讀取溫濕度數據,例如可以將DHT11讀取數據的代碼移到定時器中斷函數中,在定時器中斷函數中更新溫濕度數據并發送藍牙數據。  另外,建議在發送藍牙數據時先將數據存儲到一個緩沖區中,然后再統一發送,以避免發送過程中出現數據混亂的情況。
回復

使用道具 舉報

地板
ID:526543 發表于 2023-5-23 11:05 | 只看該作者
代碼邏輯錯誤:在你的代碼中,第一頁顯示的是溫度和濕度數據,第二頁顯示的是GZ和YW數據。如果切換到第二頁后,濕度顯示為零,有可能是在切換頁面的過程中,溫濕度傳感器讀取出了錯誤的值,導致顯示錯誤。你可以檢查DHT11傳感器的連接和代碼邏輯,確保正確讀取溫濕度值。

數據傳輸問題:如果通過藍牙傳輸數據給其他設備,可能存在數據傳輸錯誤導致顯示異常。你可以檢查藍牙模塊的連接和數據傳輸代碼,確保數據正確傳輸。
回復

使用道具 舉報

5#
ID:744809 發表于 2023-5-23 13:45 | 只看該作者
1、定時器中斷中不要放那么多代碼,特別是不要調用串口發送函數。
2、代碼中不要用那么多while循環;可以用狀態機替代
3、代碼中最好不要用那么多delay延時,同樣可用狀態標志位替代
4、讀取溫濕度的函數不用寫那么多個地方,定時去讀一遍就好了,讀完就放全局變量/main中的局部變量,直接用就好了。
5、發送函數那樣用有點繁瑣,可以重定向printf函數,用printf("temp:%d℃ humi:%d%%\r\n", temp, humi);
暫時就寫這么點建議吧
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 精品美女视频在线观看免费软件 | 91av免费看 | 一区二区三区在线观看免费视频 | 久久久婷 | 欧美日韩一区在线播放 | 91在线免费观看网站 | 高清欧美性猛交xxxx黑人猛交 | 视频三区 | 精品99在线 | 天天操天天干天天爽 | 国产九一精品 | 日韩视频免费在线 | 最新国产福利在线 | 久久精品高清视频 | 亚洲精品中文字幕 | 九九久久精品 | 一区二区成人 | 亚洲免费在线 | 久久se精品一区精品二区 | 欧美一区二区大片 | 欧美一区二区激情三区 | 福利网站导航 | 中文在线视频 | 久久久久无码国产精品一区 | 日本不卡免费新一二三区 | 8x国产精品视频一区二区 | 成人在线视频免费播放 | 久草青青草 | 久久亚| 午夜在线电影网 | 国产一区二区电影网 | 久久久久久亚洲精品 | 无吗视频 | 91在线影院 | 颜色网站在线观看 | 欧美1区 | 亚洲成人精品国产 | a级毛片毛片免费观看久潮喷 | 亚洲 日本 欧美 中文幕 | 在线精品一区二区 | 久久精品a |