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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

ds18b20+揚聲器做的簡易溫度報警(仿真+源碼)

[復制鏈接]
跳轉到指定樓層
樓主
ds18b20+揚聲器做的簡易溫度報警(仿真+源碼)仿真再附上的圖片里
源碼比較簡單,就是檢測溫度是否達到31度,是的話就啟動揚聲器

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




單片機源程序如下:

  1. /*******************************************************************************
  2. 程序功能:實時采集當前環境溫度值,并顯示于數碼管上。
  3.                   同時,當溫度高于某一值時(此處設為31攝氏度),蜂鳴器便會發出報警。
  4.                   而當低于該值時,蜂鳴器自動停止報警。
  5.                   試驗時,可用手觸摸DS18B20,使其溫度升高到31度,觀察現象。
  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);   //讀出的數據最低位在最前面,這樣剛好一個字節在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];                //顯示個位
  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)         //當溫度超過31度(僅作試驗用,實際可設為其他更高的值),蜂鳴器便會報警。
  153.                 {
  154.                         P1=0x00;
  155.                         beep=0;
  156.                 }
  157.                 else
  158.                 {
  159.                         beep=1;
  160.                         P1=0xff;
  161.                 }
  162.   } while(1);
  163. }
復制代碼


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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 精品亚洲一区二区三区四区五区 | 国产免费一区二区三区免费视频 | 日韩精品在线视频免费观看 | 国产在线精品一区二区 | 亚洲第一网站 | 久久久久久久久91 | 伊人狠狠 | 国产精品一区二区三区在线 | 国产精华一区 | 久久成人精品视频 | 一级做a爰片性色毛片视频停止 | 欧美网址在线观看 | 欧美五月婷婷 | 欧美精品欧美精品系列 | 欧美久久视频 | 正在播放国产精品 | 国产男女精品 | 拍拍无遮挡人做人爱视频免费观看 | 亚洲精品久久嫩草网站秘色 | 91精品国产色综合久久 | 亚洲专区在线 | 亚洲综合色丁香婷婷六月图片 | 中文字幕一区二区三区四区五区 | av一级 | 综合久久综合久久 | 伊人久久综合 | 亚洲啊v在线 | 一级免费毛片 | 午夜专区 | 免费精品 | 精品一区二区三区四区 | 久久久精品综合 | 欧美一区二区三区在线 | 亚洲精品二区 | 日本a网站| 欧美亚洲免费 | 午夜激情影院 | 伊人久久伊人 | 国产精品一区二区不卡 | 91精品国产91久久久久久 | 国产9久|