加入星計劃,您可以享受以下權(quán)益:

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴散
  • 作品版權(quán)保護
  • 300W+ 專業(yè)用戶
  • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
  • 5000+ 長期合作伙伴
立即加入

基于51單片機的智能紅外遙控暖風機設(shè)計

12/11 08:51
665
服務(wù)支持:
技術(shù)交流群

完成交易后在“購買成功”頁面掃碼入群,即可與技術(shù)大咖們分享疑惑和經(jīng)驗、收獲成長和認同、領(lǐng)取優(yōu)惠和紅包等。

虛擬商品不可退

當前內(nèi)容為數(shù)字版權(quán)作品,購買后不支持退換且無法轉(zhuǎn)移使用。

加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論
放大
實物圖
相關(guān)方案
  • 方案介紹
  • 相關(guān)文件
  • 相關(guān)推薦
  • 電子產(chǎn)業(yè)圖譜
申請入駐 產(chǎn)業(yè)圖譜

研究內(nèi)容

1)以單片機為核心設(shè)計一個紅外遙控系統(tǒng)并進行仿真;

2)用紅外遙控器對暖風機進行控制,實現(xiàn)暖風機的開/關(guān),定時,溫度高低的轉(zhuǎn)換等功能;

3)遙控距離可達8~9米。單片機的工作電壓為5V,遙控器為實驗遙控器;

4)利用手機上位機實現(xiàn)智能暖風機的控制;

/******************************************************************************

 ******************************************************************************
*  文 件 名   : ds18b20.c
ds18b20子程序
******************************************************************************/

#include "reg52.h"
#include "ds18b20.h"
#include "delay.h"

#include "intrins.h"

	
sbit DQ=P2^0;
void Delay750us()		//@11.0592MHz
{
	unsigned char i, j;

	_nop_();
	i = 2;
	j = 84;
	do
	{
		while (--j);
	} while (--i);
}
void Delay15us()		//@11.0592MHz
{
	unsigned char i;

	i = 4;
	while (--i);
}
void Delay2us()		//@11.0592MHz
{
	unsigned char i;

	_nop_();
}
void Delay12us()		//@11.0592MHz
{
	unsigned char i;

	i = 3;
	while (--i);
}
void Delay60us()		//@11.0592MHz
{
	unsigned char i;

	i = 25;
	while (--i);
}

void Delay50us()		//@11.0592MHz
{
	unsigned char i;

	_nop_();
	i = 20;
	while (--i);
}

//復(fù)位DS18B20
void DS18B20_Rst(void)	   
{                 
	
    DQ=0; 				//拉低DQ
    Delay750us();    	//拉低750us
    DQ=1; 				//DQ=1 
	Delay15us();     	//15US
}
//從DS18B20讀取一個位
//返回值:1/0
unsigned char DS18B20_Read_Bit(void) 	 
{
    unsigned char dat;
	
    DQ=0; 
	Delay2us();
    DQ=1; 
	
	Delay12us();
	if(DQ)dat=1;
    else dat=0;	 
    Delay50us();           
    return dat;
}
//從DS18B20讀取一個字節(jié)
//返回值:讀到的數(shù)據(jù)
unsigned char DS18B20_Read_Byte(void)     
{        
    unsigned char i,j,dat;
    dat=0;
	for (i=1;i<=8;i++) 
	{
        j=DS18B20_Read_Bit();
        dat=(j<<7)|(dat>>1);
    }						    
    return dat;
}
//寫一個字節(jié)到DS18B20
//dat:要寫入的字節(jié)
void DS18B20_Write_Byte(unsigned char dat)     
 {             
    unsigned char j;
    unsigned char testb;
    for (j=1;j<=8;j++) 
	{
        testb=dat&0x01;
        dat=dat>>1;
        if (testb) 
        {
            DQ=0;	// Write 1
            Delay2us();                      
            DQ=1;
			Delay60us();             
        }
        else 
        {
            DQ=0;	// Write 0
            Delay60us();             
            DQ=1;
            Delay2us();                        
        }
    }
}
 //等待DS18B20的回應(yīng)
//返回1:未檢測到DS18B20的存在
//返回0:存在
unsigned char DS18B20_Check(void) 	   
{   
	unsigned int retry=0;
	 
    while (DQ&&retry<200)
	{
		retry++;
		//delay_us(1);
		_nop_();
	};	 
	if(retry>=200)return 1;
	else retry=0;
    while (!DQ&&retry<240)
	{
		retry++;
		_nop_();
		//delay_us(1);
	};
	if(retry>=240)return 1;	    
	return 0;
}
 //開始溫度轉(zhuǎn)換
void DS18B20_Start(void) 
{   						               
    DS18B20_Rst();	   
	delay_ms(100);
    DS18B20_Write_Byte(0xcc);	// skip rom
    DS18B20_Write_Byte(0x44);	// convert
} 
unsigned char DS18B20_Init(void)
{
	DQ = 1;
	DS18B20_Rst();

	return DS18B20_Check();
}
//從ds18b20得到溫度值
//精度:0.1C
//返回值:溫度值 (-550~1250) 
short DS18B20_Get_Temp(void)
{
    unsigned char temp;
    unsigned char TL,TH;
	short tem;
    DS18B20_Start ();  			// ds1820 start convert
	delay_ms(100);
	
    DS18B20_Rst();
    DS18B20_Check();	 
    DS18B20_Write_Byte(0xcc);	// skip rom
    DS18B20_Write_Byte(0xbe);	// convert	    
    TL=DS18B20_Read_Byte(); 	// LSB   
    TH=DS18B20_Read_Byte(); 	// MSB  
	    	  
    if(TH>7)
    {
        TH=~TH;
        TL=~TL; 
        temp=0;					//溫度為負  
    }else temp=1;				//溫度為正	  	  
    tem=TH; 					//獲得高八位
    tem<<=8;    
    tem+=TL;					//獲得底八位
    tem=(float)tem*0.625;		//轉(zhuǎn)換     
	if(temp)return tem; 		//返回溫度值
	else return -tem;    
}

//void delay(unsigned int count)
//{									
//	unsigned int i;	
//	while (count)	
//	{
//		i =200;
//		while (i>0) i--;
//		count--;
//    }
//}
///************************************************************************
//* 函數(shù): void Ds18b20_Init(void)
//* 描述: 初始化DS18B20
//* 參數(shù): none.
//* 返回: none.
//************************************************************************/
//void Ds18b20_Init (void)			 // 發(fā)送復(fù)位和初始化
//{
//	unsigned int i;
//	DQ = 0;	
//	i = 103;
//	while (i>0) i--;         		 // 延時
//	DQ = 1;	
//	i = 4;	
//	while (i>0) i--;	
//}
///************************************************************************
//* 函數(shù): bit Ds18b20_Read_OneBit(void)
//* 描述: 讀DS18B20數(shù)據(jù)的一位
//* 參數(shù): none.
//* 返回: 讀到的一位數(shù)據(jù)
//************************************************************************/
//bit Ds18b20_Read_OneBit(void)		// 讀取數(shù)據(jù)的一位
//{ 	
//	unsigned int i;
//	bit dat;
//	DQ = 0; i++;	
//	DQ = 1; i++; i++;				//延時	
//	dat =DQ;	
//	i = 8; while (i>0) i--;			// 延時
//	return (dat);
//}	
///************************************************************************
//* 函數(shù): unsigned char Ds18b20_Read(void)
//* 描述: 讀DS18B20一個字節(jié)
//* 參數(shù): none.
//* 返回: value:讀到的數(shù)據(jù)
//************************************************************************/
//unsigned char Ds18b20_Read(void)	 //讀DS18B20一個字節(jié)
//{
//	unsigned char i,j,dat;	
//	dat = 0;	
//	for (i=1;i<=8;i++)
//	{
//		j = Ds18b20_Read_OneBit ();	
//		dat = (j << 7) | (dat >> 1);	
//	}
//	return (dat);
//}	
///************************************************************************
//* 函數(shù): void Ds18b20_Write(unsigned char dat)
//* 描述: 寫DS18B20一個字節(jié)
//* 參數(shù): 要寫的數(shù)據(jù)
//* 返回: none.
//************************************************************************/
//void Ds18b20_Write(unsigned char dat)
//{   
//	unsigned int i;
//	unsigned char j;
//	bit testb;	
//	for (j=1;j<=8;j++)
//	{	
//		testb = dat & 0x01;
//		dat = dat >> 1;	
//		if (testb)
//		{	
//			DQ = 0; 						// 寫0 
//			i++; i++;  
//			DQ = 1;	
//			i = 8; while (i>0) i--; 
//		}
//		else	
//		{
//			DQ = 0; 						// 寫0 
//			i = 8; while (i>0) i--; 
//			DQ = 1;
//			i++; i++;  
//		}
//	}
//}
///************************************************************************
//* 函數(shù): short Ds18b20_ReadTemp()
//* 描述: 讀取溫度
//* 參數(shù): none.
//* 返回: temp:溫度   -550  1250
//* 備注: 精度:0.1C   
//************************************************************************/
//short Ds18b20_ReadTemp()			// 讀取溫度
//{ 
//	unsigned char flag;        		//溫度正負標志位             
//	unsigned char TL,TH;
//	short temp;
//	Ds18b20_Init ();				// 復(fù)位
//	delay (1);						// 延時
//	Ds18b20_Write (0xcc);			// 跳過序列號命令   skip rom命令
//	Ds18b20_Write (0x44); 			// 發(fā)轉(zhuǎn)換命令 44H,  ds1820 開始轉(zhuǎn)換
//	Ds18b20_Init ();				// 復(fù)位
//	delay (1);						// 延時
//	Ds18b20_Write (0xcc); 			// 跳過序列號命令
//	Ds18b20_Write (0xbe);			// 發(fā)送讀取命令
//	TL=Ds18b20_Read();				// LSB  溫度值低位字節(jié)(其中低4位為二進制的"小數(shù)"部分)
//	TH=Ds18b20_Read(); 				// MSB  高位值高位字節(jié)(其中高5位為符號位)

//	if(TH>7)
//	{
//		
//		TH=~TH;
//		TL=~TL;
//		flag = 0;					//溫度為負
//	}else
//		flag = 1;					//溫度為正
//	
//	temp=TH;
//	temp<<=8;
//	temp+=TL;
//	temp=(float)temp*0.625;
//	if(flag)	return(temp);		//溫度為正
//	else 		return(-temp);
//}

資料借鑒于此紛傳

  • 有需要資料的可了解一下.docx

相關(guān)推薦

電子產(chǎn)業(yè)圖譜