欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

有溫度濕度顯示的單片機(jī)萬年歷

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:34643 發(fā)表于 2017-7-9 15:36 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
    這是一款有溫度濕度顯示的單片機(jī)萬年歷程序,程序來源于本壇,修改了一些原程序在KEIL4編譯環(huán)境下的編譯出出的警造,程序修改后用單片機(jī)開發(fā)板進(jìn)行驗證,功能正常。
這是修改完善后的程序:
單片機(jī)開發(fā)板完成的單片機(jī)試驗_帶溫度濕度的多功能萬年歷.zip (2.72 MB, 下載次數(shù): 132)

下面是試驗時的照片:






單片機(jī)源碼:
  1. #include <REGX52.H>                                          
  2. typedef  unsigned int u16;         
  3. typedef  unsigned char u8;
  4. sbit k2=P3^2;                                            //K1 K2 K3 K4按鍵接口,建議從左到右接K1-K4
  5. sbit k1=P3^5;
  6. sbit k3=P3^3;
  7. sbit k4=P3^4;
  8. sbit DQ=P3^7;
  9. sbit beep=P1^6;   
  10. sbit Data=P1^1;                                             //有源蜂鳴器在P16口
  11. sbit lcden=P0^5;                                                //LCD1602接口定義
  12. sbit lcdrs=P0^7;                                                   
  13. sbit lcdrw=P0^6;
  14. sbit bg=P1^7;                                                //背光變量接入LCD1602的K極,通過bg的高低電平就可控制自動熄滅與點亮
  15. u8 k,e,d,o=1,p=1,temp,nxflag=0,mbflag=0,tianmax;      
  16. float temperature;                                           //溫度變量,18B20接收時為浮點數(shù)
  17. u8 miao1,miao2,fen1,fen2,shi1,shi2,tian1,tian2,wk,tem1,tem2,tem3,wendufu;
  18. u8 day=1,mon=1,day1,day2,yue1,yue2,mbw,n=0,m=0,beiguang,RH,RL,TH,TL,tempH,tempL;
  19. u8 se1,se2,mon1,mon2,hou1,hou2,min1,min2,MB2,nian1,nian2,nian3,nian4;
  20. u16 y,MB1;
  21. u16 temper,buchang,tempwarn=0,tempwarn1=500;                //tempwarn為溫度下限,1為溫度上限
  22. u8 code set[]={"NaoZhong  Status"};                                    //上電后傻瓜調(diào)節(jié)模塊
  23. u8 code tempwarng[]={"Wendu Waring!"};
  24. u8 code temmin[]={"Min"};
  25. u8 code temmax[]={"Max"};               
  26. u8 code naozhongON[]={" ON"};
  27. u8 code naozhongOFF[]={"OFF"};
  28. u8 code setsucces[]={"Set Success!"};
  29. u8 code thanks[]={"Welcome to use !"};
  30. u8 code thanksu[]={"thanks for using"};
  31. u8 code make[]={"Designed by LY"};
  32. u8 code MB[]={"Stopwatch"};
  33. u8 code week1[]={"[MON]"};
  34. u8 code week2[]={"[TUE]"};
  35. u8 code week3[]={"[WED]"};
  36. u8 code week4[]={"[THU]"};
  37. u8 code week5[]={"[FRI]"};
  38. u8 code week6[]={"[SAT]"};
  39. u8 code week7[]={"[SUN]"};                        
  40. void delay(unsigned int z)                                   //定義延時函數(shù)
  41. {                                          
  42.   unsigned int x,y;                        
  43.   for(x=z;x>0;x--)
  44.   for(y=1;y>0;y--);
  45. }
  46. void DHT11_delay_us(u8 n)
  47. {
  48.     while(--n);
  49. }
  50. void DHT11_delay_ms(u16 z)               //定義DHT11延遲函數(shù)
  51. {
  52.    u16 i,j;
  53.    for(i=z;i>0;i--)
  54.       for(j=110;j>0;j--);
  55. }

  56.          void DHT11_start()
  57. {
  58.    Data=1;
  59.    DHT11_delay_us(2);
  60.    Data=0;
  61.    DHT11_delay_ms(20);   //延時18ms以上
  62.    Data=1;
  63.    DHT11_delay_us(30);
  64. }
  65. u8 DHT11_rec_byte()      //接收一個字節(jié)
  66. {
  67.   u8 i,dat=0;
  68.   for(i=0;i<8;i++)       //從高到低依次接收8位數(shù)據(jù)
  69.    {         
  70.       while(!Data);       //等待50us低電平過去
  71.       DHT11_delay_us(8);   //延時60us,如果還為高則數(shù)據(jù)為1,否則為0
  72.       dat<<=1;           //移位使正確接收8位數(shù)據(jù),數(shù)據(jù)為0時直接移位
  73.       if(Data==1)        //數(shù)據(jù)為1時,使dat加1來接收數(shù)據(jù)1
  74.          dat+=1;
  75.       while(Data);       //等待數(shù)據(jù)線拉低   
  76.     }  
  77.     return dat;
  78. }
  79. void DHT11_receive()      //接收40位的數(shù)據(jù)
  80.         {
  81.     u8 R_H,R_L,T_H,T_L,revise;
  82.     DHT11_start();
  83.     if(Data==0)
  84.     {
  85.         while(Data==0);   //等待拉高     
  86.         DHT11_delay_us(40);      //拉高后延時80us
  87.         R_H=DHT11_rec_byte();    //接收濕度高八位  
  88.         R_L=DHT11_rec_byte();    //接收濕度低八位  
  89.         T_H=DHT11_rec_byte();    //接收溫度高八位  
  90.         T_L=DHT11_rec_byte();    //接收溫度低八位
  91.         revise=DHT11_rec_byte(); //接收校正位
  92.         DHT11_delay_us(25);      //結(jié)束
  93.         if((R_H+R_L+T_H+T_L)==revise)      //校正
  94.         {
  95.             RH=R_H;
  96.             RL=R_L;
  97.                         TH=T_H;
  98.                         TL=T_L;
  99.         }
  100.     }
  101.   }
  102. void beepon()                                                //PWM(如果你是無源蜂鳴器,這里寫PWM函數(shù))
  103. {                                                             //當(dāng)前為有源蜂鳴器,有源蜂鳴器無需更改
  104.    beep=0;
  105.    delay(1200);
  106.    beep=1;     
  107. }         
  108. void write_nian();                                  //預(yù)定義
  109. void write_yue();
  110. void write_tian();
  111. void write_shi();
  112. void write_fen();
  113. void write_miao();
  114. void write_week();
  115. void zhuanhuan();
  116. void write_temp();
  117. void write_nz();
  118. void nzON();
  119. void write_setsuccess();
  120. void beiguangpd();

  121. void write_com(u8 com)                                    //LCD1602初始化程序,了解1602時序圖后新手的話可以直接照搬使用                                    
  122. {
  123. lcdrs=0;
  124. P2=com;
  125. delay(5);
  126. lcden=1;
  127. delay(5);
  128. lcden=0;
  129. }
  130. void write_data(u8 date)
  131. {
  132. lcdrs=1;
  133. P2=date;
  134. delay(5);
  135. lcden=1;
  136. delay(5);
  137. lcden=0;
  138. }
  139. void init()
  140. {
  141. lcdrw=0;
  142. lcden=0;
  143. write_com(0x38);
  144. write_com(0x0c);
  145. write_com(0x06);
  146. write_com(0x01);
  147. write_com(0x80+0x10);  
  148. }
  149.         
  150. void TimerInit()                                                    //定時器0工作方式1 中斷初始化,923位12M晶振在KEIL仿真后的計算結(jié)果
  151. {   
  152.     TMOD=0X01;
  153.         TH0=(65535-901)/256;        
  154.         TL0=(65535-901)%256;        
  155.         ET0=1;                                          //打開定時器0中斷允許位
  156.         EA=1;                                         //打開總中斷允許
  157.         TR0=1;                                                 //打開 定時器0,開始計時
  158. }
  159. Init_DS18B20(void)                                    //DS18B20初始化與時序圖程序,仿真時溫度問題改進(jìn)這個初始化程序就解決了
  160.   {
  161.        DQ=1;
  162.        delay(70);
  163.        DQ=0;
  164.        delay(485);
  165.        DQ=1;
  166.        delay(50);
  167.            return(1);
  168.   }
  169. ReadOneChar(void)                                      //18B20讀一個字節(jié)
  170.   {  
  171.     unsigned char i=0;
  172.     unsigned char dat=0;
  173.        for (i=8;i>0;i--)
  174.      {
  175.          DQ=1;
  176.          delay(1);
  177.          DQ=0;
  178.          dat>>=1;
  179.          DQ=1;
  180.          if(DQ)
  181.          dat|=0x80;
  182.          delay(4);
  183.        }
  184.     return(dat);
  185.    }  
  186. WriteOneChar(unsigned char dat)                     //18B20寫一個字節(jié)
  187.    {
  188.          unsigned char i=0;
  189.          for(i=8;i>0;i--)
  190.         {
  191.              DQ=0;
  192.              DQ=dat&0x01;
  193.              delay(5);
  194.              DQ=1;
  195.              dat>>=1;
  196.         }
  197.           delay(4);
  198.             return(1);
  199.     }
  200. ReadTemperature(void)                           //讀取溫度函數(shù)定義,返回值為浮點數(shù)
  201.    {
  202.         Init_DS18B20();
  203.         WriteOneChar(0xcc);
  204.         WriteOneChar(0x44);
  205.         delay(125);
  206.         Init_DS18B20();
  207.         WriteOneChar(0xcc);
  208.         WriteOneChar(0xbe);
  209.         tempL=ReadOneChar();
  210.         tempH=ReadOneChar();
  211.             if(tempH>0x7f)
  212.                 {
  213.                 tempH=~tempH;
  214.                 tempL=~tempL+1;
  215.                 wendufu=1;
  216.                 }
  217.                 else
  218.                 wendufu=0;
  219.                 temperature=(((tempH*256)+tempL)*0.0625)*10;
  220.         delay(200);
  221.         return(temperature);
  222.     }
  223. void welcome()                                       //定義歡迎函數(shù)
  224. { static u8 i;
  225.   init();                                              //初始化1602
  226.   delay(5000);
  227.   for(i=0;i<16;i++)
  228.   {
  229.   write_com(0x80+i);
  230.   write_data(thanks[i]);
  231.   delay(4000);
  232.   }
  233.   delay(50000);
  234.   for(i=0;i<14;i++)
  235.   {
  236.   write_com(0x81+0x40+i);
  237.   write_data(make[i]);
  238.   delay(4000);
  239.   }
  240.   delay(50000);
  241.   delay(50000);
  242. }

  243. void pdtian1()                          //PD在上電后設(shè)置完畢主界面處的天數(shù)判斷
  244. {
  245. if((p==1||p==3)||(p==5||p==7)||(p==8||p==10)||p==12)        
  246.                 tianmax=31;
  247.           if((p==4||p==6)||(p==9||p==11))
  248.            tianmax=30;

  249.           if(p==2)
  250.           {
  251.             if(((y%4==0)&&(y%100!=0))||(y%400==0))
  252.                   tianmax=29;
  253.                 else
  254.                   tianmax=28;
  255.           }
  256. }
  257. void pdxingqi1()                     //PD在上電后設(shè)置完畢至主界面處的星期判斷
  258. {
  259.   static char c,yi,mt,xwk1,xwk2,xwk3;
  260.   static int xwk,yn,xwk4;
  261.   yn=y;
  262.   if(p==1||p==2)
  263.           { yn=yn-1;
  264.             mt=p+12;
  265.          }
  266.           else
  267.       mt=p;
  268.    yi=yn%100;
  269.    c=yn/100;
  270.   xwk1=yi+(yi/4);
  271.   xwk2=c/4;
  272.   xwk3=2*c;
  273.   xwk4=(26*mt+26)/10;
  274.   xwk=xwk1+xwk2-xwk3+xwk4+o-1;
  275.   while(xwk<0)
  276.   {xwk+=7; }
  277.   wk=xwk%7;
  278. }
  279. void Display()                                //定義主程序 顯示部分函數(shù)模塊
  280. {           static u16 xunhuan;
  281.      RH=RH%100;
  282.      write_nian();                          //1602寫入顯示年
  283.      write_com(0x84);
  284.      write_data('-');                              
  285.      write_yue();                        //寫入月
  286.             write_com(0x87);
  287.      write_data('-');
  288.             write_com(0x88);
  289.      write_tian();                         //寫入天
  290.      write_week();
  291.      write_shi();
  292.          write_com(0x82+0x40);
  293.      write_data(':');
  294.      write_fen();
  295.          write_com(0x85+0x40);
  296.      write_data(':');
  297.          write_miao();                           //寫入溫度,溫度TEM1與2與3是溫度的三位數(shù)                                                         
  298.          xunhuan++;
  299.          if(xunhuan<180)
  300.         {if(wendufu==1)
  301.          {        
  302.          if((temper/100)!=0)
  303.          {
  304.          write_com(0x89+0x40);
  305.          write_data('-');
  306.          write_com(0x8a+0x40);
  307.          write_data(tem1);   
  308.          }
  309.          else
  310.          {
  311.          write_com(0x89+0x40);
  312.          write_data(' ');  
  313.          write_com(0x8a+0x40);
  314.          write_data('-');  
  315.          }
  316.          }

  317.          else
  318.          {
  319.          write_com(0x89+0x40);
  320.          write_data(' ');
  321.          
  322.          if((temper/100)!=0)  
  323.          {
  324.          write_com(0x8a+0x40);
  325.          write_data(tem1);
  326.          }
  327.          else
  328.          {
  329.          write_com(0x8a+0x40);
  330.          write_data(' ');
  331.          } }
  332.          write_com(0x8b+0x40);
  333.          write_data(tem2);
  334.          write_com(0x8c+0x40);
  335.          write_data('.');
  336.          write_com(0x8d+0x40);
  337.          write_data(tem3);
  338.          write_com(0x8e+0x40);
  339.          write_data(0xdf);
  340.          write_com(0x8f+0x40);
  341.          write_data('C');
  342.          }
  343.          if(xunhuan>180)
  344.          {
  345.          write_com(0x89+0x40);
  346.          write_data(' ');
  347.          write_com(0x8a+0x40);
  348.          write_data(' ');
  349.          write_com(0x8b+0x40);
  350.          write_data(RH/10+0x30);
  351.          write_com(0x8c+0x40);
  352.          write_data(RH%10+0x30);
  353.          write_com(0x8d+0x40);
  354.          write_data('%');
  355.          write_com(0x8e+0x40);
  356.           write_data('R');
  357.           write_com(0x8f+0x40);
  358.          write_data('H');
  359.          }
  360.          if(xunhuan==360)
  361.          xunhuan=0;         
  362. }
  363. void NZdisplay()                                    //定義鬧鐘模塊
  364. {
  365.    static u8 nzflag=2,nzwei;                        
  366.    delay(2000);
  367.    init();
  368.    delay(2000);
  369.    nzON();                                         //鬧鐘開關(guān)選擇模塊
  370.    while(k4)                                     //沒有檢測到K4鍵退出時無限循環(huán)
  371.     {  
  372. ...........................................................................................................................................
  373. 由于程序較長,需要的可以自己下載。
復(fù)制代碼



帶溫度補(bǔ)償超聲波測距:http://www.raoushi.com/bbs/dpj-89712-1.html

單片機(jī)DHT11溫度濕度程序:http://www.raoushi.com/bbs/dpj-89543-1.html



評分

參與人數(shù) 2黑幣 +105 收起 理由
liuchang9117 + 5
admin + 100 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發(fā)
ID:218373 發(fā)表于 2017-7-9 22:54 | 只看該作者
說的見解到位,不錯
回復(fù)

使用道具 舉報

板凳
ID:34643 發(fā)表于 2017-10-12 07:35 | 只看該作者
liuchang9117 發(fā)表于 2017-7-9 22:54
說的見解到位,不錯

謝謝你的鼓勵,我會繼續(xù)努力。
回復(fù)

使用道具 舉報

無效樓層,該帖已經(jīng)被刪除
5#
ID:848824 發(fā)表于 2021-1-28 15:05 | 只看該作者
請問斷電保存數(shù)據(jù)嗎
回復(fù)

使用道具 舉報

6#
ID:848824 發(fā)表于 2021-1-28 19:51 | 只看該作者
有原理圖就好了
回復(fù)

使用道具 舉報

7#
ID:848824 發(fā)表于 2021-1-29 21:57 | 只看該作者
屏幕接線圖給個就好了
回復(fù)

使用道具 舉報

8#
無效樓層,該帖已經(jīng)被刪除
9#
ID:972742 發(fā)表于 2021-12-2 17:00 來自觸屏版 | 只看該作者
有仿真就好啦
回復(fù)

使用道具 舉報

10#
ID:977804 發(fā)表于 2021-12-4 20:12 來自觸屏版 | 只看該作者
清翔v2.0同款
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表