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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2054|回復: 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 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美xxxx色视频在线观看免费 | 亚洲日韩欧美一区二区在线 | 国产精品久久久久一区二区三区 | 欧美激情一区二区三区 | 欧美日韩成人 | 在线观看精品视频网站 | 国产精品成人久久久久 | 夜夜摸夜夜操 | 国产日韩欧美在线 | 日韩精品在线观看一区二区三区 | 国产精品久久久久久妇女6080 | 亚洲黄色一区二区三区 | 18性欧美| 91xxx在线观看 | 亚洲精品乱码 | 国产精品久久av | 91九色在线观看 | 日韩av最新网址 | 黑人巨大精品欧美一区二区免费 | 日本成人免费观看 | 国产高清在线 | 国产精品永久 | 精品国产久 | 日韩av一区二区在线观看 | 久草网站 | 在线观看av网站永久 | 国产日韩欧美一区二区 | 亚洲成人日韩 | 免费性视频 | 国产精品视频网站 | 成人综合视频在线观看 | 一区二区国产精品 | 国产一区久久久 | 7799精品视频天天看 | 欧美日韩一区二区三区不卡视频 | 99精品视频在线 | 九九热这里只有精品在线观看 | 国产精品高清一区二区 | 精品国产乱码久久久久久牛牛 | 国产在线视频一区二区董小宛性色 | 中文字幕免费视频 |