智能窗帘的设计参考资料
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于单片机的智能窗帘的研究与设计
一、设计题目:基于单片机的智能窗帘的研究与设计
二、给定条件
自动窗帘控制系统核心是采用单片机AT89C51控制,其次采用感光传感器,红外控制电路,温度检测电路等外围电路。整个系统在各模块的配合下实现半自动控制,自动控制等功能。该设计在理论层面上,以程序语言驱动各模块工作,实现了各模块的内在联系,应用层面上采用软件进行原理图设计和仿真。
该自动窗帘系统硬件电路主要由光敏检测电路,红外控制电路,温度检测电路,步进电机驱动电路构成。通过本系统可以实现通过光照强度实现窗帘开关自动控制,通过温度检测电路实现窗帘开关自动控制,同时实现红外遥控的半自动控制。
三、设计内容
1.根据具体情况计算电路参数
2.选取元件、识别和测试。元件以低耗、高能、耐用、精确、易于操作等为优先考虑因素
3.根据实际外壳大小设计1:1印刷板布线图
4.设计制作印刷线路板
5.焊接、调试电路
四、参考电路
六、部分参考程序
unsigned int LowTime,HighTime;
{
unsigned char i,j;
for(i=0;i<10;i++)
for(j=0;j<33;j++)
;
}
void delay(unsigned char n)
{
unsigned char i;
for(i=0;i delay1ms(); } void DelayDelay(unsigned int num) { while( --num ) ; } void delay11(unsigned char x) //x*0.14MS { unsigned char i; while(x--) { for (i = 0; i<13; i++) {} } } void beep() //蜂鸣器响一声函数 { unsigned char i; BEEP=1; for (i=0;i<100;i++) { delay1ms(); //BEEP取反 } BEEP=0; //关闭蜂鸣器 delay(250); //延时 } void motor_ffw(unsigned char ii) //unsigned char num, { unsigned char i; unsigned int j; //while(num--) //{ for (j=0; j<64; j++) //转1*n圈 { for (i=0; i<8; i++) //一个周期转30度 { if(ii==1) P1 = ~FFF[i]; //取数据ii控制电机的正反转ii=0 或者ii=1 if(ii==2) P1 = ~FFZ[i]; delay(1); //调节转速 } } //} } void iic_start(void) { //时钟保持高,数据线从高到低一次跳变,I2C通信开始 SDA = 1; SCL = 1; delayNOP(); // 延时5us SDA = 0; delayNOP(); SCL = 0; } void iic_stop(void) { SDA = 0; //时钟保持高,数据线从低到高一次跳变,I2C通信停止SCL = 1; delayNOP(); SDA = 1; delayNOP(); SCL = 0; } void iicInit(void) { SCL = 0; iic_stop(); } void slave_ACK(void) { SDA = 0; SCL = 1; delayNOP(); SCL = 0; } void slave_NOACK(void) { SDA = 1; SCL = 1; delayNOP(); SDA = 0; SCL = 0; } void check_ACK(void) { SDA = 1; // 将p1.1设置成输入,必须先向端口写1 SCL = 1; askflag = 0; delayNOP(); if(SDA == 1) // 若SDA=1表明非应答,置位非应答标志askflag askflag = 1; SCL = 0; } void IICSendByte(unsigned char ch) { unsigned char idata n=8; // 向SDA上发送一位数据字节,共八位while(n--) { if((ch&0x80) == 0x80) // 若要发送的数据最高位为1则发送位1 { SDA = 1; // 传送位1 SCL = 1; delayNOP(); // SDA = 0; SCL = 0; } else { SDA = 0; // 否则传送位0 SCL = 1; delayNOP(); SCL = 0; } ch = ch<<1; // 数据左移一位 } }