《自动卷帘系统论》word版_第1页
《自动卷帘系统论》word版_第2页
《自动卷帘系统论》word版_第3页
《自动卷帘系统论》word版_第4页
《自动卷帘系统论》word版_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、.摘 要自动卷帘系统的使用与制作在中国早已有之,但是在中国快速发展过程中依然有很多家庭并不是很富裕的,这样的情况导致的问题是能够使用到的有自动卷帘系统的家庭依然很少。在中国南方电子的发展带动了一个区域的经济大规模增长,然而在北方电子方面的发展显得很落后。可是即使这样,电子技术在中国的整体发展已是很可观的了。自动卷帘系统的作用就是在一些很忙的人士、懒人和一些健忘的人家庭中充当一个家庭助手,帮助这些人在窗帘该拉开时自动拉开,该关闭的时候自动关闭,或者想要及时打开或者关闭窗帘的情况下直接用遥控器进行操作,达到非接触式的遥控。另外,在家庭中的窗帘可以自动打开与关闭也给一个家庭增加了些许的神秘感。本系统

2、的设计本着低成本,方便快捷的理念,对于市场上有相关功能的产品形成了有力德抵制垄断。为自动卷帘系统进入千家万户奠定了有力地基础。摘要:自动卷帘系统,电子技术,家庭助手,非接触自动卷帘系统1、 研究背景及目的随着中国的快速发展,随着人民生活水平的不断提高,越来越多的老百姓家里需要提高自己家庭的生活水准。但是现在的社会发展,人民生活水平的提高已不仅仅局限于吃饱穿暖这样的物质层面,现在越来越多的上升到精神层面。社会的快速发展使得人们生活的节奏越来越快,在很多大城市商务人士所面临的生活节奏已经越来越超出一个正常人的活动能力,因此快的生活节奏就会使得一些人遗忘一些事,其中窗帘的开与关就是一个很常见的例子。

3、现在市面上这方面的产品很多,但是这些产品有一个很大的共同特点就是他们只是整套只能家具系统的一部分,这些系统是基于LINUX开发的,成本居高不下。在只能家具系统中,会把家庭里面几乎所有的家具都统一起来进行管理,通过LINUX强大的任务管理能力实现各个模块的调配,并且运行很稳定。可是恰恰是这一点使得它几乎停滞了它的子系统的大规模发展,它分属的各个子系统其实在每个家庭中都有不同的环境,有些家庭有某些设备,例如冰箱,电视,电脑等,有些家庭则没有,我们需要根据实际的家庭环境来改变自己对智能家具的发展认识,应该将各个子系统也根据各自的所需要面临的环境作适当的改变。另外这个成本问题就会因子系统的独自发展而降

4、下来。子系统所承担的任务少,因此它的任务处理能力不用很高,所以就会使得它的成本降下来,我们要达到的目的之一就是成本下降,另外市面上的很多常见的单片机就能很好的完成它的使命。2、 系统整体概况2.1、 系统概况自动卷帘系统是基于51单片机为核心外加相关的外围电路构成核心硬件驱动电路,整合模拟窗帘物理结构模型做成的自动卷帘系统。该系统可以根据时间来设定窗帘的开与关的动作,同时添加了窗帘状态的检测电路,可以实时的知道了解窗帘此时的状态。另外由于进行窗帘的定时开与关的运行,因此该系统整合了以DS1302时钟芯片为核心的时钟电路,在不掉电的情况下可以一直工作,并且时间不会有任何误差。基于人性化的考虑,该

5、系统可以由遥控器进行控制,而不需要一定去系统板上进行按键操作。该系统的整体电路设计图如图1-1:51单片机按键模块LCD显示模块时钟模块电机驱动模块窗帘状态检测模块图1-1 系统整体电路2.2、 模块介绍2.2.1、 最小系统板:组成:一个51单片机 一个40脚DIP座 一个12.000M晶振 两个22pf瓷片电容 一个轻触开关 一个10k电阻 一个103电容 一个自锁开关电路图:图2-1 最小系统板电路图功能介绍:实现电路正常工作的核心。2.2.2、 时钟电路组成:一个DS1302时钟芯片 8脚DIP底座 一个32768晶振 一个纽扣电池 一个104电容 电路图:图2-2 时钟电路图功能:实

6、现时间的准时运行,为定时提供时间参考2.2.3、 LCD模块 组成:一个12864模块 电路图:功能:人机交互的界点2.2.4、 按键模块 组成:16个轻触按钮 电路图:功能:对系统进行设置2.2.5、 电机驱动模块组成:2个8050 2个8550 2个9013 4个1K电阻 4个4148二极管电路图:功能:实现对电机的驱动2.2.6、 窗帘状态监测模块 组成:2个10K电阻 2个光敏电阻 电路图:功能:监测窗帘的开关状态3、 实现的过程与遇到的苦难3.1 初次接触电子产品的设计在初期的学习过程中遇到很多困难,首先是专业知识的难以理解,这在我后期的努力学习过程中已经解决掉。3.2 在焊接电路时

7、,由于没有使用过烙铁,因此有过几次意外的小事故,在经过小小的短期训练后这个问题已经解决。3.3 在窗帘物理模型的设计过程中经历了很大的困难,窗帘的物理结构经过集中方案的对比才最终选择现在的方案,其次就是物理结构的实现,这需要在材料的裁剪上进行很精确地测量,这点很难做到。3.4 最后就是代码的编写,代码的编写需要整合整个系统的硬件资源,使其进行合理有效的运行,这需要很高的编写能力,初期这对我来说是一个很困难的事情,但是好在我的C语言功底结实,在花费了一定的时间后这个问题就解决了。4、 感言与致谢在做自动卷帘系统的过程中经历了许多我没有想到的困难,但是我的爸爸妈妈给了我很大的支持,在我感到绝望快要

8、放弃的时候他们的支持使得我能够继续努力下去,买东西是一件很麻烦的事情,但是父母给予的强大支持让这些问题都迎刃而解。再次就是我渐渐感觉到自己欠缺的东西还太多,还需要学习更多的知识来充实自己,争取能够做一个队国家对社会有用的人。附一:(实物照片)附二:(代码)#include "includes.h"char sec, min, hour, day, month, year,week;sbit SCLK = P05; /实时时钟时钟线引脚 sbit IO = P06; /实时时钟数据线引脚 sbit RST = P07; /实时时钟复位线引脚 sbit ACC0=ACC0;sb

9、it ACC7=ACC7;void write_byte(uchar dat);uchar read_byte();void write_1302(uchar add,uchar dat);uchar read_1302(uchar add);uchar BCD_Decimal(uchar bcd);void ds1302_init(void);void get_time(void);void write_byte(uchar dat)/写一个字节uchar a;ACC=dat;RST=1;for(a=8;a>0;a-)IO=ACC0;SCLK=0;SCLK=1;ACC=ACC>&

10、gt;1;uchar read_byte()/读一个字节uchar a;RST=1;for(a=8;a>0;a-)ACC7=IO;SCLK=1;SCLK=0;ACC=ACC>>1;return (ACC);/-void write_1302(uchar add,uchar dat)/向1302芯片写函数,指定写入地址,数据RST=0;SCLK=0;RST=1;write_byte(add);write_byte(dat);SCLK=1;RST=0;uchar read_1302(uchar add)/从1302读数据函数,指定读取数据来源地址uchar temp;RST=0;

11、SCLK=0;RST=1;write_byte(add);temp=read_byte();SCLK=1;RST=0;return(temp);uchar BCD_Decimal(uchar bcd)/BCD码转十进制函数,输入BCD,返回十进制 uchar Decimal; Decimal=bcd>>4; return(Decimal=Decimal*10+(bcd&=0x0F);/-void ds1302_init(void) /1302芯片初始化子函数(2010-01-07,12:00:00,week4)RST=0;SCLK=0;write_1302(0x8e,0x0

12、0); /允许写,禁止写保护 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(

13、0x8c,14);/向DS1302内写年份寄存器8cH写入初始年份数据14write_1302(0x8e,0x80); /打开写保护void get_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_

14、Decimal(read_1302(0x8b);#include "hongwai.h"void Init_rupt(void) /针对红外的芯片初始化函数IE = 0x84; /允许总中断中断,使能 INT1 外部中断 TCON = 0x10; /触发方式为脉冲负边沿触发 IRIN=1;/*/void IR_IN() interrupt 2 using 0 /中断处理函数 unsigned char j,k,N=0; EX1 = 0; delay(15); if (IRIN=1) EX1 =1; return; /确认IR信号出现 while (!IRIN) /等IR变为

15、高电平,跳过9ms的前导低电平信号。 delay(1); for (j=0;j<4;j+) /收集四组数据 for (k=0;k<8;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计数过长自动离开。 /高电平计数完毕 IRCOMj=IRCOMj >> 1; /数据最高位补

16、“0” if (N>=8) IRCOMj = IRCOMj | 0x80; /数据最高位补“1” N=0; /end for k /end for j if (IRCOM2!=IRCOM3) EX1=1; goto LOOP; switch(IRCOM2) case 0x16:distemp = 0;break;case 0x0c:distemp = 1;break;case 0x18:distemp = 2;break;case 0x5e:distemp = 3;break;case 0x08:distemp = 4;break;case 0x1c:distemp = 5;break;

17、case 0x5a:distemp = 6;break;case 0x42:distemp = 7;break;case 0x52:distemp = 8;break;case 0x4a:distemp = 9;break; / L1602_char(2,15,distemp+48); EX1 = 1;LOOP:; /*/void delay(unsigned char x) /x*0.14MS unsigned char i; while(x-) for (i = 0; i<13; i+) /*/void delay1(int ms) unsigned char y; while(ms

18、-) for(y = 0; y<250; y+) _nop_(); _nop_(); _nop_(); _nop_(); #include "includes.h"/* 引脚定义 * 单片机 LCD12864 P0 D0 - D7 P11 EN P20 RW P21 RS P13 RST */ sbit LCD_RS = P35; /* 数据、指令选择信号 */sbit LCD_RW = P37; /* 读写选择信号 */sbit LCD_EN = P36; /* 读写使能信号 */sbit LCD_RST = P34; /* 液晶复位输入端口 */#define D

19、ATA_PORT P2 /* 数据端口 */static void LCD12864_CheckBusy( void );/忙检测函数,内部调用void delay_us(void);/US级延时函数void delay_ms(uint t);/ms级延时函数void LCD12864_WriteCommand(uchar Cmd);/写指令函数void LCD12864_WriteData(uchar WrData);/写数据函数void LCD12864_DisplayPosition(uchar X, uchar Y);/坐标定位函数void LCD12864_WrString(ucha

20、r *Str);/写字符串函数void LCD12864_ClearDisplay(void);/清屏函数void LCD12864_Init(void);/初始化函数/* 函 数 名 : delay_us* 描 述 : 微秒级延时.* 输 入 : 无.* 返 回 : 无.*/void delay_us( )_nop_();/* 函 数 名 : delay_ms* 描 述 : 毫秒延时.* 输 入 : uint t:* 要延时的t ms时间.* 返 回 : 无.*/void delay_ms(uint t)uchar i; while (t-) for ( i = 0; i < 114;

21、 i+ ); /* 函 数 名 : LCD12864_CheckBusy* 描 述 : 检查LCD12864是否忙.* BusyFlag = 1,LCD12864正忙,需等待;* BusyFlag = 0,LCD12864空闲,可以写;* 输 入 : 无.* 返 回 : 无.*/void LCD12864_CheckBusy( void ) bit BusyFlag; /* 忙标志 */ BusyFlag = 1; /* 先置位忙标志 */ while ( BusyFlag ) /* 如果忙,一直等待 */ LCD_RS = 0;LCD_RW = 1;LCD_EN = 1;BusyFlag =

22、 ( bit )( DATA_PORT & 0x80 );delay_us( ); /* 稍微延时后继续查询 */ LCD_EN = 0; /* 拉低EN */* 函 数 名 : LCD12864_WriteCommand* 描 述 : 向LCD12864写入命令.* RS = 0, RW = 0,EN下降沿将P0端口命令写入LCD12864.* 输 入 : UINT8 Cmd:* 要写入的命令码.* 返 回 : 无.*/void LCD12864_WriteCommand( uchar Cmd ) LCD12864_CheckBusy( ); /* 检查LCD12864是否忙 */

23、LCD_RS = 0; LCD_RW = 0; LCD_EN = 1; DATA_PORT = Cmd; delay_us( ); /* 等待命令写完 */ LCD_EN = 0;/* 函 数 名 : LCD12864_WriteData* 描 述 : 向LCD12864写入数据.* RS = 1, RW = 0,EN下降沿将P0端口命令写入LCD12864。* 输 入 : UINT8 WrData:* 要写入的数据.* 返 回 : 无.*/void LCD12864_WriteData( uchar WrData ) LCD12864_CheckBusy( ); /* 检查LCD12864是

24、否忙 */ LCD_RS = 1; LCD_RW = 0; LCD_EN = 1; DATA_PORT = WrData; delay_us( ); /* 等待数据写完 */ LCD_EN = 0;/* 函 数 名 : LCD12864_DisplayPosition* 描 述 : 设定显示位置.* 输 入 : uchar X:*水平地址.*uchar Y:* 垂直地址.* 返 回 : 无.*/void LCD12864_DisplayPosition( uchar X, uchar Y )uchar Position;/* 显示地址 */ switch( X ) case(1): X = 0

25、x80; break; case( 2 ): X = 0x90;break; case( 3 ): X = 0x88;break; case ( 4 ): X = 0x98;break; Position = X + Y; /* 确定显示地址 */ LCD12864_WriteCommand( Position ); /* 写显示地址 */* 函 数 名 : LCD12864_WrString* 描 述 : 写字符串,即国标码给液晶.* 输 入 : uchar *Str:*指向字符串数组.* 返 回 : 无.*/void LCD12864_WrString( uchar *Str ) whil

26、e ( *Str != 0 )/* 等待发送完毕 */ LCD12864_WriteData( *Str ); /* 写数据到LCD12864 */ Str+;delay_ms( 1 ); /* 延时形成逐字显示效果 */ /* 函 数 名 : LCD12864_ClearDisplay* 描 述 : 清屏.* 输 入 : 无.* 返 回 : 无.*/void LCD12864_ClearDisplay( ) LCD12864_WriteCommand( 0x30 ); /* 基本指令集 */ delay_ms(1); LCD12864_WriteCommand( 0x01 ); /* 清屏

27、*/ delay_ms(1);/* 函 数 名 : LCD12864_Init* 描 述 : 初始化LCD12864.* 输 入 : 无.* 返 回 : 无.*/void LCD12864_Init() delay_ms( 10 ); LCD_RST = 0; /* 复位液晶 */ delay_ms( 20 ); LCD_RST = 1; delay_ms( 40 ); LCD12864_WriteCommand( 0x30 ); /* 功能设定:8位模式,基本指令集 */ delay_ms( 5 ); LCD12864_WriteCommand( 0x01 ); /* 清屏 */ delay

28、_ms( 5 ); LCD12864_WriteCommand( 0x06 );/* 位址计数器自加 */ delay_ms( 5 ); LCD12864_WriteCommand( 0x0C );/* 开显示 */ delay_ms( 5 );/*工程名称:自动卷帘系统作者:善丙齐所在学校:西北师大二附中作品简介:该作品实现早上,中午或者晚上窗帘的自动卷起与放下,并且可以按照 个人习惯设定卷帘时间以及通过遥控器来实现卷帘的自由活动。联系方式/#include "includes.h"#include "lcd.h"extern

29、 char sec, min, hour, day, month, year,week; /引用时间变量char sec_z,min_z,hour_z,day_z,month_z,year_z,week_z; /定临时时间变量/*字符串数组*/uchar code InitBuf = "欢迎使用本产品 " "作者:尚丙奇 " " 自动卷帘系统 " "学校:师大二附中"uchar code InitBuf1 = "初始窗帘打开时间" "初始窗帘关闭时间" "早上:08

30、时整 " "晚上:08时整 "uchar code DisplayBuf1 = "状态: " "20 年 月 日 " "日期: " " 时 分 秒 "uchar code DisplayBuf2 = "窗帘状态时间设定" "设定结束按确认键" " 时 分 " " "uchar code DisplayBuf3 = " 错误! " "小时必须小于24 " "分

31、钟必须小于60 " " 请重新设定! "uchar code z_tai1=" 全关 "uchar code z_tai2=" 全开 "uchar code z_tai3="左关右开"uchar code z_tai4="左开右关"uchar code z_tai5="打开时间设定成功"uchar code z_tai6="关闭时间设定成功"uchar step_flag=0;uchar shi_m=0;uchar fen_m=0;uchar f

32、irst_flag=1;uchar E_flag=0;char kai_time2;char guan_time2;/红外接收引脚及相关变量的定义uchar distemp = 0;uchar IRCOM7;sbit IRIN = P33; /红外接收器数据线/电机控制引脚及相关变量的定义sbit PWM2_L=P02;sbit PWM2_R=P03;sbit PWM1_L=P00;sbit PWM1_R=P01;/窗帘开关检测引脚及相关变量定义sbit C_L=P30;sbit C_R=P31;sbit C_F=P04;/所用到的函数的声明void Init_rupt(void);uchar

33、 Keyscan(void);void delay(unsigned char x);void play_time(void);extern void ds1302_init(void);extern void get_time(void);char jiance(void);void jiance_display(void);void Init_go(void);void step(void);void judge(int k);void enter(void);uchar shi_flag=0;uchar fen_flag=0;void z_tai_time(int k);void err

34、or(void);void CL_contrl(char m);void PWM_Init(void);int main()uchar Key_Value,m_flag,s_flag=0;C_F=0;Init_go();kai_time0=8;kai_time1=0;guan_time0=20;guan_time1=0;m_flag=1;while(1)P1 = 0xf0;if(P1 != 0xf0)/判断有无按键按下delay_ms(20);/按键消抖if(P1 != 0xf0)/第二次判断有无按键按下 Key_Value = Keyscan();if(Key_Value=10) step(

35、);s_flag=1;if(step_flag) switch(Key_Value) case 0: judge(1); break; case 1: judge(2); break; case 2: judge(3); break; case 3: judge(4); break; case 4: judge(5); break; case 5: judge(6); break; case 6: judge(7); break; case 7: judge(8); break; case 8: judge(9); break; case 9: judge(0); break; case 11

36、: enter();s_flag=0; break; case 12: shi_flag=1;fen_flag=0; LCD12864_DisplayPosition(2,1);LCD12864_WrString(" ");LCD12864_DisplayPosition(2,1);shi_m=0;/fen_m=0;break; case 13: shi_flag=0;fen_flag=1;LCD12864_DisplayPosition(2,3);LCD12864_WrString(" ");LCD12864_DisplayPosition(2,3);

37、/shi_m=0;fen_m=0;break; case 14: z_tai_time(0); break; case 15: z_tai_time(1); break; if(!s_flag) get_time();play_time();if(hour=kai_time1)if(min=kai_time0) if(m_flag) distemp=4;if(min-kai_time0)=1) m_flag=1;if(hour=guan_time1)if(min=guan_time0) if(m_flag) distemp=7;if(min-guan_time0)=1) m_flag=1; if(di

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论