1917 基于单片机的智能窗帘控制系统设计(仿真、程序、原理图)【毕设课设】

摘要:

本文详细阐述了基于单片机的智能窗帘控制系统的设计。该系统集成了万年历时间显示、温度与烟雾超标报警、手动与定时控制窗帘以及光强控制窗帘等多项功能。通过使用89C51单片机为核心控制器,结合Protues和Altium Designer软件进行电路设计与仿真,运用C语言进行程序编写,实现了智能窗帘的自动化与智能化控制。

一、引言

随着智能家居的快速发展,智能窗帘作为家庭自动化的重要组成部分,受到了广泛关注。基于单片机的智能窗帘控制系统以其低成本、高可靠性和易于扩展等优点,成为市场上的热门选择。本文旨在介绍一种基于89C51单片机的智能窗帘控制系统的设计方案,以满足不同用户的需求。

二、系统功能说明

  1. 万年历时间显示:系统能够实时显示年、月、周、日、时、分、秒等信息,并具备掉电记忆功能,确保再次上电时无需重新调整时间。
  2. 温度显示与超标报警:系统通过温度传感器实时检测室内温度,并在显示屏上显示。用户可设置温度报警阈值,当温度超过设定值时,系统将发出报警提示。
  3. 烟雾超标报警:系统配备烟雾传感器,用于检测室内烟雾浓度。当烟雾浓度超过设定的报警阈值时,系统将触发报警机制,提醒用户注意火灾等安全隐患。
  4. 手动控制窗帘:用户可通过按键手动控制窗帘的开闭状态,实现窗帘的任意位置停留。
  5. 定时控制窗帘:系统支持定时功能,用户可设定特定时间自动开启或关闭窗帘,满足日常作息需求。
  6. 光强控制窗帘:系统通过光敏传感器检测室内光强,并根据用户设定的光强值自动控制窗帘的开闭。同时,当光强低于设定值时,系统将自动开启LED照明设备,提供足够的照明。

三、按键功能说明

系统配备了五个按键,用于实现不同的控制功能:

  1. KEY1:用于进入一级设置菜单和二级设置菜单的选择与切换。
  2. KEY2:在一级设置菜单中用于下翻菜单,在二级设置菜单中用于增加当前选择参数的设置值,以及在手动模式下控制电机逆时针转动。
  3. KEY3:在一级设置菜单中用于上翻菜单,在二级设置菜单中用于减少当前选择参数的设置值,以及在手动模式下控制电机顺时针转动。
  4. KEY4:用于退出当前所处的菜单。
  5. KEY5:用于切换手动和自动模式。

四、器件介绍

  1. 89C51单片机:作为系统的核心控制器,负责接收按键输入、处理传感器数据、控制窗帘电机和LED照明等设备。
  2. 按键模块:提供五个按键输入,用于用户与系统的交互。
  3. 显示模块:采用数码管或液晶显示屏,用于显示时间、温度等信息。
  4. 温度传感器:用于实时检测室内温度。
  5. 烟雾传感器:用于检测室内烟雾浓度。
  6. 光敏传感器:用于检测室内光强。
  7. 窗帘电机:负责窗帘的开闭动作。
  8. LED照明设备:在光强不足时提供照明。

五、89C51单片机技术文档介绍

89C51单片机是一款功能强大的嵌入式系统控制器,具有丰富的I/O端口、定时器/计数器以及中断资源。其技术文档详细描述了单片机的内部结构、引脚功能、指令集、编程方法等内容,为开发者提供了完整的参考资料。

六、Protues和Altium Designer软件使用介绍

  1. Protues软件:是一款电路设计与仿真软件,可用于绘制电路原理图、进行电路仿真和调试。在智能窗帘控制系统的设计中,可以使用Protues进行电路图的绘制和初步的功能验证。
  2. Altium Designer软件:是一款强大的电子设计自动化软件,支持电路原理图设计、PCB布局布线、信号完整性分析等功能。在智能窗帘控制系统的开发中,可以使用Altium Designer进行电路板的详细设计和制作。

七、C语言基础知识介绍

C语言是一种通用、过程式的编程语言,支持结构化编程、词汇变量作用域和递归等功能。在单片机编程中,C语言因其简洁、高效和易读性而受到广泛应用。在智能窗帘控制系统的开发中,需要掌握C语言的基本语法、数据类型、控制结构、函数等基础知识,以便进行程序编写和调试。

八、系统设计与实现

  1. 硬件设计
    首先,我们需要设计电路原理图,明确各个器件之间的连接关系。这包括89C51单片机的引脚分配、按键模块的接口、显示模块的驱动电路、温度传感器、烟雾传感器以及光敏传感器的信号采集电路,还有窗帘电机的驱动电路和LED照明设备的控制电路。在设计中,我们需要考虑信号隔离、电源稳定性以及电磁兼容性等问题,确保系统的稳定性和可靠性。

    接着,我们利用Altium Designer软件进行PCB设计。在PCB设计中,我们需要考虑器件的布局、走线规则、焊接点等因素,以优化电路板的性能和工艺性。完成PCB设计后,我们可以制作电路板,并进行焊接和调试。

  2. 软件设计
    软件设计是整个系统的核心部分,它决定了系统的功能和性能。我们使用C语言进行编程,首先定义单片机的各个引脚的功能,然后编写初始化程序,对单片机进行初始设置。

    接下来,我们编写各个功能模块的程序,包括时间显示、温度检测与报警、烟雾检测与报警、手动控制窗帘、定时控制窗帘以及光强控制窗帘等。在编写程序时,我们需要考虑程序的逻辑结构、数据处理方式以及中断处理机制,以确保系统的正确性和实时性。

    此外,我们还需要编写按键扫描程序,用于检测按键的输入,并根据按键的功能执行相应的操作。在编写按键扫描程序时,我们需要考虑按键的去抖处理和防误操作机制,以提高系统的稳定性和用户体验。

  3. 系统调试与测试
    完成硬件制作和软件编程后,我们需要对系统进行调试和测试。首先,我们检查电路板上的焊接点是否良好,然后连接电源进行上电测试。在测试过程中,我们逐一测试各个功能模块的功能是否正常,是否存在异常现象。如果发现问题,我们需要及时排查并修复。

    当系统通过初步测试后,我们可以进行更复杂的测试,如长时间运行测试、稳定性测试以及功能完整性测试等。通过这些测试,我们可以评估系统的性能和可靠性,并对系统进行优化和改进。

九、总结与展望

本文介绍了一种基于89C51单片机的智能窗帘控制系统的设计方案。通过合理的硬件设计和软件编程,我们实现了万年历时间显示、温度与烟雾超标报警、手动与定时控制窗帘以及光强控制窗帘等多项功能。该系统具有低成本、高可靠性和易于扩展等优点,适用于家庭、办公室等场所的智能化改造。

然而,随着智能家居技术的不断发展,未来我们可以进一步探索更高级的功能和应用场景。例如,我们可以将系统与智能手机进行连接,通过手机APP进行远程控制;我们还可以引入更多的传感器和设备,实现更全面的环境监测和自动化控制。此外,我们还可以考虑使用更先进的单片机和算法,提高系统的性能和智能化水平。

总之,基于单片机的智能窗帘控制系统是一个具有广阔应用前景的领域,值得我们进一步研究和探索。


 

 

 

#include <reg52.h>	   
#define uchar unsigned char 
#define uint  unsigned int	 

sbit beep =P1^5;    //蜂鸣器
sbit LED  =P1^7;    //灯光模块
sbit yw	  =P1^0;    //烟雾模块

sbit SCL =P1^2;		//ADC0832-SCL脚
sbit DO  =P1^3;		//ADC0832-DO脚
sbit CS  =P1^1;		//ADC0832-CS脚

uchar guanxian,guanxian_set = 4;     //光线
uchar flag_kaig_moshi=0;	//开关模式
uchar key_time,flag_value;  //用做连加的中间变量
uchar menu_shudu = 20;  	//用来控制连加的速度
uchar value,i;
uchar k_shi=1,k_fen=2;		//开窗帘时间
uchar g_shi=3,g_fen=4;		//关窗帘时间
uint t_high;        		//高温报警值

bit flag_200ms;
bit flag_relay_en;   
bit flag_zd_sd;		  	//自动/手动模式
bit flag_lj_en;		 	//按键连加使能
bit flag_lj_3_en;	 	//按键连3次连加后使能 加的数就越大了 
bit key_500ms;

void write_eepom();

#include "eepom52.h"
#include "key.h"
#include "ds1302.h"
#include "lcd1602.h"
#include "18b20_2lu.h"
#include "bujindianji.h"
#include "menu.h"

//写单片机内部EEPOM------------------------------
void write_eepom()
{	
	SectorErase(0x2000);
	byte_write(0x2000,flag_zd_sd);
	byte_write(0x2001,k_shi%256);
	byte_write(0x2002,k_fen%256);
	byte_write(0x2003,g_shi%256);
	byte_write(0x2004,g_fen%256);
	byte_write(0x2005,t_high%256);
	byte_write(0x2009,guanxian_set%256);	
	byte_write(0x2010,bjdj_value%256);	
	byte_write(0x2050,a_a);	
}

//读单片机内部EEPOM------------------------------
void read_eepom()
{
	flag_zd_sd = byte_read(0x2000);	
	k_shi  = byte_read(0x2001);	
	k_fen  = byte_read(0x2002);	
	g_shi  = byte_read(0x2003);	
	g_fen  = byte_read(0x2004);	
	t_high  = byte_read(0x2005);	
	guanxian_set  = byte_read(0x2009);	
	bjdj_value  = byte_read(0x2010);	
	a_a = byte_read(0x2050);
}	

//初始化EEPROM------------------------------------
void init_eepom()
{
	read_eepom();
 	if(a_a == 0xff)	
	{
		flag_zd_sd = 1;     //模式设置
		a_a = 1;
		k_shi=8;
		k_fen=2;			//开
		g_shi=3;
		g_fen=4;			//关
		t_high  = 35;	
		guanxian_set = 4;
		bjdj_value  = 0;
		write_eepom();		
	}
}

//读数模转换数据-----------------------------------	
unsigned char ad0832read(bit SGL,bit ODD)
{
	unsigned char i=0,value=0,value1=0;		
		SCL=0;
		DO=1;
		CS=0;		//开始
		SCL=1;		//第一个上升沿	
		SCL=0;
		DO=SGL;
		SCL=1;  	//第二个上升沿
		SCL=0;
		DO=ODD;
		SCL=1;	    //第三个上升沿
		SCL=0;	    //第三个下降沿
		DO=1;
		for(i=0;i<8;i++)
		{
			SCL=1;
			SCL=0; //开始从第四个下降沿接收数据
			value<<=1;
			if(DO)
				value++;						
		}
		for(i=0;i<8;i++)
		{			//接收校验数据
			value1>>=1;
			if(DO)
				value1+=0x80;
			SCL=1;
			SCL=0;
		}
		CS=1;
		SCL=1;	
		if(value==value1)		//与校验数据比较,正确就返回数据,否则返回0	
			return value;
	return 0;
}

//1ms 延时函数-----------------------------------
void delay_1ms(uint q)
{
	uint i,j;
	for(i=0;i<q;i++)
		for(j=0;j<120;j++);
}

//定时器0初始化程序------------------------------
void init_1602_ds1302()
{
	write_sfm2_ds1302(2,4,nian);	
	write_sfm2_ds1302(2,7,yue);	
	write_sfm2_ds1302(2,10,ri);	
	write_sfm2_ds1302(1,4,shi);	
	write_sfm2_ds1302(1,7,fen);	
	write_sfm2_ds1302(1,10,miao);
	write_sfm1(1,14,week);		
}					

部分代码。。。

资料下载地址:

https://docs.qq.com/doc/p/ffc421513a628b30450ae742547c0b850456d7c8

  • 15
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值