电路原理图如下:


10UF电解电容    C2
47UF电解电容    C6
光敏电阻    R10
限位开关    K1, K2
微动开关    KEY1, KEY2, KEY3, KEY4, KEY5
步进电机    P1
DC-002电源插座    P2
LCD1602液晶    Q1
红外一体接头    Q5
10K色环电阻    R1, R4, R5, R6, R8, R9
10K电位器    R2
10k排阻    R3
双掷开关    SW1
2Pi插针    U2
STC89C52单片机    U3
ADC0832模数转换芯片    U4
ULN2003电机驱动芯片    U5
DS1302时钟芯片    U6
12MHZ晶振    Y1
32.768KHZ晶振    Y2

单片机源程序如下:

/*************************************************************

                      智能窗帘


补充说明:

***************************************************************/

#include                   //头文件

#include

#include

#include<28BYJ48.h>

#include

#include

#include


#define uchar unsigned char//宏定义

#define uint unsigned int


/*******************引脚定义*********************/

sbit key_mode = P1^0;         //设置键

sbit key_jia  = P1^1;         //加值键

sbit key_jian = P1^2;         //减值键

sbit key_ok   = P1^3;         //确定键


sbit sw1=P3^7;           //全开 限位开关

sbit sw2=P3^6;           //全关 限位开关

/*******************变量定义*********************/

uchar light_up,light_down;//存储光强上、下限值

uchar set_f=0;                //设置选择标记,=0非设置,=1设置年,=2设置月,=3设置日,=4设置时,=5设置分,=6设置秒

                                        //              =7设置定时-时,=8设置定时-分,=9设置定时-开关,=10设置窗帘打开/关闭

                                        //                                =11设置光强上限,=12设置光强下限,=13设置校准窗帘位置


uchar num;                        //计数变量

uchar ds[4];            //定时控制开时、分、控制关时、分


uchar mode=0;                //模式标记。=0手动,=1定时,=2光控

uchar light;        //存储光强


uint moto_num=0;  //记录窗帘位置

uchar moto_state=0;//窗帘状态,=0已经关闭,=1处于运转过程中,=2已经打开

bit moto_f=0;           //标记当前控制状态,=0控制关,=1控制开

uchar code display_mode[3][3]={"SD","DS","GK"};//显示模式

/********************************************************

函数名称:void delayms(uint ms)

函数作用:毫秒延时函数

参数说明:

********************************************************/

void delayms(uint ms)

{

        unsigned char i=100,j;

        for(;ms;ms--)

        {

                while(--i)

                {

                        j=10;

                        while(--j);

                }

        }

}


/********************************************************

函数名称:void display(void)

函数作用:正常显示日期、时间、光强等函数

参数说明:

********************************************************/

void display(void)

{

        uint t[3];        


        //显示时间

        LCD_disp_char(0,2,ASCII[time[2]/10]);//显示时【0:表示第1列,2:表示第2行,所有关于显示都一样】

        LCD_disp_char(1,2,ASCII[time[2]%10]);

        LCD_disp_char(2,2,':');

        LCD_disp_char(3,2,ASCII[time[1]/10]);//显示分【3:表示第4列,2:表示第2行,所有关于显示都一样】

        LCD_disp_char(4,2,ASCII[time[1]%10]);

        LCD_disp_char(5,2,':');

        LCD_disp_char(6,2,ASCII[time[0]/10]);//显示秒

        LCD_disp_char(7,2,ASCII[time[0]%10]);


        //显示日期

        LCD_disp_char(0,1,ASCII[time[6]/10]);//显示年

        LCD_disp_char(1,1,ASCII[time[6]%10]);

        LCD_disp_char(2,1,'/');

        LCD_disp_char(3,1,ASCII[time[4]/10]);//显示月

        LCD_disp_char(4,1,ASCII[time[4]%10]);

        LCD_disp_char(5,1,'/');

        LCD_disp_char(6,1,ASCII[time[3]/10]);//显示日

        LCD_disp_char(7,1,ASCII[time[3]%10]);


        //显示模式

        lcd1602_write_character(9,1,display_mode[mode]);

       

        //显示光强

        if(light>99)

                LCD_disp_char(12,1,ASCII[light/100]);

        else

                LCD_disp_char(12,1,' ');

        LCD_disp_char(13,1,ASCII[light%100/10]);

        LCD_disp_char(14,1,ASCII[light%10]);

        LCD_disp_char(15,1,'%');


        //光强控制

        if(mode==2)//光控模式

        {         

                if((light>=light_up||light                {       

                        moto_f=0;         //标记当前控制窗帘关闭  

                        moto_state=1;//标记窗帘处于运转过程中

                }

                else

                        if((light=light_down))//判断实际光强是否【大于等于下限值 并且 小于上限】、当前处于关闭状态

                        {

                                moto_f=1;         //标记当前控制窗帘打开  

                                moto_state=1;//标记窗帘处于运转过程中

                        }

        }

        else

                if(mode==1)//定时模式

                {

                        t[0]=time[2]*60+time[1];//当前时间

                        t[1]=ds[0]*60+ds[1];        //窗帘开启时间点

                        t[2]=ds[2]*60+ds[3];        //窗帘关闭时间点

                       

                        if(t[1] t[1] --> t[2] --> 24时

                        {

                                if(t[0]>=t[1]&&t[0]<=t[2])

                                        moto_f=1;            //标记当前需要打开窗帘

                                else

                                        moto_f=0;                //标记当前需要关闭窗帘

                        }

                        else                                        //0时 --> t[2] --> t[1] --> 24时

                        {

                                if(t[0]>=t[1]||t[0]<=t[2])

                                        moto_f=1;                //标记当前需要打开窗帘

                                else

                                        moto_f=0;                //标记当前需要关闭窗帘

                        }

                        moto_state=1;          //标记窗帘处于运转过程中

                }

        if(moto_f==0&&moto_state!=0&&sw2!=0)//控制关闭窗帘

[1] [2] [3] [4] [5] [6] [7] [8] [9] [10]
关键字:51单片机  智能窗帘 引用地址:51单片机智能窗帘

上一篇:单片机DIY模拟冰球
下一篇:pid算法讲解

推荐阅读

据美国媒体报道,芬兰电信设备制造商诺基亚周四公布了符合市场预期的季度业绩,同时宣布将按照削减成本计划在全球裁员。该公司称,为在2020年底前每年削减7亿欧元成本,将进行全球范围的裁员。但该公司未透露裁员计划的规模。        在截止9月30日的季度里,诺基亚实现净营收55亿欧元(约合62.7亿美元),分析师们原先的预期为54亿欧元。非IFRS运...
近日美国参议院民主党领袖Chuck Schumer和共和党参议员Tom Cotton称,已经致信给美国国家情报部门执行责任人Joseph Maguire,要求正式对TikTok进行国家安全风险评估。前述美国参议员称,TikTok平台还有可能成为外国势力潜在的影响目标,参议员还表示,TikTok可能对特定的内容进行了审查。对此,TikTok在其官网发布文章对内容审查、数据安全等问题做出了...
10月18日,吉利在济南做了一场活动。这场活动确实很低调,因为吉利汽车董事长李书福到场为吉利科技集团(以下简称“吉利科技”)站台,见证其跟济南市政府签约,开启济南市换电站的运营。济南日报做了报道,当天中午双方在山东大厦签署了全面战略合作框架协议,“开启吉利智能充/换电站运营及城市出行项目、吉利智能新能源整车工厂项目建设。”而主流的汽...
服务机器人应用价值分享沙龙在深圳举办 服务机器人是人工智能领域最贴近人们生活的产品之一,我国服务机器人行业发展前景如何,后疫情时代服务机器人有哪些创新性应用场景,对传统行业提质升级能发挥哪些作用? 10月26日,由深圳市人工智能行业协会和睿博天米科技(深圳)有限公司共同主办的服务机器人应用价值分享沙龙在深圳市南山区塘朗城君璞酒店举...

史海拾趣

问答坊 | AI 解惑

千万别叫我博士

人才交流会上人山人海。我拿了三个版本的简历在人群间挤来挤去,一份简历上标明 的是博士文凭,一份是硕士文凭,一份是本科文凭。挤了大半天,不是人家不要我,就是 我看不上人家,真累!   远远地看见一个招聘台前围满了好多人,走近一看,是 ...…

查看全部问答∨

如何减少变压器对放大器的干扰

电源变压器可通过磁场、电磁感应和电路对放大器形成干扰,是音响机器中最大的干扰源。所以,要处理好它的工作状态和应用环境,才能有效地避免由电源变压器产生的干扰,使放大器得到优良的音效。下面我将对此与大家做一讨论。   1、电源变压器除 ...…

查看全部问答∨

编译qt的最终命令:

来自EEWORLD合作群:arm linux fpga 嵌入0(49900581)…

查看全部问答∨

大家一起谈谈对LED的看法!!!

进入LED这个行业已经两年了,对LED有或多或少的认识,下面谈谈自己对LED的看法:   1. 太精贵,容易毁坏。 2. 寿命很短(实际工作,不要说理论)。 3. 成本太高。 4. 热量太大。 5. 维修麻烦。   大家谈谈自己的看法???…

查看全部问答∨

EVC打开驱动问题!!!!!!!

我用VS2005做了个多对话框程序,现在在程序的第一个对话框就打开IO流驱动,进入别的对话框是不是关闭重新打开,还是整个程序就打开一次IO流驱动呢???因为有个IO控制蜂鸣器,是要一直打开IO流驱动的,请高手给个方法!…

查看全部问答∨

滤波

滤波器的安装 􀁡首先,滤波器的外壳与设备 的金属机壳要有可靠的接触 。设备的金属机壳应该接大 地。 􀁡其次,滤波器引线与安装位置 也是很有讲究的问题。    …

查看全部问答∨

64脚stm32AD的参考电压问题

看过64脚的STM32没有参考电压输入端子。如果需要比较精确的参考电压怎么处理?如果用一个高精度的电源给模拟部分供电,是否能达到高精确采集?如果用电源直接供电的话,需要电源的电流是多少啊?手册上也不说模拟器件的功耗。还有ad内部有个参 ...…

查看全部问答∨

proteus软件问题,打开文件失败

    打开proteus文件的时候出现这个问题,是怎么搞的,在同学的电脑上面就可以打开,求原因和解决方案,感谢、、、、…

查看全部问答∨

哪位发现过官方那个LaunchPad_Temp_GUI第一次打开可能发现不了com口?

我试验了一下,新启动的电脑,可以用一段时间(但是不要插LaunchPad),然后第一次插LaunchPad,按按键转到应用模式,然后第一次打开LaunchPad_Temp_GUI.exe,这个时候发现不了LaunchPad对应的端口,只有电脑的其它端口。关闭LaunchPad_Temp_GUI, ...…

查看全部问答∨

DSP 的图像显示放大

如何将一定区域内的图像放大  在标准PAL 576*720 下  请问有相关代码么…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved