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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 7288|回復(fù): 4
收起左側(cè)

pcf8591+oled+ DHT11溫濕度智能車(chē)內(nèi)管理系統(tǒng)源程序與Proteus仿真

  [復(fù)制鏈接]
ID:623452 發(fā)表于 2020-10-7 16:19 | 顯示全部樓層 |閱讀模式
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
51hei.png

單片機(jī)源程序如下:
  1. #include <reg52.h>          //頭文件
  2. //#include  "LCD1602.h"
  3. //#include  "AT24C02.h"
  4. #include  "DHT11.h"
  5. #include  "oled.h"
  6. #include <intrins.h>
  7. //#include "adc0809.h"
  8. #include "IIC.h"
  9. #include "IICyy.h"
  10. #define uint unsigned int
  11. #define uchar unsigned char
  12. sbit led1 =P1^7;        
  13. sbit led2 =P1^6;        

  14. sbit jia_wen    = P2^2;  
  15. sbit zhilen     = P3^0;
  16. sbit jin_hua    = P3^1;
  17. sbit jia_shi    = P3^5;

  18. /*****************燈、蜂鳴器、按鍵引腳定義*******************/
  19. //sbit led     = P3^7;  //超限指示燈
  20. //sbit led1    = P3^2;  //正常指示燈
  21. sbit buzz    = P2^3;  //蜂鳴器
  22. //sbit key_set = P1^5;  //設(shè)置鍵
  23. //sbit key_jia = P1^6;  //加鍵
  24. //sbit key_jian= P1^7;  //減鍵

  25. /************************變量定義***********************/
  26. uchar temp_old,humi_old;//存儲(chǔ)上一次的溫度、濕度
  27. uchar temp_up,temp_down;//存儲(chǔ)溫度上、下限值
  28. uchar humi_up,humi_down;//存儲(chǔ)濕度上、下限值
  29. uchar set_f;                               //設(shè)置選擇標(biāo)記,=0非設(shè)置,=1設(shè)置濕度上限,=2設(shè)置濕度下限
  30.                                                       //              =3設(shè)置溫度上限,=4設(shè)置溫度下限。
  31. unsigned char  AD_DATA[1]; //保存IN0通道轉(zhuǎn)換后的數(shù)據(jù)
  32. void jiexianw();
  33. void Delay_1ms(uint i);

  34. /********************************************************
  35. 函數(shù)名稱(chēng):void display(void)
  36. 函數(shù)作用:oled顯示固定作用
  37. 參數(shù)說(shuō)明:
  38. ********************************************************/
  39. /*
  40. void fixed_display(void)
  41. {
  42.         OLED_ShowString(0,0,"Temp:"); //固定位置顯示“Temp:”
  43.         OLED_ShowString(56,0,".");    //固定位置顯示“.”
  44.         OLED_ShowString(80,0,"C");    //固定位置顯示“C”
  45.         OLED_ShowString(0,1,"Humi:"); //固定位置顯示“Humi:”
  46.         OLED_ShowString(56,1,".");    //固定位置顯示“.”
  47.         OLED_ShowString(80,1,"%");    //固定位置顯示“%”

  48.         if(set_f==0)                  //設(shè)置鍵沒(méi)按下,非設(shè)置模式
  49.         {
  50.         OLED_ShowString(80,4," ");    //不顯示
  51.         }        
  52.         if(set_f==1)                  //設(shè)置鍵按了1次
  53.         {
  54.         OLED_ShowString(80,4," HU");  //顯示“HU”
  55.         }
  56.         if(set_f==2)                  //設(shè)置鍵按了2次
  57.         {
  58.         OLED_ShowString(80,4," HD");  //顯示“HD”
  59.         }
  60.                 if(set_f==3)                //設(shè)置鍵按了3次
  61.         {
  62.         OLED_ShowString(80,4," TU");  //顯示“TU”
  63.         }
  64.                 if(set_f==4)                //設(shè)置鍵按了4次
  65.         {
  66.         OLED_ShowString(80,4," TD");  //顯示“TD”
  67.         }        
  68. }
  69. */
  70. /********************************************************
  71. 函數(shù)名稱(chēng):void display1(void)
  72. 函數(shù)作用:顯示當(dāng)前實(shí)際溫濕度
  73. 參數(shù)說(shuō)明:
  74. /********************************************************/
  75. /*
  76. void display1(void)
  77. {
  78.                
  79.         if(DHT11_Check()==1)                //判斷校驗(yàn)和是否正確
  80.         {
  81.                 if(humi_old<Humi_H)                                        //判斷濕度是否上升
  82.                 {
  83.                         
  84.                         OLED_ShowString(88,1,"up");     //上升則顯示‘up’
  85.                         
  86.                         Delay_ms(50);                                            //延時(shí)
  87.                         humi_old=Humi_H;                                  //記錄當(dāng)前濕度
  88.                 }
  89.                 else
  90.                         if(humi_old>Humi_H)                                //判斷濕度是否下降
  91.                         {
  92.                                 OLED_ShowString(88,1,"down"); //下降則顯示‘down’
  93.                                 Delay_ms(50);                                    //延時(shí)
  94.                                 humi_old=Humi_H;                          //記錄當(dāng)前濕度
  95.                         }

  96.                 if(temp_old<Temp_H)                                        //判斷溫度是否上升
  97.                 {
  98.                                 OLED_ShowString(88,0,"up");   //上升則顯示‘up’
  99.                           Delay_ms(50);                                            //延時(shí)
  100.                           temp_old=Temp_H;                                  //記錄當(dāng)前溫度
  101.                 }
  102.                 else
  103.                         if(temp_old>Temp_H)                                //判斷溫度是否下降
  104.                         {
  105.                                 OLED_ShowString(88,0,"down"); //下降顯示‘down’
  106.                                 Delay_ms(50);                                    //延時(shí)
  107.                                 temp_old=Temp_H;                          //記錄當(dāng)前溫度
  108.                         }

  109.                   //顯示實(shí)測(cè)濕度值
  110.                         OLED_ShowChar(40,1,ASCII[Humi_H/10]);//顯示濕度十位的數(shù)值
  111.                         OLED_ShowChar(48,1,ASCII[Humi_H%10]);//顯示濕度個(gè)位的數(shù)值
  112.                         OLED_ShowChar(64,1,ASCII[Humi_L/10]);//顯示濕度十分位的數(shù)值
  113.                         OLED_ShowChar(70,1,ASCII[Humi_L%10]);//顯示濕度百分位的數(shù)值
  114.                         
  115.                                        
  116.                         OLED_ShowChar(40,0,ASCII[Temp_H/10]);//顯示溫度十位的數(shù)值
  117.                         OLED_ShowChar(48,0,ASCII[Temp_H%10]);//顯示溫度個(gè)位的數(shù)值
  118.                         OLED_ShowChar(64,0,ASCII[Temp_L/10]);//顯示溫度十分位的數(shù)值
  119.                         OLED_ShowChar(70,0,ASCII[Temp_L%10]);//顯示溫度百分位的數(shù)值
  120.                                                 
  121.                 if(temp_up<=Temp_H||temp_down>Temp_H||humi_up<=Humi_H||humi_down>Humi_H) //判斷是否超出設(shè)置的溫濕度上下限
  122.                 {
  123.                         buzz=0;                 //超出的話(huà)蜂鳴器響起
  124.                         led=0;                 //點(diǎn)亮報(bào)警燈
  125.                         led1=1;
  126.                 }
  127.                 else                     //否者溫濕度都處于限值范圍內(nèi)
  128.                 {
  129.                         buzz=1;                 //關(guān)閉蜂鳴器
  130.                         led=1;               
  131.                         led1=0;                 //點(diǎn)亮正常燈
  132.                 }        
  133.      jiexianw();               
  134.         }        
  135. }
  136. */
  137. /***************溫度上下限限制*******************/
  138. /*
  139. void jiexianw()
  140. {        
  141.         fixed_display();                        //顯示固定內(nèi)容
  142.         OLED_ShowString(0,4,"T&H limit");                          //設(shè)置區(qū)域顯示"T&H limit"
  143.         OLED_ShowString(0,5,"T:UP");            //設(shè)置區(qū)域顯示"T:UP"
  144.         OLED_ShowChar(32,5,ASCII[temp_up/10]);  //設(shè)置區(qū)域顯示溫度上限十位的數(shù)值
  145.         OLED_ShowChar(40,5,ASCII[temp_up%10]);  //設(shè)置區(qū)域顯示溫度上限個(gè)位的數(shù)值
  146.         OLED_ShowString(56,5,"DOWN");           //設(shè)置區(qū)域顯示"DOWN"
  147.         OLED_ShowChar(88,5,ASCII[temp_down/10]);//設(shè)置區(qū)域顯示溫度下限十位的數(shù)值
  148.         OLED_ShowChar(94,5,ASCII[temp_down%10]);//設(shè)置區(qū)域顯示溫度下限個(gè)位的數(shù)值
  149.         
  150.         OLED_ShowString(0,6,"H:UP");            //設(shè)置區(qū)域顯示"H:UP"
  151.         OLED_ShowChar(32,6,ASCII[humi_up/10]);  //設(shè)置區(qū)域顯示濕度上限十位的數(shù)值
  152.         OLED_ShowChar(40,6,ASCII[humi_up%10]);  //設(shè)置區(qū)域顯示濕度上限十位的數(shù)值
  153.         OLED_ShowString(56,6,"DOWN");           //設(shè)置區(qū)域顯示"DOWN"
  154.         OLED_ShowChar(88,6,ASCII[humi_down/10]);//設(shè)置區(qū)域顯示濕度下限十位的數(shù)值
  155.         OLED_ShowChar(94,6,ASCII[humi_down%10]);//設(shè)置區(qū)域顯示濕度下限個(gè)位的數(shù)值
  156.         
  157. }
  158. */
  159. /********************************************************
  160. 函數(shù)名稱(chēng):void delayms(uint ms)
  161. 函數(shù)作用:毫秒延時(shí)函數(shù)
  162. 參數(shù)說(shuō)明:
  163. ********************************************************/
  164. void delayms(uint ms)
  165. {
  166.         unsigned char i=100,j;
  167.         for(;ms;ms--)
  168.         {
  169.                 while(--i)
  170.                 {
  171.                         j=10;
  172.                         while(--j);
  173.                 }
  174.         }
  175. }
  176. /********************************************************
  177. 函數(shù)名稱(chēng):void scan(void)
  178. 函數(shù)作用:按鍵檢測(cè)函數(shù)
  179. 參數(shù)說(shuō)明:
  180. ********************************************************/
  181. /*
  182. void scan(void)
  183. {        
  184.         //設(shè)置鍵,不支持連按
  185.         if(key_set==0)                 //按鍵按下
  186.         {
  187.                 delayms(7);                   //延時(shí)消抖
  188.                 if(key_set==0)         //再次確認(rèn)按鍵按下
  189.                 {
  190.                         led=1;               //關(guān)閉報(bào)警燈
  191.                         led1=1;        //關(guān)閉正常燈
  192.                         buzz=1;               //關(guān)閉蜂鳴器
  193.                         if(set_f==0)   //進(jìn)入設(shè)置先清除屏幕,顯示設(shè)置部分
  194.                         {
  195.                                 OLED_Clear();      //清除屏幕顯示
  196.                                 delay_n40us(100);         //延時(shí)等待全部清除完畢
  197.                         }
  198.                         set_f++;                   //設(shè)置變量+1
  199.                         if(set_f==5)         //全部設(shè)置完成,退出設(shè)置
  200.                         {
  201.                                 set_f=0;           //重置設(shè)置變量

  202.                                 AT24C02_write_date(0,humi_up);  //寫(xiě)入【濕度上限】數(shù)據(jù)保存
  203.                                 AT24C02_write_date(1,humi_down);//寫(xiě)入【濕度下限】數(shù)據(jù)保存
  204.                                 AT24C02_write_date(2,temp_up);  //寫(xiě)入【溫度上限】數(shù)據(jù)保存
  205.                                 AT24C02_write_date(3,temp_down);//寫(xiě)入【溫度下限】數(shù)據(jù)保存
  206.                                 
  207.                                 OLED_Clear();      //清除屏幕顯示
  208.                                 delay_n40us(100);         //延時(shí)等待全部清除完畢
  209.                                 fixed_display();   //清除顯示后顯示固定部分
  210.                         }                        
  211.                 }
  212.                 while(!key_set);       //檢測(cè)按鍵松開(kāi)
  213.         }

  214.           //加值鍵,支持連按        
  215.         if(key_jia==0&&set_f!=0||key_jian==0&&set_f!=0)//進(jìn)入設(shè)置模式,按下加鍵或減鍵
  216.         {
  217.          delayms(7);       //延時(shí)消抖
  218.   if(set_f==1)       //設(shè)置濕度上限
  219.   {
  220.         if(key_jia==0)
  221.         {
  222.                         if(humi_up<99)  //濕度最大值不可大于99%RH
  223.                         humi_up++;      //濕度上限+1%RH
  224.         }
  225.         if(key_jian==0)
  226.         {
  227.         if(humi_up!=0&&humi_up>humi_down+1)//濕度上限最小不可為0%RH,并且上限得比下限大
  228.          humi_up--;                       //濕度上限值-1%RH
  229.         
  230.         }
  231. }
  232.   if(set_f==2)        //設(shè)置濕度下限
  233.   {
  234.         if(key_jia==0)
  235.         {
  236.                                 if(humi_down<99&&humi_down+1<humi_up)//濕度下限最大值小于99%RH,并且下限不可超過(guò)上限
  237.                                         humi_down++;                       //濕度下限+1%RH
  238.         }
  239.         if(key_jian==0)
  240.         {
  241.                                 if(humi_down!=0)                   //濕度下限最小值不可為0%RH
  242.                                         humi_down--;                    //濕度下限值-1%RH        
  243.         }
  244. }

  245.   if(set_f==3)          //設(shè)置溫度上限
  246.   {
  247.         if(key_jia==0)
  248.         {
  249.                                 if(temp_up<99) //溫度上限最大值不可大于99℃
  250.                                         temp_up++;   //濕度上限+1℃
  251.         }
  252.         if(key_jian==0)
  253.         {
  254.                                 if(temp_up!=0&&temp_up>temp_down+1)//溫度上限最小值不可為0℃,并且上限得比下限大
  255.                                         temp_up--;                       //溫度上限值-1℃
  256.         
  257.         }
  258. }

  259.         if(set_f==4)        //設(shè)置溫度下限
  260. {
  261.         if(key_jia==0)
  262.         {
  263.                                 if(temp_down<99&&temp_down+1<temp_up)//溫度下限最大值不可大于99℃,并且下限不可超過(guò)上限
  264.                                         temp_down++;                       //溫度下限+1℃
  265.         }
  266.         if(key_jian==0)
  267.         {               
  268.                                 if(temp_down!=0)                    //溫度下限最小值不可為0℃
  269.                                         temp_down--;                      //溫度下限值-1℃
  270.         
  271.         }
  272.                 }
  273.         }
  274. } */

  275. //-------字符串轉(zhuǎn)換為  數(shù)字

  276. char *reverse(char *s)
  277. {
  278.     char temp;
  279.     char *p = s;   
  280.     char *q = s;   
  281.     while(*q)
  282.         ++q;
  283.     q--;

  284.    
  285.     while(q > p)
  286.     {
  287.         temp = *p;
  288.         *p++ = *q;
  289.         *q-- = temp;
  290.     }
  291.     return s;
  292. }

  293. char *my_itoa(int n)
  294. {
  295.     int i = 0,isNegative = 0;
  296.     static char s[20];         
  297.     if((isNegative = n) < 0)
  298.     {
  299.         n = -n;
  300.     }
  301.     do        
  302.     {
  303.         s[i++] = n%10 + '0';
  304.         n = n/10;
  305.     }while(n > 0);

  306.     if(isNegative < 0)   
  307.     {
  308.         s[i++] = '-';
  309.     }
  310.     s[i] = '\0';   
  311.     return reverse(s);   
  312. }
  313. /********************************************************
  314. 函數(shù)名稱(chēng):void main()
  315. 函數(shù)作用:主函數(shù)
  316. 參數(shù)說(shuō)明:
  317. ********************************************************/
  318. //----lcd能顯示8行-1  ~ 6  -1 0 1 2 3 4 5 6

  319. int main()
  320. {
  321.         char js =1;
  322.         char jh = 1;
  323.         char wd =1;
  324.         char swh =1;
  325.         unsigned char ovc=0;unsigned char pm2_5=0;
  326.         unsigned int  value = 0;
  327.         int humid = 0;int tempt = 0;
  328.         OLED_Init();                         //顯示屏初始化

  329.          /*  DHT11_read();            //讀取DHT11溫濕度
  330.                  humid = Humi_H;
  331.                  tempt = Temp_H;
  332.            OLED_ShowString(0,0,"   ");        
  333.            OLED_ShowString(0,1,"   ");
  334.         
  335.     OLED_ShowString(0,0,"T:");                 OLED_ShowString(15,0,my_itoa(Temp_H));         
  336.     OLED_ShowString(50,0,"H:");                 OLED_ShowString(65,0,my_itoa(Temp_H));                        
  337.                 OLED_ShowString(0,1,"OVC:");   OLED_ShowString(30,1,my_itoa(iic_readvoldata2()/10));
  338.                 OLED_ShowString(0,2,"PM2.5:"); OLED_ShowString(40,1,my_itoa(iic_readvoldata1()/10));*/
  339.         
  340.         while(1)
  341.         {
  342.                            DHT11_read();            //讀取DHT11溫濕度
  343.                                         ovc   =  iic_readvoldata1();
  344.                             pm2_5 = iic_readvoldata2();
  345.           OLED_ShowString(0,0,"T:");                  OLED_ShowString(15,0,"   ");                   OLED_ShowString(15,0,my_itoa(Temp_H));         
  346.     OLED_ShowString(50,0,"H:");                  OLED_ShowString(65,0,"   ");             OLED_ShowString(65,0,my_itoa(Humi_H));                        
  347.                
  348.                 OLED_ShowString(0,2,"PM2.5:");  OLED_ShowString(40,2,"      ");         OLED_ShowString(60,2,my_itoa(ovc));  //---3        
  349.                 OLED_ShowString(0,1,"OVC:");           OLED_ShowString(30,1,"      ");           OLED_ShowString(30,1,my_itoa(pm2_5));  //----2
  350.                 //-----智能模式
  351.           OLED_ShowString(0,3,"mode:");   OLED_ShowString(40,3,my_itoa(swh));
  352.                 if(led1 == 0)
  353.                 {
  354.                         swh++;
  355.                         while(!led1);
  356.                 }
  357.                 if(swh >4)swh =1;
  358.                
  359.                 if(swh ==1)
  360.                 {        jia_wen =1; zhilen  =1;jia_shi =1;jin_hua = 1;
  361.                         if(Temp_H>=10&&Temp_H<=30){jia_wen =1 ; zhilen  =1;}
  362.                         if(Temp_H <10) {jia_wen =0; zhilen  =1;}
  363.                         if(Temp_H >30) {zhilen =0; jia_wen  =1; }        
  364.                         if(Humi_H <10)  {jia_shi =0;}  
  365.                         if(Humi_H >50)  {jia_shi =1;}
  366.                         
  367.                         if(ovc>122||pm2_5>140){ jin_hua = 0;} else {jin_hua = 1;}
  368.                 }
  369.                 if(swh == 2) //jia_wen
  370.                 {
  371.                         if(led2 == 0) wd++;
  372.                                 while(!led2);
  373.                         if(wd>3) wd =1;        
  374.                 }
  375.                 if(swh == 3) //jin_hua
  376.                 {
  377.                         if(led2 == 0) jh++;
  378.                                 while(!led2);
  379.                         if(jh>2) jh =1;
  380.                 }        

  381.                 if(swh == 4) //jia_shi
  382. ……………………

  383. …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼
51hei.png
所有資料51hei提供下載:
溫濕度.zip (174.47 KB, 下載次數(shù): 448)

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:842307 發(fā)表于 2021-2-22 00:47 | 顯示全部樓層
很有幫助,謝謝貼主
回復(fù)

使用道具 舉報(bào)

ID:995239 發(fā)表于 2021-12-21 16:43 | 顯示全部樓層
好用,謝謝貼主
回復(fù)

使用道具 舉報(bào)

ID:262073 發(fā)表于 2022-4-6 16:33 | 顯示全部樓層
take a look
回復(fù)

使用道具 舉報(bào)

ID:1064295 發(fā)表于 2023-2-25 22:12 | 顯示全部樓層
謝謝樓主,很有幫助
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 精品欧美乱码久久久久久 | 久草在线中文888 | 国产偷录视频叫床高潮对白 | 另类 综合 日韩 欧美 亚洲 | 国产日韩欧美精品一区二区 | 五月综合激情网 | 亚洲九九精品 | 国产高清毛片 | 亚洲一区二区三区在线观看免费 | 成人av高清在线观看 | 九九热在线免费视频 | 亚洲网站在线观看 | 毛片大全| 中文字幕视频在线观看 | 97日日碰人人模人人澡分享吧 | 精品av久久久久电影 | 亚洲成人在线免费 | 亚洲一区二区三区免费在线观看 | 国产高清美女一级a毛片久久w | 国产一区二区三区 | 欧美日韩亚洲一区二区 | 国产在线二区 | 91黄色片免费看 | 欧美日韩精品一区 | 欧美一级在线免费观看 | 亚洲成av | 色播99| 视频一区二区中文字幕 | 国产一区亚洲二区三区 | 91传媒在线观看 | 色偷偷噜噜噜亚洲男人 | 欧美精品91 | 狠狠草视频 | 日本在线中文 | 免费看黄色国产 | 一区二区国产精品 | 福利视频网| 高清久久 | 毛片99| 午夜视频在线播放 | 91精品国产综合久久精品 |