• 基于51单片机智能窗帘仿真设计( proteus仿真+程序+设计报告+讲解视频)


    基于51单片机智能窗帘仿真设计( proteus仿真+程序+设计报告+讲解视频)

    仿真图proteus8.9及以上

    程序编译器:keil 4/keil 5

    编程语言:C语言

    设计编号:S0084

    1. 主要功能:

    基于51单片机的智能窗帘控制器proteus仿真

    1、系统分为自动模式和手动模式,通过按键切换模式;

    2、自动模式下检测光照和温度,如果温度高于25则打开窗帘通风;

    3、电机顺时针转动是正转开窗帘,逆时针转动是反转关窗帘;

    4、温度低于25则根据光线判断,如果光线强度低于30打开窗帘,光线强度高于60关闭窗帘;

    5、手动模式下通过2个按键控制窗帘开启和关闭;

    6、设置一个停止键,用于停止窗帘动作;

    需注意仿真中51单片机芯片是兼容的,AT89C51,AT89C52是51单片机的具体型号,内核是一样的。相同的原理图里,无论stc还是at都一样,引脚功能都是一样的,程序是兼容的,芯片可以替换为STC89C52/STC89C51/AT89C52/AT89C51等51单片机芯片。

    img

    2. 讲解视频:

    讲解视频包含仿真运行讲解和代码讲解

    3. 仿真设计

    打开仿真工程,双击proteus中的单片机,选择hex文件路径,然后开始仿真。开始仿真后LCD1602显示温湿度和光照强度。

    img

    开机默认是自动模式,自动模式指示灯点亮。可以通过按键切换自动/手动模式。手动模式下可以通过按键切换开/关窗帘。

    imgimg

    如果光照强度大于阈值,说明自然光足够亮,不需要开窗帘。当光线强度超过60lux时,窗帘关闭以保持室内适宜亮度;当光线强度低于30(假设单位为lux)时,窗帘自动开启以便充分利用自然光照明。

    4. 程序代码

    使用keil4或者keil5编译,代码有注释,可以结合视频理解代码含义。

    img

    温湿度模块代码

    #include "DHT11.h" 
    
    unsigned char dht11_dat[5];//湿度高低+温度高低+和校验
    
    void delay1ms(unsigned int i) //延时函数
    { 
    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);//开始信号20ms
      SDA=1;
      for(i=0;i<1000;i++)//等待响应
      {
      if(!SDA)
      	break;
      }
      if(i==1000)
      {	
        SDA=1;
       	return;//如果没有响应,返回
      }
      for(i=0;i<1000;i++)//等待响应结束
      {
      if(SDA)
      	break;
      }
      if(i==1000)
      {
        SDA=1;
       	return;//如果响应超时,返回
      }
      for(i=0;i<1000;i++)//等待开始
      {
      if(!SDA)
      	break;
      }
      if(i==1000)
      {	
        SDA=1;
       	return;//如果没有响应,返回
      }
    for(k=0;k<5;k++) //接收5个数据
    	{
    	for(j=0;j<8;j++)//接收8位
    		{ 
    			m<<=1;
    			//===========================
    		  for(i=0;i<1000;i++)//等待0信号结束
      			{
      			if(SDA)
      				break;
      			}
      			if(i==1000)
      			{	
        			SDA=1;
       				return;//如果超时,返回
      			}
    			//===========================
    		   for(i=0;i<1000;i++)//等待开始信号
      			{
      			if(!SDA)
      				break;
      			}
      			if(i==1000)
      			{
        			SDA=1;
       				return;//如果超时,返回
      			}
    			if(i<5)
    				m++;
    		}
    		dht11_dat[k]=~m;
    	}
    	delay1ms(1);	  	
    } 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84

    mian.c代码

    #include
    #include "DHT11.h"
    #include "lcd1602.h"
    #include "ADC0832.h"
    完整代码见文章后面下载链接
    sbit AA=P1^0;//电机
    sbit BB=P1^1;
    sbit CC=P1^2;
    sbit DD=P1^3;
    sbit test=P3^6;
    sbit k1=P3^0;//切换 
    sbit k2=P3^1;//正转
    sbit k3=P3^2;//反转
    sbit k4=P3^3;//停止
    sbit led=P3^7; //手动模式指示灯
    sbit led1=P3^6; //自动模式指示灯
    uchar time=0;
    uchar wen=0,shi=0,guang=0;//温度湿度光照
    uchar xian1[]="wen=00C  shi=50%"; //温度湿度显示
    uchar xian2[]="light=0000Lux";//光照
    uchar mode=0,flag=0;	   
    uchar start=1;//开始
    uchar endflag=0;//停止  
    void delay(uint i)
    {
    	while(i--)
    	{
    	//	key_scan();
    	}
    }
    //开窗
    void open()
    {
    	uchar i;
    	for(i=0;i<10;i++)
    	{
    		BB=1;delay(1000);//正转
    		AA=0;delay(10000);
    		CC=1;delay(10000);
    		BB=0;delay(10000);
    		DD=1;delay(10000);
    		CC=0;delay(10000);
    		AA=1;delay(10000);
    		DD=0;delay(10000);
    		if(!k4)
    			break;
    	}
    	flag=1;
    }
    //关窗
    void close()
    {
    	uchar i;
    	for(i=0;i<10;i++)
    	{
    		DD=1;delay(10000);//反转
    		AA=0;delay(10000);
    		CC=1;delay(10000);
    		DD=0;delay(10000);
    		BB=1;delay(10000);
    		CC=0;delay(10000);
    		AA=1;delay(10000);
    		BB=0;delay(10000);
    		if(!k4)
    			break;
    	}
    	flag=0;
    }
    //主函数
    void main()
    {
    	TMOD|=0X01;//定时器设置
    	TH0=0X3C;
    	TL0=0XB0;	
    	ET0=1;
    	EA=1;
    	TR0=1;
    	init_1602();
    	AA=1;
    	BB=0;
    	CC=0;
    	DD=0;
    	if(mode)  //点亮模式指示LED
    	{
    		led=0;
    	}else	{
    		led1=0;
    	}
    	while(1)
    	{
    		if(!k1)//模式切换
    		{
    			delay(1000);//防抖
    			if(!k1)
    			{
    			mode=!mode;
    			if(mode)  //点亮LED
    			{
    				led=0;
    				led1=1;
    			}
    			else
    			{
    				led=1;
    				led1=0;
    			}
    			start=1;
    			while(!k1);
    			}
    		}
    		if(start)//启动检测
    		{
    		if(mode==0)//自动模式
    		{
    			if(wen<25)//温度小于25
    			{
    				if((guang<30)&&(flag==0))
    				{
    			   		open();//开窗
    				}
    				if((guang>60)&&(flag==1))
    				{
    				    close();//关窗
    				}
    			}
    			else//温度高于25,正转
    			{
    				//正转
    				if(flag==0)
    					open();
    			}
    		}
    		else //手动模式
    		{
    			if(!k3)
    			{
    				//反转
    				close();
    			}
    			if(!k2)
    			{ 
    			   	//正转
    				open();
    			}		
    		}
    		}
    	}
    }
    void Timer0() interrupt 1
    {	
    	if(time<10)
    		time++;
    	else
    	{
    		time=0;
    		dht11_recive();//读取温湿度.
    		wen=dht11_dat[2];
    		shi=dht11_dat[0];
    		guang=ADC();//读取光照
    		xian1[4]=wen/10+0x30;
    		xian1[5]=wen%10+0x30;
    		xian1[13]=shi/10+0x30;
    		xian1[14]=shi%10+0x30;
    		xian2[7]=guang/100+0x30;
    		xian2[8]=guang%100/10+0x30;
    		xian2[9]=guang%10+0x30;
    		write_string(1,0,xian1);//显示
    		write_string(2,0,xian2);
    	}
    	TH0=0X3C;
    	TL0=0XB0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
    • 116
    • 117
    • 118
    • 119
    • 120
    • 121
    • 122
    • 123
    • 124
    • 125
    • 126
    • 127
    • 128
    • 129
    • 130
    • 131
    • 132
    • 133
    • 134
    • 135
    • 136
    • 137
    • 138
    • 139
    • 140
    • 141
    • 142
    • 143
    • 144
    • 145
    • 146
    • 147
    • 148
    • 149
    • 150
    • 151
    • 152
    • 153
    • 154
    • 155
    • 156
    • 157
    • 158
    • 159
    • 160
    • 161
    • 162
    • 163
    • 164
    • 165
    • 166
    • 167
    • 168
    • 169
    • 170
    • 171
    • 172

    5. 设计报告

    8104字设计报告,内容包括硬件设计、软件设计、软硬件框图、调试等

    img

    随着现代科技的飞速进步和物联网技术的广泛应用,智能家居已经成为未来生活的重要趋势之一。在这一背景下,智能窗帘作为智能家居系统中的关键一环,不仅极大地提升了家居生活的便捷性和舒适度,而且对于实现节能环保、优化室内环境品质具有不可忽视的意义。智能窗帘可以根据外界环境的变化自动调节开闭状态,有效控制室内光照强度和温度,从而降低空调和照明设备的能耗,营造出更为宜人的居住环境。

    本课程设计项目正是针对这一领域的需求,以51系列单片机为核心控制器,借助功能强大的Proteus仿真平台进行设计与模拟实现。我们计划开发一款具备双模式切换功能的智能窗帘控制系统,该系统能够灵活地在自动模式和手动模式之间切换,以适应用户在不同场景下的使用需求。

    6. 原理图

    AD格式原理图。

    img

    7. 设计资料内容清单

    资料设计资料包括仿真,程序代码、讲解视频、功能要求、设计报告、软硬件设计框图等。

    img

    0、常见使用问题及解决方法–必读!!!!

    1、程序

    2、proteus仿真

    3、功能要求

    4、软硬件流程图

    5、开题报告

    6、设计报告

    7、原理图

    8、讲解视频

    Altium Designer 安装破解

    KEIL+proteus 单片机仿真设计教程

    KEIL安装破解

    Proteus元器件查找

    Proteus安装

    Proteus简易使用教程

    单片机学习资料

    相关数据手册

    答辩技巧

    设计报告常用描述

    鼠标双击打开查找嘉盛单片机51 STM32单片机课程毕业设计.url

    资料下载链接:

    https://docs.qq.com/doc/DS1VnVFJLRWFReGZ6

  • 相关阅读:
    ssm+教务信息管理 毕业设计-附源码161124
    设计模式之观察者模式
    深入淺出 Spring Boot 多重設定檔管裡 (Spring Profiles)
    R语言survival包clogit函数构建条件logistic回归模型、summary函数查看模型汇总统计信息、通过似然比检验分析结果判断模型有无统计学意义
    Redis List常用命令
    How do I redirect Tornado shell ouptput?
    RabbitMQ的安装与使用
    springboot 整合es
    vscode ssh 免密连接
    Apache Doris 是什么
  • 原文地址:https://blog.csdn.net/weixin_52733843/article/details/138068548