找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 8552|回复: 23
收起左侧

单片机自动窗帘控制系统设计(烟雾+灯控)带程序+仿真+文档等资料

  [复制链接]
ID:284357 发表于 2019-2-27 17:54 | 显示全部楼层 |阅读模式
内涵程序,文档,仿真图等文件,需要的请下载

智能窗户  AT89S52  1602显示  步进电机转动模拟开窗关窗

(1)手动控制:该功能是根据用户的需求通过按键进行窗帘的开关,此功能可以使窗帘的开闭处于任何一种状态;
(2)光照自动控制:系统可以根据用户设定的光照强度值通过感光器采集光照自动开关窗帘;
(3)时间控制:此功能是根据用户设定的时间一次性开关窗帘,并显示当前温度。

(4)温度报警系统:可以自行设置温度报警温度。
(5)时间显示及闹钟系统:可以自行设置闹钟时间。
(6)手动自动控制按键随时切换

制作出来的自动窗帘实物图如下:
IMG_5972.JPG IMG_5973.JPG

仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
0.png

智能窗户元件清单
1)    9*15万用板
2)    STC89C52单片机
3)    40脚IC座
4)    LCD1602液晶
5)    16P液晶IC座
6)    10k电阻*2
7)    1K电阻*4
8)    8550三极管*2
9)    MO-2烟雾模块
10)    4P排针
11)    杜邦线*4
12)    蜂鸣器
13)    5MM草帽LED灯*3
14)    10uf电容
15)    30pf电容*2
16)    12M晶振
17)    轻触按键*6
18)    ULN2003A芯片
19)    16脚IC座
20)    步进电机
21)    5P白色插口
22)    DS1302
23)    ADC0832
24)    8脚IC座*2
25)    32.768K晶振
26)    3V纽扣电池(含底座)
27)    光敏电阻
28)    103电位器
29)    3P圆孔母座
30)    DS18B20温度传感器
31)    自锁开关
32)    DC电源插口
33)    导线若干
34)    电池盒

单片机自动窗帘源程序:

  1. #include <reg52.h>
  2.    
  3. #define uchar unsigned char
  4. #define uint  unsigned int  
  5. bit flag_200ms ;
  6. sbit beep = P1^7;     //蜂鸣器IO口定义
  7. sbit LED=P2^7;        //灯光模块
  8. sbit yw=P2^6;         //烟雾模块
  9. bit flag_relay_en;   
  10. uchar flag_kaig_moshi=0;//开关模式
  11. bit flag_zd_sd;    //自动 手动 模式
  12. bit flag_lj_en;   //按键连加使能
  13. bit flag_lj_3_en;  //按键连3次连加后使能 加的数就越大了
  14. uchar key_time,flag_value;      //用做连加的中间变量
  15. bit key_500ms  ;
  16. uchar menu_shudu = 20;  //用来控制连加的速度
  17. uchar value,i;
  18. uchar k_shi=1,k_fen=2; //开窗帘时间
  19. uchar g_shi=3,g_fen=4;   //关窗帘时间

  20. uint t_high;                  //高温报警值
  21. sbit DO=P3^7;  //DO定义为P1口的第4位脚,连接ADC0832DO脚
  22. sbit SCL=P3^6;  //SCL定义为P1口的第3位脚,连接ADC0832SCL脚
  23. sbit CS=P3^5;  //CS定义为P1口的第4位脚,连接ADC0832CS脚
  24. uchar guanxian,guanxian_set = 4;     //光线
  25. void write_eepom();

  26. #include "eepom52.h"
  27. #include "key.h"
  28. #include "ds1302.h"
  29. #include "lcd1602.h"
  30. #include "18b20_2lu.h"
  31. #include "bujindianji.h"
  32. sbit key_jia = P3^1;   //加
  33. sbit key_jie = P3^2;   //减

  34. /*************写单片机内部EEPOM*************/
  35. void write_eepom()
  36. {
  37. SectorErase(0x2000);
  38. byte_write(0x2000,flag_zd_sd);
  39. byte_write(0x2001,k_shi%256);
  40. byte_write(0x2002,k_fen%256);
  41. byte_write(0x2003,g_shi%256);
  42. byte_write(0x2004,g_fen%256);
  43. byte_write(0x2005,t_high%256);
  44. byte_write(0x2009,guanxian_set%256);
  45. byte_write(0x2010,bjdj_value%256);
  46. byte_write(0x2050,a_a);
  47. }
  48. /*************读单片机内部EEPOM*************/
  49. void read_eepom()
  50. {
  51. flag_zd_sd = byte_read(0x2000);
  52. k_shi  = byte_read(0x2001);
  53. k_fen  = byte_read(0x2002);
  54. g_shi  = byte_read(0x2003);
  55. g_fen  = byte_read(0x2004);
  56. t_high  = byte_read(0x2005);
  57. guanxian_set  = byte_read(0x2009);
  58. bjdj_value  = byte_read(0x2010);
  59. a_a = byte_read(0x2050);
  60. }
  61. /*************初始化EEPROM************/
  62. void init_eepom() //初始化EEPROM
  63. {
  64. read_eepom();
  65.   if(a_a == 0xff)
  66. {
  67.   flag_zd_sd = 1;     //模式设置
  68.   a_a = 1;
  69.   k_shi=8;
  70.   k_fen=2;   //开
  71.   g_shi=3;
  72.   g_fen=4;   //关
  73.   t_high  = 35;
  74.   guanxian_set = 4;
  75.   bjdj_value  = 0;
  76.   write_eepom();  
  77. }
  78. }
  79. #include "menu.h"
  80. /***************读数模转换数据****************/
  81. //请先了解ADC0832模数转换的串行协议,再来读本函数,主要是对应时序图来理解,本函数是模拟0832的串行协议进行的
  82.       //  1  0  0 通道
  83.       //  1  1  1 通道
  84. unsigned char ad0832read(bit SGL,bit ODD)
  85. {
  86. unsigned char i=0,value=0,value1=0;  
  87.   SCL=0;
  88.   DO=1;
  89.   CS=0;  //开始
  90.   SCL=1;  //第一个上升沿
  91.   SCL=0;
  92.   DO=SGL;
  93.   SCL=1;   //第二个上升沿
  94.   SCL=0;
  95.   DO=ODD;
  96.   SCL=1;     //第三个上升沿
  97.   SCL=0;     //第三个下降沿
  98.   DO=1;
  99.   for(i=0;i<8;i++)
  100.   {
  101.    SCL=1;
  102.    SCL=0; //开始从第四个下降沿接收数据
  103.    value<<=1;
  104.    if(DO)
  105.     value++;      
  106.   }
  107.   for(i=0;i<8;i++)
  108.   {   //接收校验数据
  109.    value1>>=1;
  110.    if(DO)
  111.     value1+=0x80;
  112.    SCL=1;
  113.    SCL=0;
  114.   }
  115.   CS=1;
  116.   SCL=1;
  117.   if(value==value1)  //与校验数据比较,正确就返回数据,否则返回0
  118.    return value;
  119. return 0;
  120. }

  121. /******************1ms 延时函数*******************/
  122. void delay_1ms(uint q)
  123. {
  124. uint i,j;
  125. for(i=0;i<q;i++)
  126.   for(j=0;j<120;j++);
  127. }
  128. /*************定时器0初始化程序***************/
  129. void init_1602_ds1302()
  130. {
  131. write_sfm2_ds1302(2,4,nian);
  132. write_sfm2_ds1302(2,7,yue);
  133. write_sfm2_ds1302(2,10,ri);
  134. write_sfm2_ds1302(1,4,shi);
  135. write_sfm2_ds1302(1,7,fen);
  136. write_sfm2_ds1302(1,10,miao);
  137. write_sfm1(1,14,week);  
  138. }            
  139. /*************定时器0初始化程序***************/
  140. void init_time0()   
  141. {
  142. EA   = 1;     //开总中断
  143. TMOD = 0X01;   //定时器0、工作方式1
  144. ET0  = 1;    //开定时器0中断
  145. TR0  = 1;    //允许定时器0定时
  146. }
  147. /*************手动开关窗帘***************/
  148. void shoudong_kaiguan()   //手动开关窗帘
  149. {
  150. if(flag_zd_sd == 0)   //手动模式
  151. {
  152.   if(guanxian <= guanxian_set)
  153.     LED=0;
  154.    else
  155.     LED=1;
  156.   if(menu_1 == 0)
  157.   {
  158.    if(flag_kaig_moshi == 0)
  159.    {
  160.     if(key_can == 2)
  161.      flag_z_f = 1;     //手动开窗
  162.     if(key_can == 3)
  163.      flag_z_f = 2;     //手动关窗
  164.     if(flag_lj_en == 0)
  165.      flag_z_f = 0;
  166.    }
  167.   }
  168. }
  169. if(flag_kaig_moshi == 0)
  170. {

  171.   if(flag_zd_sd == 1)   //自动模式
  172.   {
  173.    
  174.    if(guanxian <= guanxian_set)
  175.     flag_z_f = 2;     //手动开窗
  176.    
  177.    
  178.    else
  179.     flag_z_f = 1;     //手动关窗
  180.    
  181.   
  182.   }
  183. }
  184. }
  185.                
  186. /*********************智能窗帘处理函数***********************/
  187. void zinengchuanglian_dis()   //智能窗帘处理函数
  188. {
  189. if((miao == 0) && (fen == k_fen) && (shi == k_shi))   //定时开窗
  190. {
  191.   flag_z_f = 2;    //关窗
  192.   beep=0;     //闹钟到
  193.   flag_kaig_moshi = 1;
  194. }
  195. if((miao == 0) && (fen == g_fen) && (shi == g_shi))   //定时关窗
  196. {
  197.   flag_z_f = 1;     //开窗   
  198.   flag_kaig_moshi = 2;
  199. }
  200. }

  201. void main()
  202. {
  203. init_eepom();   //初始化EEPROM
  204. init_1602();   //lcd1602初始化
  205. init_1602_dis_csf(); //lcd1602初始化显示
  206. init_ds1302_io();  //初始化ds1302Io
  207. init_time0();   //初始化定时器
  208. menu_1_break();      //菜单初始界面
  209. init_ds1302();   //ds1302初始化
  210. temperature1 = read1_temp();  //读温度1
  211. delay_1ms(650);
  212. while(1)
  213. {
  214.   key();    //按键程序
  215.   if(key_can < 10)
  216.   {
  217.    key_with();
  218.   }
  219.   shoudong_kaiguan();   //手动开关窗帘
  220.   if(flag_200ms == 1)
  221.   {  
  222.    flag_200ms = 0;
  223.    temperature1 = read1_temp();  //读温度1 环境温度
  224.    if(temperature1 >= 99)
  225.     temperature1 = 99;
  226.    zinengchuanglian_dis();   //智能窗帘处理函数
  227.    guanxian = ad0832read(1,0) * 9.0 / 255;
  228.    if((menu_1 == 0))
  229.    {
  230.     read_time();    //读时间
  231.     init_1602_ds1302();   //显示时钟
  232.     write_sfm_18b20(2,13,temperature1); //显示温度
  233.     write_sfm1(2,0,guanxian); //显示温度
  234.        if(guanxian <= guanxian_set)
  235.     LED=0;
  236.    else
  237.     LED=1;
  238.     if((temperature1 >= t_high)||(yw==0))
  239.      beep = ~beep;   //蜂鸣器温度烟雾报警
  240.     else
  241.      beep = 1;        
  242.    }
  243.   }
  244.   bujindj();  //步进电机函数
  245. }
  246. }
  247. void time0() interrupt 1
  248. {   
  249. static uchar value;
  250. TH0 = 0X3C;
  251. TL0 = 0XB0;    //50ms
  252. value ++;
  253. if(value >= 4)    //200ms
  254. {
  255.   value = 0;
  256.   flag_200ms = 1;
  257. }
  258. if(flag_lj_en == 1)    //按下按键使能
  259. {
  260.   key_time ++;
  261.   if(key_time >= menu_shudu) //500ms
  262.   {
  263.    key_time = 0;
  264.    key_500ms = 1; //500ms
  265.    flag_value ++;
  266.    if(flag_value > 3)
  267.    {
  268.     flag_value = 10;
  269.     flag_lj_3_en = 1; //3次后1.5秒后连加大些
  270.    }      
  271.   }
  272. }
  273. }
复制代码

全部资料51hei下载地址:
基于单片机自动窗帘控制系统设计(烟雾+灯控).7z (10.17 MB, 下载次数: 442)

评分

参与人数 2黑币 +80 收起 理由
dww465757120 + 30 共享资料的黑币奖励!
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:481306 发表于 2019-2-28 07:12 来自手机 | 显示全部楼层
非常不错,感谢分享。
回复

使用道具 举报

ID:247623 发表于 2019-2-28 09:45 | 显示全部楼层
非常好,感谢
回复

使用道具 举报

ID:333678 发表于 2019-2-28 19:25 | 显示全部楼层
很好,多谢分享。
回复

使用道具 举报

ID:496846 发表于 2019-3-23 17:41 | 显示全部楼层
xqtop 发表于 2019-2-28 07:12
非常不错,感谢分享。

能发我吗   我下载不了
回复

使用道具 举报

ID:497589 发表于 2019-4-19 22:26 | 显示全部楼层
非常厉害的设计,功能很多,其实在这个实验中还可以标注出各个独立键在设置时所能设置的功能,方便用户使用
回复

使用道具 举报

ID:497589 发表于 2019-5-2 20:46 | 显示全部楼层
楼主,你的这个作品 我试着做了  为什么时钟显示始终设置不了呢,而且显示会出问题,设置了时间马上就会还原了。求解
回复

使用道具 举报

ID:116064 发表于 2019-5-4 10:41 | 显示全部楼层
为什么,我无法下载
回复

使用道具 举报

ID:536855 发表于 2019-5-13 13:07 | 显示全部楼层
很不错的程序设计,Nice!
回复

使用道具 举报

ID:536855 发表于 2019-5-13 22:19 | 显示全部楼层
下载以后尝试了很不错的东西!很缜密的
回复

使用道具 举报

ID:537743 发表于 2019-5-14 10:45 | 显示全部楼层
好东西,要弄个来试试。
回复

使用道具 举报

ID:537743 发表于 2019-5-14 10:49 | 显示全部楼层
如果可以配上遥控器就完美了。
回复

使用道具 举报

ID:536855 发表于 2019-5-15 21:33 | 显示全部楼层
尝试了以后很棒的体验
回复

使用道具 举报

ID:540303 发表于 2019-5-24 16:12 | 显示全部楼层
解了燃眉之急,很好用,谢谢
回复

使用道具 举报

ID:660987 发表于 2019-12-10 20:38 | 显示全部楼层
很nice
回复

使用道具 举报

ID:633713 发表于 2019-12-11 14:34 来自手机 | 显示全部楼层
很实用,不错
回复

使用道具 举报

ID:582255 发表于 2020-4-17 21:21 | 显示全部楼层
好资料,学习了
回复

使用道具 举报

ID:368810 发表于 2020-5-23 11:08 | 显示全部楼层
楼主仿真图里没有光敏电阻啊?
回复

使用道具 举报

ID:472519 发表于 2020-5-23 14:12 | 显示全部楼层
谢谢分享!学习!!!
回复

使用道具 举报

ID:755024 发表于 2020-11-2 16:58 来自手机 | 显示全部楼层
很好满足需求
回复

使用道具 举报

ID:350104 发表于 2020-11-2 21:25 | 显示全部楼层
这个确实好  优化扩展一下可以用在其他方面
回复

使用道具 举报

ID:836287 发表于 2020-11-3 14:39 | 显示全部楼层
非常不错,我借用学习学习
回复

使用道具 举报

ID:885457 发表于 2021-2-22 07:19 | 显示全部楼层

非常不错,我借用学习学习
回复

使用道具 举报

ID:885725 发表于 2021-2-25 10:52 | 显示全部楼层

清单中第14项10μf电容,板上好像没有?

本帖最后由 whbt51h 于 2021-2-26 10:37 编辑

感谢楼主分享。请问这个16P的IC座是什么样的?
清单.PNG
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表