• 方案介紹
  • 附件下載
  • 相關(guān)推薦
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

基于51單片機(jī)的窗戶控制【濕度,步進(jìn)電機(jī),LCD1602】(仿真)

2024/12/10
1611
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

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

共1個(gè)文件

要求:

1、測(cè)量溫濕度。

2、設(shè)置濕度閥值,濕度過(guò)高自動(dòng)關(guān)窗。

3、顯示屏用LM016L。

4、有自動(dòng)和手動(dòng)模式?;?2單片機(jī)的下雨自動(dòng)關(guān)窗控制系統(tǒng),顯示屏用LM016L。有報(bào)警功能,按鍵調(diào)節(jié)閥值。有自動(dòng)和手動(dòng)模式。

#include "DHT11.h"

unsigned char dht11_dat[5];//濕度高低+溫度高低+和校驗(yàn)

void delay1ms(unsigned int i) //延時(shí)函數(shù)
{ 
unsigned char j; 
 while(i--)
 {
	for(j=0;j<110;j++);
 }
}

void dht11_recive()//接收
{
unsigned char j,k,m;
unsigned int i;
  SDA=0;
  delay1ms(30);//開(kāi)始信號(hào)20ms
  SDA=1;
  for(i=0;i<1000;i++)//等待響應(yīng)
  {
  if(!SDA)
  	break;
  }
  if(i==1000)
  {	
    SDA=1;
   	return;//如果沒(méi)有響應(yīng),返回
  }
  for(i=0;i<1000;i++)//等待響應(yīng)結(jié)束
  {
  if(SDA)
  	break;
  }
  if(i==1000)
  {
    SDA=1;
   	return;//如果響應(yīng)超時(shí),返回
  }
  for(i=0;i<1000;i++)//等待開(kāi)始
  {
  if(!SDA)
  	break;
  }
  if(i==1000)
  {	
    SDA=1;
   	return;//如果沒(méi)有響應(yīng),返回
  }
for(k=0;k<5;k++) //接收5個(gè)數(shù)據(jù)
	{
	for(j=0;j<8;j++)//接收8位
		{ 
			m<<=1;
			//===========================
		  for(i=0;i<1000;i++)//等待0信號(hào)結(jié)束
  			{
  			if(SDA)
  				break;
  			}
  			if(i==1000)
  			{	
    			SDA=1;
   				return;//如果超時(shí),返回
  			}
			//===========================
		   for(i=0;i<1000;i++)//等待開(kāi)始信號(hào)
  			{
  			if(!SDA)
  				break;
  			}
  			if(i==1000)
  			{
    			SDA=1;
   				return;//如果超時(shí),返回
  			}
			if(i<5)
				m++;
		}
		dht11_dat[k]=~m;
	}
	delay1ms(1);	  	
} 
#include "lcd1602.h"

void delay_uint(uint i)
{
	while(i--);
}
/********************************************************************
* 名稱(chēng) : write_com(uchar com)
* 功能 : 1602命令函數(shù)
* 輸入 : 輸入的命令值
* 輸出 : 無(wú)
***********************************************************************/
void write_com(uchar com)
{
	e=0;
	rs=0;
	rw=0;
	P0=com;
	delay_uint(20);
	e=1;
	delay_uint(20);
	e=0;
}

/********************************************************************
* 名稱(chēng) : write_data(uchar dat)
* 功能 : 1602寫(xiě)數(shù)據(jù)函數(shù)
* 輸入 : 需要寫(xiě)入1602的數(shù)據(jù)
* 輸出 : 無(wú)
***********************************************************************/
void write_data(uchar dat)
{
	e=0;
	rs=1;
	rw=0;
	P0=dat;
	delay_uint(20);
	e=1;
	delay_uint(20);
	e=0;	
}

/********************************************************************
* 名稱(chēng) : write_string(uchar hang,uchar add,uchar *p)
* 功能 : 改變液晶中某位的值,如果要讓第一行,第五個(gè)字符開(kāi)始顯示"ab cd ef" ,調(diào)用該函數(shù)如下
	 	 write_string(1,5,"ab cd ef;")
* 輸入 : 行,列,需要輸入1602的數(shù)據(jù)
* 輸出 : 無(wú)
***********************************************************************/
void write_string(uchar hang,uchar add,uchar *p)
{
	if(hang==1)   
		write_com(0x80+add);
	else
		write_com(0x80+0x40+add);
		while(1)
		{
			if(*p == '?')  break;
			write_data(*p);
			p++;
		}	
}

/********************************************************************
* 名稱(chēng) : init_1602()
* 功能 : 初始化1602液晶 
* 輸入 : 無(wú)
* 輸出 : 無(wú)
***********************************************************************/
void init_1602()
{
	write_com(0x38);						//數(shù)據(jù)總線為8位,顯示2行,5x7點(diǎn)陣
	write_com(0x0c);						//開(kāi)顯示,有光標(biāo),光標(biāo)閃爍
	write_com(0x06);						//光標(biāo)自動(dòng)右移
	delay_uint(1000);						//等待設(shè)置完成
}

資料借鑒于此?紛傳

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

相關(guān)推薦

方案定制

去合作
方案開(kāi)發(fā)定制化,2000+方案商即時(shí)響應(yīng)!