摘要自动卷帘系统的使用与制作在中国早已有之,但是在中国快速发展过程中依然有很多家庭并不是很富裕的,这样的情况导致的问题是能够使用到的有自动卷帘系统的家庭依然很少。在中国南方电子的发展带动了一个区域的经济大规模增长,然而在北方电子方面的发展显得很落后。可是即使这样,电子技术在中国的整体发展已是很可观的了。自动卷帘系统的作用就是在一些很忙的人士、懒人和一些健忘的人家庭中充当一个家庭助手,帮助这些人在窗帘该拉开时自动拉开,该关闭的时候自动关闭,或者想要及时打开或者关闭窗帘的情况下直接用遥控器进行操作,达到非接触式的遥控。另外,在家庭中的窗帘可以自动打开与关闭也给一个家庭增加了些许的神秘感。本系统的设计本着低成本,方便快捷的理念,对于市场上有相关功能的产品形成了有力德抵制垄断。为自动卷帘系统进入千家万户奠定了有力地基础。摘要:自动卷帘系统,电子技术,家庭助手,非接触自动卷帘系统1、研究背景及目的随着中国的快速发展,随着人民生活水平的不断提高,越来越多的老百姓家里需要提高自己家庭的生活水准。但是现在的社会发展,人民生活水平的提高已不仅仅局限于吃饱穿暖这样的物质层面,现在越来越多的上升到精神层面。社会的快速发展使得人们生活的节奏越来越快,在很多大城市商务人士所面临的生活节奏已经越来越超出一个正常人的活动能力,因此快的生活节奏就会使得一些人遗忘一些事,其中窗帘的开与关就是一个很常见的例子。现在市面上这方面的产品很多,但是这些产品有一个很大的共同特点就是他们只是整套只能家具系统的一部分,这些系统是基于LINUX开发的,成本居高不下。在只能家具系统中,会把家庭里面几乎所有的家具都统一起来进行管理,通过LINUX强大的任务管理能力实现各个模块的调配,并且运行很稳定。可是恰恰是这一点使得它几乎停滞了它的子系统的大规模发展,它分属的各个子系统其实在每个家庭中都有不同的环境,有些家庭有某些设备,例如冰箱,电视,电脑等,有些家庭则没有,我们需要根据实际的家庭环境来改变自己对智能家具的发展认识,应该将各个子系统也根据各自的所需要面临的环境作适当的改变。另外这个成本问题就会因子系统的独自发展而降下来。子系统所承担的任务少,因此它的任务处理能力不用很高,所以就会使得它的成本降下来,我们要达到的目的之一就是成本下降,另外市面上的很多常见的单片机就能很好的完成它的使命。2、系统整体概况2.1、系统概况自动卷帘系统是基于51单片机为核心外加相关的外围电路构成核心硬件驱动电路,整合模拟窗帘物理结构模型做成的自动卷帘系统。该系统可以根据时间来设定窗帘的开与关的动作,同时添加了窗帘状态的检测电路,可以实时的知道了解窗帘此时的状态。另外由于进行窗帘的定时开与关的运行,因此该系统整合了以DS1302时钟芯片为核心的时钟电路,在不掉电的情况下可以一直工作,并且时间不会有任何误差。基于人性化的考虑,该系统可以由遥控器进行控制,而不需要一定去系统板上进行按键操作。该系统的整体电路设计图如图1-1:51单片机按键模块LCD显示模块时钟模块电机驱动模块窗帘状态检测模块图1-1系统整体电路2.2、模块介绍2.2.1、最小系统板:组成:一个51单片机一个40脚DIP座一个12.000M晶振两个22pf瓷片电容一个轻触开关一个10k电阻一个103电容一个自锁开关电路图:功能介绍:实现电路正常工作的核心。2.2.2、时钟电路组成:一个DS1302时钟芯片8脚DIP底座一个32768晶振一个纽扣电池一个104电容图2-1最小系统板电路电路图:功能:实现时间的准时运行,为定时提供时间参考2.2.3、LCD模块组成:一个12864模块电路图:图2-2时钟电路图功能:人机交互的界点2.2.4、按键模块组成:16个轻触按钮电路图:功能:对系统进行设置2.2.5、电机驱动模块组成:2个80502个85502个90134个1K电阻4个4148二极管电路图:功能:实现对电机的驱动2.2.6、窗帘状态监测模块组成:2个10K电阻2个光敏电阻电路图:功能:监测窗帘的开关状态3、实现的过程与遇到的苦难3.1初次接触电子产品的设计在初期的学习过程中遇到很多困难,首先是专业知识的难以理解,这在我后期的努力学习过程中已经解决掉。3.2在焊接电路时,由于没有使用过烙铁,因此有过几次意外的小事故,在经过小小的短期训练后这个问题已经解决。3.3在窗帘物理模型的设计过程中经历了很大的困难,窗帘的物理结构经过集中方案的对比才最终选择现在的方案,其次就是物理结构的实现,这需要在材料的裁剪上进行很精确地测量,这点很难做到。3.4最后就是代码的编写,代码的编写需要整合整个系统的硬件资源,使其进行合理有效的运行,这需要很高的编写能力,初期这对我来说是一个很困难的事情,但是好在我的C语言功底结实,在花费了一定的时间后这个问题就解决了。4、感言与致谢在做自动卷帘系统的过程中经历了许多我没有想到的困难,但是我的爸爸妈妈给了我很大的支持,在我感到绝望快要放弃的时候他们的支持使得我能够继续努力下去,买东西是一件很麻烦的事情,但是父母给予的强大支持让这些问题都迎刃而解。再次就是我渐渐感觉到自己欠缺的东西还太多,还需要学习更多的知识来充实自己,争取能够做一个队国家对社会有用的人。附一:(实物照片)附二:(代码)#includeincludes.hcharsec,min,hour,day,month,year,week;sbitSCLK=P0^5;//实时时钟时钟线引脚sbitIO=P0^6;//实时时钟数据线引脚sbitRST=P0^7;//实时时钟复位线引脚sbitACC0=ACC^0;sbitACC7=ACC^7;voidwrite_byte(uchardat);ucharread_byte();voidwrite_1302(ucharadd,uchardat);ucharread_1302(ucharadd);ucharBCD_Decimal(ucharbcd);voidds1302_init(void);voidget_time(void);voidwrite_byte(uchardat)//写一个字节{uchara;ACC=dat;RST=1;for(a=8;a0;a--){IO=ACC0;SCLK=0;SCLK=1;ACC=ACC1;}}ucharread_byte()//读一个字节{uchara;RST=1;for(a=8;a0;a--){ACC7=IO;SCLK=1;SCLK=0;ACC=ACC1;}return(ACC);}//----------------------------------------voidwrite_1302(ucharadd,uchardat)//向1302芯片写函数,指定写入地址,数据{RST=0;SCLK=0;RST=1;write_byte(add);write_byte(dat);SCLK=1;RST=0;}ucharread_1302(ucharadd)//从1302读数据函数,指定读取数据来源地址{uchartemp;RST=0;SCLK=0;RST=1;write_byte(add);temp=read_byte();SCLK=1;RST=0;return(temp);}ucharBCD_Decimal(ucharbcd)//BCD码转十进制函数,输入BCD,返回十进制{ucharDecimal;Decimal=bcd4;return(Decimal=Decimal*10+(bcd&=0x0F));}//--------------------------------------voidds1302_init(void)//1302芯片初始化子函数(2010-01-07,12:00:00,week4){RST=0;SCLK=0;write_1302(0x8e,0x00);//允许写,禁止写保护write_1302(0x80,0);//向DS1302内写秒寄存器80H写入初始秒数据00write_1302(0x82,44);//向DS1302内写分寄存器82H写入初始分数据2write_1302(0x84,2);//向DS1302内写小时寄存器84H写入初始小时数据8write_1302(0x8a,1);//向DS1302内写周寄存器8aH写入初始周数据7write_1302(0x86,16);//向DS1302内写日期寄存器86H写入初始日期数据8write_1302(0x88,6);//向DS1302内写月份寄存器88H写入初始月份数据6write_1302(0x8c,14);//向DS1302内写年份寄存器8cH写入初始年份数据14write_1302(0x8e,0x80);//打开写保护}voidget_time(void){sec=BCD_Decimal(read_1302(0x81));min=BCD_Decimal(read_1302(0x83));hour=BCD_Decimal(read_1302(0x85));day=BCD_Decimal(read_1302(0x87));month=BCD_Decimal(read_1302(0x89));year=BCD_Decimal(read_1302(0x8d));week=BCD_Decimal(read_1302(0x8b));}#includehongwai.hvoidInit_rupt(void)//针对红外的芯片初始化函数{IE=0x84;//允许总中断中断,使能INT1外部中断TCON=0x10;//触发方式为脉冲负边沿触发IRIN=1;}/**********************************************************/voidIR_IN()interrupt2using0//中断处理函数{unsignedcharj,k,N=0;EX1=0;delay(15);if(IRIN==1){EX1=1;return;}//确认IR信号出现while(!IRIN)//等IR变为高电平,跳过9ms的前导低电平信号。{delay(1);}for(j=0;j4;j++)//收集四组数据{for(k=0;k8;k++)//每组数据有8位{while(IRIN)//等IR变为低电平,跳过4.5ms的前导高电平信号。{delay(1);}while(!IRIN)//等IR变为高电平{delay(1);}while(IRIN)//计算IR高电平时长{delay(1);N++;if(N=30){EX1=1;return;}//0.14ms计数过长自动离开。}//高电平计数完毕IRCOM[j]=IRCOM[j]1;//数据最高位补“0”if(N=8){IRCOM[j]=IRCOM[j]|0x80;}//数据最高位补“1”N=0;}//endfork}//endforjif(IRCOM[2]!=~IRCOM[3]){EX1=1;gotoLOOP;}switch(IRCOM[2]){case0x16:distemp=0;break;case0x0c:distemp=1;break;case0x18:distemp=2;break;case0x5e:distemp=3;break;case0x08:distemp=4;break;case0x1c:distemp=5;break;case0x5a:distemp=6;break;case0x42:distemp=7;break;case0x52:distemp=8;break;case0x4a:distemp=9;break;}//L1602_char(2,15,distemp+48);EX1=1;LOOP:;}/**********************************************************/voiddelay(unsignedcharx)//x*0.14MS{unsignedch