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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

51單片機顯示CO與溫濕度

[復制鏈接]
跳轉到指定樓層
樓主


  1. #include<reg52.h>
  2. #include <absacc.h>
  3. #define uint unsigned int
  4. #define uchar unsigned char
  5. sbit rs=P1^2;
  6. sbit rw=P1^3;
  7. sbit en=P1^4;
  8. sbit DQ=P3^4;
  9. sbit start=P1^0;              //     18b20總線
  10. sbit eoc=P3^3;
  11. sbit oe=P1^1;
  12. sbit CLK=P3^6;
  13. unsigned char tem;
  14. unsigned char  dat[8]={0};                        //溫度
  15. unsigned char  shuju1[7]={0};         //濕度
  16. unsigned char  shuju2[9]={0};
  17. uchar codetable1[16]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x54,0x3a,0x2d,0x2e,0x20,0x2f};        //溫度調用
  18. uchar codetable2[15]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x53,0x3a,0x25,0x2e,0x20};            //濕度調用
  19. uchar codetable3[15]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x43,0x6f,0x3a,0x20,0x2e};
  20. /**************1602d調用函數*******************/
  21. void write_com(uchar com);
  22. void write_shuju(uchar shuju);
  23. void init();
  24. void delay(uchar z);
  25. /**************18b20調用函數**************/
  26. unsigned char reset(void);           //18b20初始化//
  27. void write(uchar dat);               //18b20寫時序
  28. unsigned char read(void);            //18b20讀時序                  
  29. void readtemperature(void);          //18b20讀二進制16位溫度
  30. void yanshi(unsigned int us);
  31. /****************hs1101調用函數*************************/
  32. void readfrequency(void);                        //        讀頻率函數//
  33. bit minrange=0;                                               //濕度下限標志位//
  34. bit maxrange=0;                                               //濕度上限標志位//
  35. bit T0Over=0;                                               //定時器結束標記
  36. unsigned char w,x,y;



  37. /******************主函數******************/
  38. void main()                                         
  39. {
  40.        init();
  41.        while(1)        
  42.        {
  43.                 readtemperature();
  44.                 write_com(0x80+0x40);
  45.                 write_shuju(table1[dat[0]]);
  46.                write_com(0x80+0x41);
  47.                 write_shuju(table1[dat[1]]);
  48.                 write_com(0x80+0x42);
  49.                 write_shuju(table1[dat[2]]);
  50.                 write_com(0x80+0x43);
  51.                 write_shuju(table1[dat[3]]);
  52.                 write_com(0x80+0x44);
  53.                 write_shuju(table1[dat[4]]);
  54.                 write_com(0x80+0x45);
  55.                 write_shuju(table1[dat[5]]);
  56.                 write_com(0x80+0x46);
  57.                 write_shuju(table1[dat[6]]);
  58.                 write_com(0x80+0x47);
  59.                 write_shuju(table1[dat[7]]);
  60.                 readfrequency();
  61.        }
  62. }
  63. /*****************1602延時程序*****************/
  64. void delay(uchar z)
  65. {
  66.        uint a,b;
  67.        for(a=0;a<z;a++)
  68.                 for(b=0;b<110;b++);
  69. }
  70. /*******************1602初始化**************/
  71. void init()
  72. {
  73.        oe=0;
  74.        en=0;
  75.        write_com(0x38);                //設置為8位并行,顯示2行,5*7點陣顯示
  76.        write_com(0x0c);                //設置顯示開無光標 光標不閃爍
  77.        write_com(0x01);                 //清屏指令
  78.         write_com(0x80);                 
  79. }

  80. /***************1602寫指令*********************/
  81. void write_com(uchar com)
  82. {
  83.        rs=0;
  84.        rw=0;
  85.        P0=com;
  86.        delay(5);
  87.        en=1;
  88.        en=0;
  89. }
  90. /**************1602寫數據**********************/
  91. void write_shuju(uchar shuju)
  92. {
  93.        rs=1;
  94.        rw=0;
  95.        P0=shuju;
  96.        delay(5);
  97.        en=1;
  98.        en=0;
  99. }
  100. /*************18b20微秒延時********************/
  101. void yanshi(unsigned int us)
  102. {
  103.        int s;
  104.        for(s=0;s<us;s++);
  105. }
  106. /************************18b20初始化********/
  107. unsigned char reset(void)
  108. {
  109.        unsigned char  presence;
  110.        DQ=0;
  111.        yanshi(60);       //大概480微秒
  112.        DQ=1;
  113.        yanshi(8);                 //延時大概50微秒
  114.        presence=DQ;
  115.        yanshi(14);
  116.        return(presence);                }







  117. /*************18b20寫時序*************************/
  118. void write(unsigned char dat)
  119. {
  120.        unsigned char i;
  121.        for(i=8;i>0;i--)
  122.        {
  123.                 DQ=0;
  124.                 DQ=dat&0x01;
  125.                 yanshi(16);
  126.                 DQ=1;
  127.                 dat>>=1;
  128.        }
  129. }

  130. /***************18b20讀時序*********************/
  131. unsigned char read(void)
  132. {
  133.        unsigned char i,dat=0;
  134.        for(i=8;i>0;i--)
  135.        {
  136.                 DQ=0;
  137.                 dat>>=1;
  138.                DQ=1;
  139.                 if(DQ)
  140.                         dat|=0x80;
  141.                 yanshi(7);
  142.        }
  143.        return (dat);
  144. }

  145. /**************18b20讀溫度**********************/
  146. void readtemperature(void)
  147. {

  148.        unsigned char temp;
  149.        int temperature;
  150.        reset();
  151.        write(0xcc);     //跳過讀序號操作
  152.        write(0x44);    //啟動溫度轉換
  153.        reset();
  154.        write(0xcc);     //跳過讀序號操作
  155.        write(0xbe);    //讀取溫度寄存器
  156.        temperature=read();
  157.        temp=read();
  158.        temperature=temperature|(temp<<8);
  159.        dat[0]=10;
  160.        dat[1]=11;
  161.        dat[2]=14;
  162.        if(temperature<0)
  163.        {
  164.                 dat[2]=12;
  165.                 temperature=~temperature+1;
  166.        }
  167.        dat[3]=(temperature*10/16)/100;       //十位
  168.        dat[4]=((temperature*10/16)%100)/10;  //個位
  169.        dat[5]=13;
  170.        dat[6]=((temperature*10/16)%100)%10; //小數點后一位
  171.        dat[7]=15;
  172. }
  173. /****************中斷*****************************/
  174. void timer0() interrupt 1
  175. {
  176.        TR1=0;     
  177.        TR0=0;     
  178.        TF0=0;     
  179.         ET0=0;   

  180.    T0Over=1;

  181. }
  182. /*******AD控制程序*******************************/
  183.           void zhuanhuan()
  184. {
  185.                 start=0;
  186.                 start=1;
  187.                 start=0;
  188.                 while(!eoc);        
  189.                oe=1;
  190.                 tem=P0;
  191.                 oe=0;
  192.                 tem=(tem*2*1*98.039216/100);  //AD采樣換算
  193. }






  194. /*************濕度傳感器頻率采集及轉換模塊***************/
  195. void readfrequency()
  196. {
  197.        unsigned int ftequency,RH;
  198.        TMOD=0x51;
  199.        TH0=0x4C;
  200.        TL0=0X00;
  201.        TH1=0;
  202.        TL1=0;
  203.        TR1=1;
  204.        TR0=1;
  205.    ET0=1;
  206.    ET1=0;
  207.        EA=1;
  208.        T0Over=0;
  209.        while(!T0Over)
  210.        write_com(0x80+0x48);
  211.        write_shuju(table2[shuju1[0]]);
  212.        write_com(0x80+0x49);
  213.        write_shuju(table2[shuju1[1]]);
  214.        write_com(0x80+0x4a);
  215.        write_shuju(table2[shuju1[2]]);
  216.        write_com(0x80+0x4b);
  217.        write_shuju(table2[shuju1[3]]);
  218.        write_com(0x80+0x4c);
  219.        write_shuju(table2[shuju1[4]]);
  220.         write_com(0x80+0x4d);
  221.        write_shuju(table2[shuju1[5]]);
  222.        write_com(0x80+0x4e);
  223.        write_shuju(table2[shuju1[6]]);
  224.        ftequency=(TH1*256+TL1)*20;
  225.        minrange=0;
  226.        maxrange=0;
  227.        if(ftequency)
  228.        {
  229.                if(ftequency<6033)
  230.                         maxrange=1;
  231.                 if(ftequency>7351)
  232.                         minrange=1;                                       
  233.                 if(6330<ftequency<=7351)
  234.                         RH=5880-0.8*ftequency;
  235.                 if(6033<=ftequency<=6330)
  236.                 RH=5860-0.8*ftequency;
  237.                 shuju1[0]=10;
  238.                 shuju1[1]=11;
  239.                 shuju1[2]=RH/100;
  240.                 shuju1[3]=(RH%100)/10;
  241.                 shuju1[4]=13;
  242.                shuju1[5]=(RH%10);
  243.                 shuju1[6]=12;
  244.                 write_com(0x80);
  245.                 write_shuju(table3[shuju2[0]]);
  246.                 write_com(0x81);
  247.                 write_shuju(table3[shuju2[1]]);
  248.                 write_com(0x82);
  249.                 write_shuju(table3[shuju2[2]]);
  250.                 write_com(0x83);
  251.                 write_shuju(table3[shuju2[3]]);
  252.                 write_com(0x84);
  253.                 write_shuju(table3[shuju2[4]]);
  254.                 write_com(0x85);
  255.                 write_shuju(table3[shuju2[5]]);
  256.                 write_com(0x86);
  257.                 write_shuju(table3[shuju2[6]]);
  258.                 write_com(0x87);
  259.                 write_shuju(table3[shuju2[7]]);
  260.                 write_com(0x88);
  261.                 write_shuju(table3[shuju2[8]]);
  262.                 shuju2[0]=10;
  263.                 shuju2[1]=11;
  264.                 shuju2[2]=12;
  265.                 shuju2[3]=13;
  266.                 shuju2[4]= tem/1000;
  267.                 shuju2[5]= tem%1000/100;
  268.                 shuju2[6]= 14;
  269.                shuju2[7]= tem%100/10;
  270.                 shuju2[8]= tem%10;
  271.                                    zhuanhuan();

  272.        }
  273. }



復制代碼


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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 99re| 美女黄色在线观看 | 国产激情一区二区三区 | 亚洲不卡av在线 | 久久中文字幕一区 | 亚洲v日韩v综合v精品v | 在线视频一区二区 | 国产精品久久久久一区二区三区 | 国产精品福利网站 | 国产精品一区二区在线 | 四虎在线视频 | 国产精品久久久久久久7777 | 久久精品女人天堂av | 国产91丝袜在线播放 | 国产一区二区三区高清 | 伊人精品视频 | 精品综合 | 91在线视频免费观看 | 亚洲欧美精品一区 | 欧美亚洲视频 | 日韩和的一区二在线 | 91精品久久久久久久久99蜜臂 | 91视频大全| 久久久久国产精品一区 | 一级a性色生活片久久毛片 午夜精品在线观看 | 欧美一区二区三区在线观看视频 | 欧美一级片在线看 | 超碰国产在线 | 欧美一区二区三区小说 | 国产精品久久午夜夜伦鲁鲁 | 在线观看视频一区 | 逼逼网 | 日本人爽p大片免费看 | 欧美一级二级视频 | 在线午夜电影 | 在线观看视频一区二区三区 | 欧美中文字幕一区二区 | 天天草天天射 | 色婷婷综合网 | 99精品视频免费观看 | 亚洲一区在线日韩在线深爱 |