历史上的今天
返回首页

历史上的今天

今天是:2024年10月28日(星期一)

正在发生

2020年10月28日 | 51单片机智能窗帘

2020-10-28 来源:51hei

电路原理图如下:


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)//控制关闭窗帘

推荐阅读

史海拾趣

DAQ Electronics LLC公司的发展小趣事

随着国内外市场的不断拓展和客户需求的不断增长,DAQ Electronics LLC公司开始积极探索国际化发展道路。公司积极参加国际展会和技术交流活动,与全球同行建立了广泛的联系和合作。同时,公司也加大了对海外市场的投入力度,不断拓展海外市场份额。这种国际化的发展战略不仅为公司带来了更多的商业机会和合作伙伴也为公司未来的发展提供了更广阔的空间和机遇。

请注意,以上故事均为虚构内容,仅供参考。如有需要,建议直接联系DAQ Electronics LLC公司获取其真实的发展历程和故事。

Displaytech公司的发展小趣事

Displaytech一直致力于技术创新和产品升级。在多年的发展过程中,公司不断推出新的LCD产品,包括触摸屏TFT、单色图形LCD和字符显示模块等。同时,公司还加强了表面贴装能力、PCB组装服务、工具和注塑成型等业务的拓展,进一步提升了整体竞争力。

乐鑫(espressif)公司的发展小趣事

乐鑫科技自创立之初,就致力于物联网(IoT)领域的芯片设计和技术创新。公司凭借其独特的芯片设计能力和连接技术,成功开发了一系列具有竞争力的产品,为全球开发者提供了高效、可靠的物联网解决方案。乐鑫科技始终坚持以技术创新为核心,通过自主研发和持续投入,不断提升产品的性能和竞争力。

CTC [Compact Technology Corp.]公司的发展小趣事

作为一家有社会责任感的企业,CTC公司积极参与社会公益事业。公司不仅捐款支持教育、环保等公益事业,还利用自身的技术优势为社区提供技术支持和解决方案。这些行为使得CTC公司在社会中树立了良好的形象,赢得了公众的信任和尊重。同时,通过履行社会责任,CTC公司也提升了自身的品牌价值和市场竞争力。

请注意,以上故事是基于假设和虚构的,并非真实发生的事件。它们旨在展示一个电子行业中公司发展可能经历的一些典型情境和挑战,以及应对这些情境和挑战的可能策略。在现实中,每个公司的发展都有其独特性和复杂性,因此这些故事仅供参考,不能作为CTC公司或任何其他公司实际发展情况的依据。

Eurotech公司的发展小趣事

为了满足不断变化的市场需求,Eurofarad公司始终保持着对产品创新的热情。公司不断投入研发资源,开发出了一系列具有竞争力的新产品。这些新产品不仅涵盖了不同规格和性能的电容器,还包括了一些与电容器相关的配套产品和解决方案。这些创新产品的推出,让Eurofarad公司在市场中保持了领先地位。

BELLING LEE公司的发展小趣事

为了进一步扩大市场份额,BELLING LEE公司开始实施国际化战略。公司首先在欧洲和北美市场设立了分支机构,并逐步拓展到亚洲、非洲等其他地区。在国际化过程中,公司不仅积极推广自己的产品和技术,还加强了与当地企业的合作与交流,从而实现了资源的优化配置和市场的互利共赢。

问答坊 | AI 解惑

AD6智能PDF导出时,中文字符无显示

Altium Designer 6 中,制件的原理图文件中若有中文字,用自带的\"智能PDF\"导出时,则在产生的PDF中显示不了中文字符.本人用Altium Designer 6.3~Altium Designer 6.9都试过,均有此问题,不知能否解决,请哪位大侠指点,若不能人为修改,是否要等待A ...…

查看全部问答>

6个变态的C语言Hello World程序

下面的六个程序片段主要完成这些事情: 输出Hello, World混乱C语言的源代码下面的所有程序都可以在GCC下编译通过,只有最后一个需要动用C++的编译器g++才能编程通过。 hello1.c 01     #define _________ }   02 ...…

查看全部问答>

谈谈天线锡焊要点

锡焊要点可以简单归纳如下:   1.使用烙铁(包括火烙铁)前,必须使烙铁头表面蒙上一层锡(俗称“吃锡”),这样烙铁头才能拉住锡。上锡的方法是在烙铁未加热前,将烙铁头挫光,除去氧化物或污垢,然后对刮亮后的烙铁头加热,直到光亮部分变成紫 ...…

查看全部问答>

请教Modbus高手makesoft:实现Modbus协议一定需要超时检测吗?

首先声明,我对Modbus不熟悉,尤其是如何实现它,最近才从网上下载了协议研究了一下,特此向高手请教。搞清楚这些问题,才能有效地在芯片中实现相应的功能,满足大家的需要。此帖的目的是继续另一帖的讨论:建议STM32的芯片加上串口超时功能, ...…

查看全部问答>

向高手请教一个关于STM32的PF,PG口的问题

                                 在STM32的DS里面,管脚介绍的表格中Main function(after reset)一栏中,大部分的IO口都是如PA7样式的口 ...…

查看全部问答>

关于正弦余弦函数的问题

我用CCS编程调试时,出现了“error: identifier \\"sinwt\\" is undefined”的错误信息,请请教一下是怎么回事?是不是需要加入某个头文件?还是我的写法有问题啊?谢谢大家~~~…

查看全部问答>

关于CCS在软件延时上的探讨

      在使用CCS的过程中,我发现在有关于有软件延时的程序中会出现问题,感觉延时没起到作用,比如一个简单的例子,让灯闪烁,使用delay函数(函数体内用两个for循环嵌套那种),这种延时就不会有效果,而用i=50000;   while ...…

查看全部问答>

STM32F407学习板全部例程+原理图

全部代码都已测试通过,若发现有什么问题请和我联系。因为时间仓促,基本上都是一些硬件测试程序。记得要把例程和固件库放在同一目录下,全部工程共用一个库的。至于SD卡里的文件只是几个测试图片和音 ...…

查看全部问答>

Kernel - Common Problems Booting Linux中文手册改1

Kernel - Common Problems Booting Linux中文手册改1…

查看全部问答>

EK-LM4F120XL ADC参考电压问题

在EK-LM4F120XL Launchpad中, 我分别用 AIN0(PE3口)采样1.3V电压 AIN1(PE2口)采样0.65V电压, AIN8(PE5口)采样1.95V电压, AIN9(PE4口)采样2.6V电压, 假如以3.0V作为参考电压,那么在数据寄存器中采样结果应该是: 1775,对应1.3V电压 ...…

查看全部问答>