智能窗帘的设计参考资料

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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; // 数据左移一位

}

}

相关文档
最新文档