324 基于单片机温湿度 DHT11智能晾衣架系统【毕设课设】

选题背景与意义


可预见单片机的发展趋势将是向大容量、高性能话、外围电路内装化等方面发展,也就是对CPU、存储器、片内I/O的改进,低功耗,特别是系统的单片机是目前单片机发展的重要趋势。而从目前国内对单片机的需求来看:在未来几年里,8位、16位单片机将是单片机的发展主流,它的新发展表现在:(1)CPU功能的增加 (2)内部资源的增多 (3)引脚的多功能化 (4)低电压、低功耗。

正因为单片机有着如此多的优点,单片机在工业控制中和家用电器等上的应用中独占鳌头,故又称为微控制器(Microcontroller)

1、因为它具有“小、轻、廉、省”的特点,尤其耗电少,又可使供电电源的体积小、重量轻,所以特别适用于“电脑型产品”,在家电、玩具、游戏机、声像设备、电子秤、收银机、办公设备、厨房设备等许多产品上得到应用。

2、适用于仪器仪表,不仅能完成测量,还具有处理、监控等功能,易于实现数字化和智能化。

3、广泛应用于打印机、绘图仪等许多计算机外围设备,特别是用于智能终端,可大大减轻主机负担。

4、用于各种工业控制,如温度控制、液面控制、生产线顺序控制等。

上述的归纳还不够完整,但已知单片机的应用已渗透到国民经济的各个领域,极大地推动了计算机技术的普及,而且可以预见,随着单片机性能的进一步提高,它的应用将更趋广泛。它对我国许多产品的升级换代、工厂企业的设备更新都将起着十分巨大的作用。所以利用单片机可以实现较多的功能的前提下降低设计、生产成本。

主要任务
本次课程设计的主要任务是设计基于STC89C51单片机的智能晾衣架。主要功能如下:

1)控制晾衣架的升降。

2)具有限位开关功能。

3)具有无线遥控功能。

4)能够指示运行状态。

5)具有智能模式,可以根据环境光线控制晾衣架的升降

6)具有智能模式,可以根据环境湿度控制晾衣架的升降

完整版 电路图和程序代码 下载地址

https://pan.baidu.com/s/1wOiSriPs2Yn6_JLcZOMWUw?pwd=8888

部分代码展示

#include<reg52.h>
#include<intrins.h>
#include<absacc.h>		//头文件

#define uc unsigned char
#define ui unsigned int

sbit in_go		=	P1^3;
sbit in_back	=	P1^2;//手动前进后退按键 
sbit out_go		=	P3^0;
sbit out_back	=	P3^5;//电机控制输出 
sbit limit_go	=	P3^4;
sbit limit_back	=	P3^6;//前进后退限位开关 
sbit led_go		=	P1^4;
sbit led_back	=	P1^5;//前进后退限位指示灯 
sbit light		=	P1^0;//光线传感器 
sbit change		=	P1^1;//手动自动切换按键(默认自动)  
sbit led_zhishi =	P1^7;
sbit buzz		=	P1^6;

sbit W1=P2^2;
sbit W2=P2^1;
//定义DHT11数据口
sbit DATA = P2^0;

uc U8FLAG,U8temp,U8comdata,U8RH_data_H_temp,U8RH_data_L_temp,U8T_data_H_temp,U8T_data_L_temp,U8checkdata_temp;
uc U8RH_data_H,U8RH_data_L,U8T_data_H,U8T_data_L,U8checkdata;
uc Mode,humidity;
bit bdata FlagStartRH,hot,cold,humid,dry;

bit bdata flag1,flag2,change_flag,flag_shan,flag_shan1,flag_shan2,flag_HH;
uc m,n,shan;

uc code table[11]={	//共阴极字型码
	0x3f,  //--0
	0x06,  //--1
	0x5b,  //--2
	0x4f,  //--3
	0x66,  //--4
	0x6d,  //--5
	0x7d,  //--6
	0x07,  //--7
	0x7f,  //--8
	0x6f,  //--9
	0x00   //--NULL
};


//定时器0初始化
void Timer0_Init()
{
	ET0 = 1;        //允许定时器0中断
	TMOD = 1;       //定时器工作方式选择
	TL0 = 0xb0;     
	TH0 = 0x3c;     //定时器赋予初值
	TR0 = 1;        //启动定时器
	EA=1;
}


void Delay1(ui j)
{
    uc i;
    for(;j>0;j--)
    { 	
		for(i=0;i<27;i++);
    }
} 

void  Delay_10us(void)
{
    uc i;
    i--;
    i--;
    i--;
    i--;
    i--;
    i--;
}	

void  COM(void)
{
    uc i;
    for(i=0;i<8;i++)	   
    {
  	    U8FLAG=2;
	   	while((!DATA)&&U8FLAG++);
		Delay_10us();
		Delay_10us();
		Delay_10us();
  		U8temp=0;
        if(DATA)U8temp=1;
		    U8FLAG=2;
		while((DATA)&&U8FLAG++);
	   	//超时则跳出for循环		  
	   	if(U8FLAG==1)break;
	   	//判断数据位是0还是1	 
	   	   
		// 如果高电平高过预定0高电平值则数据位为 1 
	   	 
		U8comdata<<=1;
	   	U8comdata|=U8temp;        //0
    }//rof
}

//--------------------------------
//-----温湿度读取子程序 ------------
//--------------------------------
//----以下变量均为全局变量--------
//----温度高8位== U8T_data_H------
//----温度低8位== U8T_data_L------
//----湿度高8位== U8RH_data_H-----
//----湿度低8位== U8RH_data_L-----
//----校验 8位 == U8checkdata-----
//----调用相关子程序如下----------
//---- Delay();, Delay_10us();,COM(); 
//--------------------------------
uc RH(void)
{
    //主机拉低18ms 
    DATA=0;
	Delay1(180);  //原来为5
	DATA=1;
	//总线由上拉电阻拉高 主机延时20us
	Delay_10us();
	Delay_10us();
	Delay_10us();
	Delay_10us();
	//主机设为输入 判断从机响应信号 
	DATA=1;
	//判断从机是否有低电平响应信号 如不响应则跳出,响应则向下运行	  
	if(!DATA)		 //T !	  
	{
	    U8FLAG=2;
	    //判断从机是否发出 80us 的低电平响应信号是否结束	 
	    while((!DATA)&&U8FLAG++);
	    U8FLAG=2;
	    //判断从机是否发出 80us 的高电平,如发出则进入数据接收状态
	    while((DATA)&&U8FLAG++);
	    //数据接收状态		 
	    COM();
	    U8RH_data_H_temp=U8comdata;
	    COM();
	    U8RH_data_L_temp=U8comdata;
	    COM();
	    U8T_data_H_temp=U8comdata;
	    COM();
	    U8T_data_L_temp=U8comdata;
	    COM();
	    U8checkdata_temp=U8comdata;
	    DATA=1;
	    //数据校验 
	    U8temp=(U8T_data_H_temp+U8T_data_L_temp+U8RH_data_H_temp+U8RH_data_L_temp);
	    if(U8temp==U8checkdata_temp)
	    {
	   	   U8RH_data_H=U8RH_data_H_temp;
	   	   U8RH_data_L=U8RH_data_L_temp;
	   	   U8T_data_H=U8T_data_H_temp;
	   	   U8T_data_L=U8T_data_L_temp;
	   	   U8checkdata=U8checkdata_temp;
	    }
		return 1;
	}
	else   //传感器不响应
	{
	   return 0;
	}
}


void delay(ui x)//延时函数 
{
	ui i,j;
	for(i=0;i<x;i++)
	for(j=0;j<110;j++);
}

void display()
{
	P0=table[humidity/10];
	W1=0;				
	delay(1);				//延时
	W1=1;				//关显示
						   
	P0=table[humidity%10];
	W2=0;		 
	delay(1);				 //延时
	W2=1;				//关显示
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值