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

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

QQ登錄

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

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

51單片機(jī)顯示CO與溫濕度

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主


  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};        //溫度調(diào)用
  18. uchar codetable2[15]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x53,0x3a,0x25,0x2e,0x20};            //濕度調(diào)用
  19. uchar codetable3[15]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x43,0x6f,0x3a,0x20,0x2e};
  20. /**************1602d調(diào)用函數(shù)*******************/
  21. void write_com(uchar com);
  22. void write_shuju(uchar shuju);
  23. void init();
  24. void delay(uchar z);
  25. /**************18b20調(diào)用函數(shù)**************/
  26. unsigned char reset(void);           //18b20初始化//
  27. void write(uchar dat);               //18b20寫(xiě)時(shí)序
  28. unsigned char read(void);            //18b20讀時(shí)序                  
  29. void readtemperature(void);          //18b20讀二進(jìn)制16位溫度
  30. void yanshi(unsigned int us);
  31. /****************hs1101調(diào)用函數(shù)*************************/
  32. void readfrequency(void);                        //        讀頻率函數(shù)//
  33. bit minrange=0;                                               //濕度下限標(biāo)志位//
  34. bit maxrange=0;                                               //濕度上限標(biāo)志位//
  35. bit T0Over=0;                                               //定時(shí)器結(jié)束標(biāo)記
  36. unsigned char w,x,y;



  37. /******************主函數(shù)******************/
  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延時(shí)程序*****************/
  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);                //設(shè)置為8位并行,顯示2行,5*7點(diǎn)陣顯示
  76.        write_com(0x0c);                //設(shè)置顯示開(kāi)無(wú)光標(biāo) 光標(biāo)不閃爍
  77.        write_com(0x01);                 //清屏指令
  78.         write_com(0x80);                 
  79. }

  80. /***************1602寫(xiě)指令*********************/
  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寫(xiě)數(shù)據(jù)**********************/
  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微秒延時(shí)********************/
  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);                 //延時(shí)大概50微秒
  114.        presence=DQ;
  115.        yanshi(14);
  116.        return(presence);                }







  117. /*************18b20寫(xiě)時(shí)序*************************/
  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讀時(shí)序*********************/
  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);     //跳過(guò)讀序號(hào)操作
  152.        write(0x44);    //啟動(dòng)溫度轉(zhuǎn)換
  153.        reset();
  154.        write(0xcc);     //跳過(guò)讀序號(hào)操作
  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;  //個(gè)位
  169.        dat[5]=13;
  170.        dat[6]=((temperature*10/16)%100)%10; //小數(shù)點(diǎn)后一位
  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. /*************濕度傳感器頻率采集及轉(zhuǎn)換模塊***************/
  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. }



復(fù)制代碼


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

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产精品美女久久久久久久久久久 | 日韩成人在线免费视频 | 午夜视频免费网站 | 中文字幕一区二区三区四区五区 | 激情欧美日韩一区二区 | av电影一区二区 | 国产精品成人一区 | 亚洲精品美女视频 | 午夜精品久久久久久久久久久久久 | 亚洲精品一二三区 | 啪啪av | 久久精品这里精品 | www亚洲成人| 波多野结衣精品 | 精品视频在线播放 | 成人小视频在线观看 | 成人国产免费视频 | 99久久精品免费看国产四区 | 亚洲精品女优 | 日韩视频一区二区 | 久久国内 | 亚洲人在线观看视频 | 欧美成人精品 | 久久久久久久久毛片 | 久久网一区二区 | 最新国产福利在线 | 国内精品免费久久久久软件老师 | 日本高清精品 | 欧美一级视频在线观看 | 亚洲视频在线一区 | 嫩草伊人| www.国产精 | 亚洲国产精品久久久 | 成人黄色av网址 | 国产一区二区在线观看视频 | 日韩不卡三区 | 一区二区三区视频在线免费观看 | 午夜av一区二区 | 在线观看国产精品视频 | av天天干 | 精品日韩一区二区 |