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

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

QQ登錄

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

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

ds18b20+揚(yáng)聲器做的簡(jiǎn)易溫度報(bào)警(仿真+源碼)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ds18b20+揚(yáng)聲器做的簡(jiǎn)易溫度報(bào)警(仿真+源碼)仿真再附上的圖片里
源碼比較簡(jiǎn)單,就是檢測(cè)溫度是否達(dá)到31度,是的話就啟動(dòng)揚(yáng)聲器

下載: Desktop.rar (66.96 KB, 下載次數(shù): 23)




單片機(jī)源程序如下:

  1. /*******************************************************************************
  2. 程序功能:實(shí)時(shí)采集當(dāng)前環(huán)境溫度值,并顯示于數(shù)碼管上。
  3.                   同時(shí),當(dāng)溫度高于某一值時(shí)(此處設(shè)為31攝氏度),蜂鳴器便會(huì)發(fā)出報(bào)警。
  4.                   而當(dāng)?shù)陀谠撝禃r(shí),蜂鳴器自動(dòng)停止報(bào)警。
  5.                   試驗(yàn)時(shí),可用手觸摸DS18B20,使其溫度升高到31度,觀察現(xiàn)象。
  6. *****************************************************************************/
  7. #include <reg52.h>
  8. #define uchar unsigned char
  9. #define uint unsigned int
  10. sbit DS=P2^2;           //define interface
  11. uint temp;             // variable of temperature
  12. uchar flag1;            // sign of the result positive or negative
  13. sbit dula=P2^6;
  14. sbit wela=P2^7;
  15. sbit beep=P2^3;
  16. unsigned char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xa0,0x83,0xc6,0xa1,0x84,0x8e};
  17. unsigned char code table1[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};

  18. void delay(uint count)      //delay
  19. {
  20.   uint i;
  21.   while(count)
  22.   {
  23.     i=200;
  24.     while(i>0)
  25.     i--;
  26.     count--;
  27.   }
  28. }
  29. void dsreset(void)       //send reset and initialization command
  30. {
  31.   uint i;
  32.   DS=0;
  33.   i=103;
  34.   while(i>0)i--;
  35.   DS=1;
  36.   i=4;
  37.   while(i>0)i--;
  38. }

  39. bit tmpreadbit(void)       //read a bit
  40. {
  41.    uint i;
  42.    bit dat;
  43.    DS=0;i++;          //i++ for delay
  44.    DS=1;i++;i++;
  45.    dat=DS;
  46.    i=8;while(i>0)i--;
  47.    return (dat);
  48. }

  49. uchar tmpread(void)   //read a byte date
  50. {
  51.   uchar i,j,dat;
  52.   dat=0;
  53.   for(i=1;i<=8;i++)
  54.   {
  55.     j=tmpreadbit();
  56.     dat=(j<<7)|(dat>>1);   //讀出的數(shù)據(jù)最低位在最前面,這樣剛好一個(gè)字節(jié)在DAT里
  57.   }
  58.   return(dat);
  59. }

  60. void tmpwritebyte(uchar dat)   //write a byte to ds18b20
  61. {
  62.   uint i;
  63.   uchar j;
  64.   bit testb;
  65.   for(j=1;j<=8;j++)
  66.   {
  67.     testb=dat&0x01;
  68.     dat=dat>>1;
  69.     if(testb)     //write 1
  70.     {
  71.       DS=0;
  72.       i++;i++;
  73.       DS=1;
  74.       i=8;while(i>0)i--;
  75.     }
  76.     else
  77.     {
  78.       DS=0;       //write 0
  79.       i=8;while(i>0)i--;
  80.       DS=1;
  81.       i++;i++;
  82.     }

  83.   }
  84. }

  85. void tmpchange(void)  //DS18B20 begin change
  86. {
  87.   dsreset();
  88.   delay(1);
  89.   tmpwritebyte(0xcc);  // address all drivers on bus
  90.   tmpwritebyte(0x44);  //  initiates a single temperature conversion
  91. }

  92. uint tmp()               //get the temperature
  93. {
  94.   float tt;
  95.   uchar a,b;
  96.   dsreset();
  97.   delay(1);
  98.   tmpwritebyte(0xcc);
  99.   tmpwritebyte(0xbe);
  100.   a=tmpread();
  101.   b=tmpread();
  102.   temp=b;
  103.   temp<<=8;             //two byte  compose a int variable
  104.   temp=temp|a;
  105.   tt=temp*0.0625;
  106.   temp=tt*10+0.5;
  107.   return temp;
  108. }

  109. void display(uint temp)                        //顯示程序
  110. {
  111.    uchar A1,A2,A2t,A3;
  112.    A1=temp/100;
  113.    A2t=temp%100;
  114.    A2=A2t/10;
  115.    A3=A2t%10;
  116.    dula=0;
  117.    P0=table[A1];                //顯示百位
  118.    dula=1;
  119.    dula=0;

  120.    wela=0;
  121.    P0=0x01;
  122.    wela=1;
  123.    wela=0;
  124.    delay(1);

  125.    dula=0;
  126.    P0=table1[A2];                //顯示十位
  127.    dula=1;
  128.    dula=0;

  129.    wela=0;
  130.    P0=0x02;
  131.    wela=1;
  132.    wela=0;
  133.    delay(1);

  134.    P0=table[A3];                //顯示個(gè)位
  135.    dula=1;
  136.    dula=0;

  137.    P0=0x04;
  138.    wela=1;
  139.    wela=0;
  140.    delay(1);
  141. }


  142. void main()
  143. {
  144. uchar a;
  145.   do
  146.   {
  147.     tmpchange();
  148.         for(a=10;a>0;a--)
  149.           {   
  150.                   display(tmp());
  151.           }
  152.         if(temp>=310)         //當(dāng)溫度超過(guò)31度(僅作試驗(yàn)用,實(shí)際可設(shè)為其他更高的值),蜂鳴器便會(huì)報(bào)警。
  153.                 {
  154.                         P1=0x00;
  155.                         beep=0;
  156.                 }
  157.                 else
  158.                 {
  159.                         beep=1;
  160.                         P1=0xff;
  161.                 }
  162.   } while(1);
  163. }
復(fù)制代碼


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

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 久久久久久国产精品三区 | 黄片毛片免费看 | 亚洲精品一二三 | 久久久久久久久久久久91 | 综合久| 欧美日本在线 | 国产精品久久一区二区三区 | 国产精品久久久乱弄 | 国产精品美女久久久久久久网站 | 国产一区二区电影 | 欧美亚洲国语精品一区二区 | 国产精品一区二区视频 | 国产精品久久久久久久岛一牛影视 | 91精品国产综合久久精品图片 | 日韩中文字幕av | 九九亚洲| 91视频网 | 日韩福利片 | 欧美日韩国产精品激情在线播放 | 亚洲欧美国产视频 | jav成人av免费播放 | 二区欧美 | 国产国语精品 | 久久精品国产一区二区电影 | 亚洲精品国产精品国自产在线 | 国产免费一区二区 | 天天色天天色 | av网址在线| 国产精品欧美一区二区三区不卡 | 91精品国产91久久久久久吃药 | jlzzjlzz国产精品久久 | 性色av一区二区三区 | 成人看片在线观看 | 狠狠爱综合 | 亚洲一区二区三 | 久久蜜桃av一区二区天堂 | 久久视频免费观看 | 欧美激情精品久久久久久变态 | 精品国产乱码久久久久久果冻传媒 | 欧美视频免费在线观看 | 日韩精品成人一区二区三区视频 |