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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 11082|回復: 22
收起左側

單片機hs1101溫濕度檢測仿真及源程序有錯誤 求幫助

  [復制鏈接]
ID:137190 發表于 2016-9-27 16:06 | 顯示全部樓層 |閱讀模式
下面給51黑電子論壇的壇友分享一個溫度速檢測的仿真,濕度部分是用hs1101來實現的,溫度部分用的常見的ds18b20.下面是仿真原理圖:
0.png 0.png


源程序無法編譯:
  1. #include<reg52.h>
  2. #include <absacc.h>
  3. #define uint unsigned int
  4. #define uchar unsigned char
  5. sbit rs=P2^0;
  6. sbit rw=P2^1;
  7. sbit en=P2^2;
  8. sbit DQ=P3^4;                //     18b20總線
  9. unsigned char  dat[9]={0};                        //溫度
  10. unsigned char  shuju1[9]={0};         //濕度


  11. uchar code table1[17]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x54,0x45,0x4d,0x50,0x2d,0x2e,0x20};        //溫度調用
  12. uchar code table2[16]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x53,0x48,0x49,0x25,0x2e,0x20};            //濕度調用

  13. /**************1602d調用函數*******************/
  14. void write_com(uchar com);
  15. void write_shuju(uchar shuju);
  16. void init();
  17. void delay(uchar z);

  18. /**************18b20調用函數**************/
  19. unsigned char reset(void);           //18b20初始化//
  20. void write(uchar dat);               //18b20寫時序
  21. unsigned char read(void);            //18b20讀時序                  
  22. void readtemperature(void);          //18b20讀二進制16位溫度
  23. void yanshi(unsigned int us);

  24. /****************hs1101調用函數*************************/
  25. void readfrequency(void);                        //        讀頻率函數//
  26. bit minrange=0;                                                //濕度下限標志位//
  27. bit maxrange=0;                                                //濕度上限標志位//
  28. bit T0Over=0;                                                //定時器結束標記


  29. unsigned char w,x,y;

  30. /******************主函數******************/
  31. void main()                                         
  32. {
  33.         init();
  34.         while(1)        
  35.         {
  36.                 readtemperature();        
  37.                 write_com(0x80);
  38.                 write_shuju(table1[dat[0]]);
  39.                 write_com(0x81);
  40.                 write_shuju(table1[dat[1]]);
  41.                 write_com(0x82);
  42.                 write_shuju(table1[dat[2]]);
  43.                 write_com(0x83);
  44.                 write_shuju(table1[dat[3]]);
  45.                 write_com(0x84);
  46.                 write_shuju(table1[dat[4]]);
  47.                 write_com(0x85);
  48.                 write_shuju(table1[dat[5]]);
  49.                 write_com(0x86);
  50.                 write_shuju(table1[dat[6]]);
  51.                 write_com(0x87);
  52.                 write_shuju(table1[dat[7]]);
  53.                 write_com(0x88);
  54.                 write_shuju(table1[dat[8]]);
  55.                 readfrequency();
  56.         }

  57.         
  58.          
  59.         
  60. }

  61. /*****************1602延時程序*****************/
  62. void delay(uchar z)
  63. {
  64.         uint a,b;
  65.         for(a=0;a<z;a++)
  66.                 for(b=0;b<110;b++);
  67. }

  68. /*******************1602初始化**************/
  69. void init()
  70. {
  71.         en=0;
  72.         write_com(0x38);                //設置為8位并行,顯示2行,5*7點陣顯示
  73.         write_com(0x0c);                //設置顯示開 無光標 光標不閃爍
  74.         write_com(0x01);                  //清屏指令
  75.         write_com(0x80);                 
  76. }

  77. /***************1602寫指令*********************/
  78. void write_com(uchar com)
  79. {
  80.         rs=0;
  81.         rw=0;
  82.         P1=com;
  83.         delay(5);
  84.         en=1;
  85.         en=0;
  86. }

  87. /**************1602寫數據**********************/
  88. void write_shuju(uchar shuju)
  89. {
  90.         rs=1;
  91.         rw=0;
  92.         P1=shuju;
  93.         delay(5);
  94.         en=1;
  95.         en=0;
  96. }

  97. /*************18b20微秒延時********************/
  98. void yanshi(unsigned int us)
  99. {
  100.         int s;
  101.         for(s=0;s<us;s++);
  102. }

  103. /************************18b20初始化********/
  104. unsigned char reset(void)
  105. {
  106.         unsigned char  presence;
  107.         DQ=0;
  108.         yanshi(60);       //大概480微秒
  109.         DQ=1;
  110.         yanshi(8);                 //延時大概50微秒
  111.         presence=DQ;
  112.         yanshi(14);
  113.         return(presence);
  114. }
  115. /*************18b20寫時序*************************/
  116. void write(unsigned char dat)
  117. {
  118.         unsigned char i;
  119.         for(i=8;i>0;i--)
  120.         {
  121.                 DQ=0;
  122.                 DQ=dat&0x01;
  123.                 yanshi(16);
  124.                 DQ=1;
  125.                 dat>>=1;
  126.         }
  127. }

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

  143. /**************18b20讀溫度**********************/
  144. void readtemperature(void)
  145. {

  146.         unsigned char temp;
  147.         int temperature;
  148.         reset();
  149.         write(0xcc);
  150.         write(0x44);
  151.         reset();
  152.         write(0xcc);
  153.         write(0xbe);
  154.         temperature=read();
  155.         temp=read();
  156.         temperature=temperature|(temp<<8);
  157.         dat[0]=10;
  158.         dat[1]=11;
  159.         dat[2]=12;
  160.         dat[3]=13;
  161.         dat[4]=16;
  162.         if(temperature<0)
  163.         {
  164.                 dat[4]=14;
  165.                 temperature=~temperature+1;
  166.         }
  167.         dat[5]=(temperature*10/16)/100;
  168.         dat[6]=((temperature*10/16)%100)/10;
  169.         dat[7]=15;
  170.         dat[8]=((temperature*10/16)%100)%10;
  171. }


  172. /****************中斷*****************************/
  173. void timer0() interrupt 1
  174. {
  175.         TR1=0;
  176.         TR0=0;
  177.         TF0=0;
  178.     ET0=0;
  179.     T0Over=1;
  180. }

  181. /*************濕度傳感器頻率采集及轉換模塊***************/
  182. void readfrequency()
  183. {
  184.         unsigned int ftequency,RH;
  185.         TMOD=0x51;
  186.         TH0=0x4C;
  187.         TL0=0X00;
  188.         TH1=0;
  189.         TL1=0;
  190.         TR1=1;
  191.         TR0=1;
  192.     ET0=1;
  193.     ET1=0;
  194.         EA=1;
  195.         T0Over=0;
  196.         while(!T0Over)
  197.         write_com(0x80+0x40);
  198.         write_shuju(table2[shuju1[0]]);
  199.         write_com(0x80+0x41);
  200.         write_shuju(table2[shuju1[1]]);
  201.         write_com(0x80+0x42);
  202.         write_shuju(table2[shuju1[2]]);
  203.         write_com(0x80+0x43);
  204.         write_shuju(table2[shuju1[3]]);
  205.         write_com(0x80+0x44);
  206.         write_shuju(table2[shuju1[4]]);
  207.         write_com(0x80+0x45);
  208.         write_shuju(table2[shuju1[5]]);
  209.         write_com(0x80+0x46);
  210.         write_shuju(table2[shuju1[6]]);
  211.         write_shuju(table2[shuju1[7]]);
  212.         write_shuju(table2[shuju1[8]]);
  213.         ftequency=(TH1*256+TL1)*20;
  214.         minrange=0;
  215.         maxrange=0;
  216.         if(ftequency)
  217.         {
  218.                 if(ftequency<6033)
  219.                         maxrange=1;
  220.                 if(ftequency>7351)
  221.                         minrange=1;                                       
  222.                 if(6330<ftequency<=7351)
  223.                         RH=5880-0.8*ftequency;
  224.                 if(6033<=ftequency<=6330)
  225.                         RH=5860-0.8*ftequency;
  226.                 shuju1[0]=10;
  227.                 shuju1[1]=11;
  228.                 shuju1[2]=12;
  229.                 shuju1[3]=15;
  230.                 shuju1[4]=RH/100;
  231.                 shuju1[5]=(RH%100)/10;
  232.                 shuju1[6]=14;
  233.                 shuju1[7]=(RH%10);
  234.                 shuju1[8]=13;
  235.         }
  236. }
復制代碼
以上程序無法編譯,求大神指導: 溫濕度檢測.zip (56.43 KB, 下載次數: 240)
回復

使用道具 舉報

ID:67885 發表于 2016-11-29 16:07 | 顯示全部樓層
不錯收下了
回復

使用道具 舉報

ID:170423 發表于 2017-4-17 09:03 | 顯示全部樓層
謝謝
回復

使用道具 舉報

ID:162968 發表于 2017-4-18 09:55 | 顯示全部樓層
貌似不錯的樣子
回復

使用道具 舉報

ID:193204 發表于 2017-4-25 14:37 | 顯示全部樓層
hs1101可以用可變電容代替環境濕度變化嗎,能否加入溫度上下限報警功能呢??
回復

使用道具 舉報

6#
無效樓層,該帖已經被刪除
7#
無效樓層,該帖已經被刪除
ID:208904 發表于 2017-6-7 18:25 | 顯示全部樓層
真好真好真好真好
回復

使用道具 舉報

ID:110866 發表于 2017-6-9 12:40 | 顯示全部樓層
學習下吧
回復

使用道具 舉報

ID:243365 發表于 2017-10-27 10:33 | 顯示全部樓層
喵喵感謝樓主
回復

使用道具 舉報

ID:243365 發表于 2017-10-27 10:34 | 顯示全部樓層
喵喵感謝樓主
回復

使用道具 舉報

ID:297802 發表于 2018-4-14 11:24 | 顯示全部樓層
感謝樓主
回復

使用道具 舉報

ID:304296 發表于 2018-4-18 23:17 來自觸屏版 | 顯示全部樓層
您好。我看了您的程序。并且覺得跟我要做的特別像,所以想跟您討論一下,麻煩您給我個聯系方式可以嗎
回復

使用道具 舉報

ID:246240 發表于 2018-4-26 09:26 | 顯示全部樓層
搖曳漢文 發表于 2018-4-18 23:17
您好。我看了您的程序。并且覺得跟我要做的特別像,所以想跟您討論一下,麻煩您給我個聯系方式可以嗎

你好,可以加一下您嗎
回復

使用道具 舉報

ID:380539 發表于 2018-7-30 22:24 | 顯示全部樓層
不錯收下了,先學習一下
回復

使用道具 舉報

ID:380539 發表于 2018-7-30 22:25 | 顯示全部樓層
啊啊啊啊啊1 發表于 2018-4-26 09:26
你好,可以加一下您嗎

你做好了嗎?
回復

使用道具 舉報

ID:399171 發表于 2018-9-20 09:01 | 顯示全部樓層
下載下來為什么是錯誤
回復

使用道具 舉報

ID:399171 發表于 2018-9-20 10:13 | 顯示全部樓層
已解決
回復

使用道具 舉報

ID:119574 發表于 2019-3-2 15:27 | 顯示全部樓層
good job
回復

使用道具 舉報

ID:69072 發表于 2019-3-16 22:16 | 顯示全部樓層
很強 必須頂
回復

使用道具 舉報

ID:38792 發表于 2019-4-26 20:03 | 顯示全部樓層
資料不錯,拿走,謝謝。
回復

使用道具 舉報

ID:628646 發表于 2019-10-23 11:37 | 顯示全部樓層
標記下,用到
回復

使用道具 舉報

ID:706245 發表于 2020-3-11 10:43 來自觸屏版 | 顯示全部樓層
你好可以加下聯系方式嗎
回復

使用道具 舉報

ID:706245 發表于 2020-3-11 11:07 | 顯示全部樓層
你好我打不開那個仿真
回復

使用道具 舉報

ID:479983 發表于 2020-5-14 12:59 | 顯示全部樓層
仿真工程有嗎?
回復

使用道具 舉報

26#
無效樓層,該帖已經被刪除
您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表