單片機(jī)溫濕度報(bào)警原理圖
                        2021-12-06
                     
                    
    
單片機(jī)溫濕度報(bào)警原理圖

單片機(jī)溫濕度報(bào)警原理圖
	- #include <AT89X52.h>
 
	- #define uint unsigned int
 
	- #define uchar unsigned char           //宏定義
 
	- #define SET  P3_1                            //定義調(diào)整鍵
 
	- #define DEC  P3_2                            //定義減少鍵
 
	- #define ADD  P3_3                            //定義增加鍵
 
	- #define BEEP P3_6                            //定義蜂鳴器
 
	- #define ALAM P1_2                                //定義燈光報(bào)警
 
	- #define DQ   P3_7                             //定義DS18B20總線I/O        
 
	- bit shanshuo_st;                            //閃爍間隔標(biāo)志
 
	- bit beep_st;                                     //蜂鳴器間隔標(biāo)志
 
	- sbit DIAN = P0^5;                        //小數(shù)點(diǎn)
 
	- uchar x=0;                                      //計(jì)數(shù)器
 
	- signed char m;                                     //溫度值全局變量
 
	- uchar n;                                              //溫度值全局變量
 
	- uchar set_st=0;                             //狀態(tài)標(biāo)志
 
	- signed char shangxian=38;                  //上限報(bào)警溫度,默認(rèn)值為38
 
	- signed char xiaxian=5;                   //下限報(bào)警溫度,默認(rèn)值為38
 
	- //uchar code  LEDData[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xff};
 
	- //uchar code  LEDData[]={0x5F,0x44,0x9D,0xD5,0xC6,0xD3,0xDB,0x47,0xDF,0xD7,0xCF,0xDA,0x9B,0xDC,0x9B,0x8B};
 
	-     uchar code  LEDData[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x39};//共陰數(shù)碼管字碼表0~9 c
 
	-  
 
	- //
 
	- //
 
	- //
 
	- /*****延時(shí)子程序*****/
 
	- void Delay_DS18B20(int num)
 
	- {
 
	-   while(num--) ;
 
	- }
 
	- /*****初始化DS18B20*****/
 
	- void Init_DS18B20(void)
 
	- {
 
	-   unsigned char x=0;
 
	-   DQ = 1;         //DQ復(fù)位
 
	-   Delay_DS18B20(8);    //稍做延時(shí)
 
	-   DQ = 0;         //單片機(jī)將DQ拉低
 
	-   Delay_DS18B20(80);   //精確延時(shí),大于480us
 
	-   DQ = 1;         //拉高總線
 
	-   Delay_DS18B20(14);
 
	-   x = DQ;           //稍做延時(shí)后,如果x=0則初始化成功,x=1則初始化失敗
 
	-   Delay_DS18B20(20);
 
	- }
 
	- /*****讀一個(gè)字節(jié)*****/
 
	- unsigned char ReadOneChar(void)
 
	- {
 
	-   unsigned char i=0;
 
	-   unsigned char dat = 0;
 
	-   for (i=8;i>0;i--)
 
	-   {
 
	-     DQ = 0;     // 給脈沖信號(hào)
 
	-     dat>>=1;
 
	-     DQ = 1;     // 給脈沖信號(hào)
 
	-     if(DQ)
 
	-     dat|=0x80;
 
	-     Delay_DS18B20(4);
 
	-   }
 
	-   return(dat);
 
	- }
 
	- /*****寫一個(gè)字節(jié)*****/
 
	- void WriteOneChar(unsigned char dat)
 
	- {
 
	-   unsigned char i=0;
 
	-   for (i=8; i>0; i--)
 
	-   {
 
	-     DQ = 0;
 
	-     DQ = dat&0x01;
 
	-     Delay_DS18B20(5);
 
	-     DQ = 1;
 
	-     dat>>=1;
 
	-   }
 
	- }
 
	- /*****讀取溫度*****/
 
	- unsigned int ReadTemperature(void)
 
	- {
 
	-   unsigned char a=0;
 
	-   unsigned char b=0;
 
	-   unsigned int t=0;
 
	-   float tt=0;
 
	-   Init_DS18B20();
 
	-   WriteOneChar(0xCC);  //跳過讀序號(hào)列號(hào)的操作
 
	-   WriteOneChar(0x44);  //啟動(dòng)溫度轉(zhuǎn)換
 
	-   Init_DS18B20();
 
	-   WriteOneChar(0xCC);  //跳過讀序號(hào)列號(hào)的操作
 
	-   WriteOneChar(0xBE);  //讀取溫度寄存器
 
	-   a=ReadOneChar();     //讀低8位
 
	-   b=ReadOneChar();    //讀高8位
 
	-   t=b;                                   //高8位轉(zhuǎn)移到t
 
	-   t<<=8;                           //t數(shù)據(jù)左移8位
 
	-   t=t|a;                           //將t和a按位或,得到一個(gè)16位的數(shù)
 
	-   tt=t*0.0625;                   //將t乘以0.0625得到實(shí)際溫度值(溫度傳感器設(shè)置12位精度,最小分辨率是0.0625)
 
	-   t= tt*10+0.5;     //放大10倍(將小數(shù)點(diǎn)后一位顯示出來)輸出并四舍五入
 
	-   return(t);                   //返回溫度值
 
	- }
 
	- //
 
	- //
 
	- //=
 
	-  
 
	-  
 
	- /*****延時(shí)子程序*****/
 
	- void Delay(uint num)
 
	- {
 
	- while( --num );
 
	- }
 
	- /*****初始化定時(shí)器0*****/
 
	- void InitTimer(void)
 
	- {
 
	-         TMOD=0x1;
 
	-         TH0=0x3c;
 
	-         TL0=0xb0;     //50ms(晶振12M)
 
	- }
 
	-  
 
	- /*****讀取溫度*****/
 
	- void check_wendu(void)
 
	- {
 
	-         uint a,b,c;
 
	-         c=ReadTemperature();                          //獲取溫度值
 
	-         a=c/100;                                                     //計(jì)算得到十位數(shù)字
 
	-         b=c/10-a*10;                                            //計(jì)算得到個(gè)位數(shù)字