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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

基于單片機的 遠程溫度監控系統

[復制鏈接]
跳轉到指定樓層
樓主
此商品已被刪除
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:1 發表于 2015-1-17 11:21 來自手機 | 只看該作者
這個設計不錯。
回復

使用道具 舉報

板凳
ID:71870 發表于 2015-1-17 18:44 | 只看該作者


本設計中設定報警上限溫度30℃,報警下限溫度20℃。圖中分別是溫度超過30℃和低于20℃時LED燈模擬制冷和制熱系統開啟,并且蜂鳴器報警。



附錄2:單片機程序

#include<reg52.h>#define uchar unsigned char#define uint unsigned intsbit d1=P2^2;sbit d2=P2^1;sbit d3=P2^0;sbit d4=P2^3;sbit key1=P1^3;sbit key2=P1^4;sbit key3=P1^5;sbit led1=P1^0;sbit led2=P1^1;sbit baojing=P1^6;sbit DS=P1^2;sbit ACC_7=ACC^7;uint count=300,alarm=200;  //最初溫度上下限值:30度、20度uchar shu;uchar shi,fen,ri,yue,nian,xq,miao,ss;       uint temp;             // 定義溫度變量uchar flag;uchar code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};  //共陽數碼管不帶小數點的0~9編碼uchar code tab1[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10}; //帶小數點的0~9編碼void send_int(void){   TMOD = 0x21;              // 定時器1工作于8位自動重載模式, 用于產生波特率               TH1 = 0xfd;          // 波特率9600               TL1 = 0xfd;    TH0=0xD8;           //定時器0定時10ms    TL0=0xF0;    ET0=1;               //允許定時器0中斷    ES=1;                //允許串口中斷    EA=1;                //開中斷SCON = 0xd8;                  // 設定串行口工作方式     PCON = 0x00;                 // 波特率不倍增} void delay(uint z){               uint x,y;               for(x=z;x>0;x--)                               for(y=120;y>0;y--);}void dsreset()   //復位{                     uint i;               DS=0;               i=103;               while(i>0)i--;               DS=1;               i=4;               while(i>0)i--;}uchar tmpread()   //讀取一字節{               uchar j,k,dat;               uint i;    for(j=1;j<=8;j++)    {                   DS=0;i++;          //延時                   DS=1;i++;i++;                               k=DS;                   i=8;while(i>0)i--;                               dat=(k<<7)|(dat>>1);//讀出的數據最低位在最前面存一個字節在DAT里      }     return(dat);}void tmpwritebyte(uchar dat)   //寫一個字節{    uint i;    uchar j;    bit testb;    for(j=1;j<=8;j++)    {                   testb=dat&0x01;                   dat=dat>>1;                   if(testb)     //寫 1                                   {                                     DS=0;                                     i++;i++;                                     DS=1;                                     i=8;while(i>0)i--;                                   }    else    {               DS=0;       //寫 0               i=8;while(i>0)i--;               DS=1;               i++;i++;    }  }}void tmpchange()  //DS18B20溫度變換{               dsreset();               delay(1);               tmpwritebyte(0xcc);  //跳過讀取內存rom               tmpwritebyte(0x44);  //開始轉換}uint tmp()               //讀取溫度{               float tt;               uchar a,b;               dsreset();               delay(1);               tmpwritebyte(0xcc);               tmpwritebyte(0xbe);               a=tmpread(); //a為低字節8位               b=tmpread(); //b為高字節8位               temp=b;     //temp為溫度值UINT 16bit               temp<<=8;             //兩個字節組合到一起               temp=temp|a;                   if(b>127)               {               flag=1;               ss=flag;               temp=~temp+1;               }               tt=temp*0.0625; // temp/16 則是溫度的真實值tt.7位整數,4位小數               temp=tt*10+0.5; // 擴大十倍取出了第一位小數               return(temp);} /*****溫度顯示********/void displayTemp(uint temp)   {               uchar ge,shi,bai,qian,ser;               d1=0;               d1=0;               d3=0;               d4=0;               dsreset();               ser=temp/10;     //分離出三位要顯示的數字                SBUF=ser;               qian=temp/1000;               bai=temp/100%10; // 百位數字               shi=temp/10%10;   // 十位數字               ge=temp%10;   // 個位數字               if(flag==1)               {                               flag=0;                               P0=0xbf;                               d1=1;                               delay(2);                               d1=0;               }               if(qian!=0)               {                               P0=tab[qian];                               d1=1;                               delay(2);                               d1=0;                     }               else               {                               P0=0xff;                               d1=1;                               delay(2);                               d1=0;                     }               if(temp>99)               {                               P0=tab[bai];                               d2=1;                               delay(2);                               d2=0;               }                               P0=tab1[shi];                               d3=1;                               delay(2);                               d3=0;                               P0=tab[ge];                               d4=1;                               delay(2);                               d4=0;} /****按鍵控制******/uint keyscan(){               if(key1==0)                 //按鍵1               {                               delay(5);                               if(key1==0)                                         {                                              while(!key1);                                                   shu++;            //按鍵1數按下次數                               }               }                                              if(key2==0)       //按鍵2                                              {                                                             delay(5);                                                             if(key2==0)                                                             {                                                                            while(!key2);                                                                               count=count+10; //溫度上限值加1                                                                            if(shu==2)      //按鍵1按下2次                                                                            {                                                                                            alarm+=10;  //溫度下限值加1                                                                            }                                                              }                                              }                                              if(key3==0)             //按鍵3                                              {                                                             delay(5);                                                             if(key3==0)                                                             {                                                                            while(!key3);                                                                            count=count-10; //溫度上限值減1                                                                                            if(shu==2)  //按鍵1按下2下                                                                            {                                                                                            alarm-=10;  //溫度下限值減1                                                                            }                                                             }                                              }               return(count);} /*****報警控制******/void main(){                led1=1;               led2=1;               delay(10);               while( 1 )                {               tmpchange();               if(shu==0)               {                               displayTemp(tmp( ));               }               keyscan();               if(shu==1)                               {                                              displayTemp(count);                               }               if(shu==2)               {                                              displayTemp(alarm);                               }               if(shu==3)               {                               shu=0;                                    }               if(temp>count)                {                led1=0;baojing=0;                }    else if(temp<alarm)                {               led2=0;baojing=0;                }   else   {   led1=1;   led2=1;   baojing=1;   }               }}



回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 黄色在线免费看 | 欧美日韩亚洲一区 | 国产伦一区二区三区 | 精品久久网 | 在线日韩福利 | 国产一区二区黑人欧美xxxx | 在线观看国产精品一区二区 | 欧美一级特黄aaa大片在线观看 | 四虎影视1304t| 九九热在线免费视频 | 99re视频在线观看 | 欧州一区二区三区 | 在线视频亚洲 | 亚洲久草| 欧美精品一区二区三区在线 | 亚洲国产一区在线 | 伊人一二三 | 成人激情视频在线播放 | 国产一区视频在线 | 欧美福利视频 | 国产精品久久国产精品 | 一级片免费视频 | 精品久久香蕉国产线看观看亚洲 | 国产99精品 | 久久久久久久久淑女av国产精品 | 爱爱视频在线观看 | 亚洲精选一区二区 | 国产视频导航 | 久久三区 | 毛片区 | 韩三级在线观看 | 久久这里只有精品首页 | 国产区在线 | 91在线一区 | 久久国产精品99久久久久久丝袜 | 国产99免费视频 | 欧美日韩亚洲在线 | 日韩在线| 北条麻妃一区二区三区在线视频 | 午夜精品久久久久久久久久久久久 | 精品少妇一区二区三区在线播放 |