历史上的今天
今天是: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 { 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] { 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)//控制关闭窗帘
上一篇:单片机DIY模拟冰球
下一篇:pid算法讲解
史海拾趣
|
Altium Designer 6 中,制件的原理图文件中若有中文字,用自带的\"智能PDF\"导出时,则在产生的PDF中显示不了中文字符.本人用Altium Designer 6.3~Altium Designer 6.9都试过,均有此问题,不知能否解决,请哪位大侠指点,若不能人为修改,是否要等待A ...… 查看全部问答> |
|
下面的六个程序片段主要完成这些事情: 输出Hello, World混乱C语言的源代码下面的所有程序都可以在GCC下编译通过,只有最后一个需要动用C++的编译器g++才能编程通过。 hello1.c 01 #define _________ } 02 ...… 查看全部问答> |
|
请教Modbus高手makesoft:实现Modbus协议一定需要超时检测吗? 首先声明,我对Modbus不熟悉,尤其是如何实现它,最近才从网上下载了协议研究了一下,特此向高手请教。搞清楚这些问题,才能有效地在芯片中实现相应的功能,满足大家的需要。此帖的目的是继续另一帖的讨论:建议STM32的芯片加上串口超时功能, ...… 查看全部问答> |
|
在STM32的DS里面,管脚介绍的表格中Main function(after reset)一栏中,大部分的IO口都是如PA7样式的口 ...… 查看全部问答> |
|
我用CCS编程调试时,出现了“error: identifier \\"sinwt\\" is undefined”的错误信息,请请教一下是怎么回事?是不是需要加入某个头文件?还是我的写法有问题啊?谢谢大家~~~… 查看全部问答> |
|
在使用CCS的过程中,我发现在有关于有软件延时的程序中会出现问题,感觉延时没起到作用,比如一个简单的例子,让灯闪烁,使用delay函数(函数体内用两个for循环嵌套那种),这种延时就不会有效果,而用i=50000; while ...… 查看全部问答> |
|
全部代码都已测试通过,若发现有什么问题请和我联系。因为时间仓促,基本上都是一些硬件测试程序。记得要把例程和固件库放在同一目录下,全部工程共用一个库的。至于SD卡里的文件只是几个测试图片和音 ...… 查看全部问答> |
|
在EK-LM4F120XL Launchpad中, 我分别用 AIN0(PE3口)采样1.3V电压 AIN1(PE2口)采样0.65V电压, AIN8(PE5口)采样1.95V电压, AIN9(PE4口)采样2.6V电压, 假如以3.0V作为参考电压,那么在数据寄存器中采样结果应该是: 1775,对应1.3V电压 ...… 查看全部问答> |




