|
內(nèi)涵程序,文檔,仿真圖等文件,需要的請(qǐng)下載
智能窗戶 AT89S52 1602顯示 步進(jìn)電機(jī)轉(zhuǎn)動(dòng)模擬開窗關(guān)窗
(1)手動(dòng)控制:該功能是根據(jù)用戶的需求通過按鍵進(jìn)行窗簾的開關(guān),此功能可以使窗簾的開閉處于任何一種狀態(tài);
(2)光照自動(dòng)控制:系統(tǒng)可以根據(jù)用戶設(shè)定的光照強(qiáng)度值通過感光器采集光照自動(dòng)開關(guān)窗簾;
(3)時(shí)間控制:此功能是根據(jù)用戶設(shè)定的時(shí)間一次性開關(guān)窗簾,并顯示當(dāng)前溫度。
(4)溫度報(bào)警系統(tǒng):可以自行設(shè)置溫度報(bào)警溫度。
(5)時(shí)間顯示及鬧鐘系統(tǒng):可以自行設(shè)置鬧鐘時(shí)間。
(6)手動(dòng)自動(dòng)控制按鍵隨時(shí)切換
制作出來的自動(dòng)窗簾實(shí)物圖如下:
IMG_5972.JPG (1.18 MB, 下載次數(shù): 66)
下載附件
2019-2-27 17:53 上傳
IMG_5973.JPG (1.14 MB, 下載次數(shù): 71)
下載附件
2019-2-27 17:53 上傳
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
0.png (29.37 KB, 下載次數(shù): 71)
下載附件
2019-2-28 03:15 上傳
智能窗戶元件清單
1) 9*15萬用板
2) STC89C52單片機(jī)
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) 步進(jìn)電機(jī)
21) 5P白色插口
22) DS1302
23) ADC0832
24) 8腳IC座*2
25) 32.768K晶振
26) 3V紐扣電池(含底座)
27) 光敏電阻
28) 103電位器
29) 3P圓孔母座
30) DS18B20溫度傳感器
31) 自鎖開關(guān)
32) DC電源插口
33) 導(dǎo)線若干
34) 電池盒
單片機(jī)自動(dòng)窗簾源程序:
- #include <reg52.h>
-
- #define uchar unsigned char
- #define uint unsigned int
- bit flag_200ms ;
- sbit beep = P1^7; //蜂鳴器IO口定義
- sbit LED=P2^7; //燈光模塊
- sbit yw=P2^6; //煙霧模塊
- bit flag_relay_en;
- uchar flag_kaig_moshi=0;//開關(guān)模式
- bit flag_zd_sd; //自動(dòng) 手動(dòng) 模式
- bit flag_lj_en; //按鍵連加使能
- bit flag_lj_3_en; //按鍵連3次連加后使能 加的數(shù)就越大了
- uchar key_time,flag_value; //用做連加的中間變量
- bit key_500ms ;
- uchar menu_shudu = 20; //用來控制連加的速度
- uchar value,i;
- uchar k_shi=1,k_fen=2; //開窗簾時(shí)間
- uchar g_shi=3,g_fen=4; //關(guān)窗簾時(shí)間
- uint t_high; //高溫報(bào)警值
- sbit DO=P3^7; //DO定義為P1口的第4位腳,連接ADC0832DO腳
- sbit SCL=P3^6; //SCL定義為P1口的第3位腳,連接ADC0832SCL腳
- sbit CS=P3^5; //CS定義為P1口的第4位腳,連接ADC0832CS腳
- uchar guanxian,guanxian_set = 4; //光線
- void write_eepom();
- #include "eepom52.h"
- #include "key.h"
- #include "ds1302.h"
- #include "lcd1602.h"
- #include "18b20_2lu.h"
- #include "bujindianji.h"
- sbit key_jia = P3^1; //加
- sbit key_jie = P3^2; //減
- /*************寫單片機(jī)內(nèi)部EEPOM*************/
- void write_eepom()
- {
- SectorErase(0x2000);
- byte_write(0x2000,flag_zd_sd);
- byte_write(0x2001,k_shi%256);
- byte_write(0x2002,k_fen%256);
- byte_write(0x2003,g_shi%256);
- byte_write(0x2004,g_fen%256);
- byte_write(0x2005,t_high%256);
- byte_write(0x2009,guanxian_set%256);
- byte_write(0x2010,bjdj_value%256);
- byte_write(0x2050,a_a);
- }
- /*************讀單片機(jī)內(nèi)部EEPOM*************/
- void read_eepom()
- {
- flag_zd_sd = byte_read(0x2000);
- k_shi = byte_read(0x2001);
- k_fen = byte_read(0x2002);
- g_shi = byte_read(0x2003);
- g_fen = byte_read(0x2004);
- t_high = byte_read(0x2005);
- guanxian_set = byte_read(0x2009);
- bjdj_value = byte_read(0x2010);
- a_a = byte_read(0x2050);
- }
- /*************初始化EEPROM************/
- void init_eepom() //初始化EEPROM
- {
- read_eepom();
- if(a_a == 0xff)
- {
- flag_zd_sd = 1; //模式設(shè)置
- a_a = 1;
- k_shi=8;
- k_fen=2; //開
- g_shi=3;
- g_fen=4; //關(guān)
- t_high = 35;
- guanxian_set = 4;
- bjdj_value = 0;
- write_eepom();
- }
- }
- #include "menu.h"
- /***************讀數(shù)模轉(zhuǎn)換數(shù)據(jù)****************/
- //請(qǐng)先了解ADC0832模數(shù)轉(zhuǎn)換的串行協(xié)議,再來讀本函數(shù),主要是對(duì)應(yīng)時(shí)序圖來理解,本函數(shù)是模擬0832的串行協(xié)議進(jìn)行的
- // 1 0 0 通道
- // 1 1 1 通道
- unsigned char ad0832read(bit SGL,bit ODD)
- {
- unsigned char i=0,value=0,value1=0;
- SCL=0;
- DO=1;
- CS=0; //開始
- SCL=1; //第一個(gè)上升沿
- SCL=0;
- DO=SGL;
- SCL=1; //第二個(gè)上升沿
- SCL=0;
- DO=ODD;
- SCL=1; //第三個(gè)上升沿
- SCL=0; //第三個(gè)下降沿
- DO=1;
- for(i=0;i<8;i++)
- {
- SCL=1;
- SCL=0; //開始從第四個(gè)下降沿接收數(shù)據(jù)
- value<<=1;
- if(DO)
- value++;
- }
- for(i=0;i<8;i++)
- { //接收校驗(yàn)數(shù)據(jù)
- value1>>=1;
- if(DO)
- value1+=0x80;
- SCL=1;
- SCL=0;
- }
- CS=1;
- SCL=1;
- if(value==value1) //與校驗(yàn)數(shù)據(jù)比較,正確就返回?cái)?shù)據(jù),否則返回0
- return value;
- return 0;
- }
- /******************1ms 延時(shí)函數(shù)*******************/
- void delay_1ms(uint q)
- {
- uint i,j;
- for(i=0;i<q;i++)
- for(j=0;j<120;j++);
- }
- /*************定時(shí)器0初始化程序***************/
- void init_1602_ds1302()
- {
- write_sfm2_ds1302(2,4,nian);
- write_sfm2_ds1302(2,7,yue);
- write_sfm2_ds1302(2,10,ri);
- write_sfm2_ds1302(1,4,shi);
- write_sfm2_ds1302(1,7,fen);
- write_sfm2_ds1302(1,10,miao);
- write_sfm1(1,14,week);
- }
- /*************定時(shí)器0初始化程序***************/
- void init_time0()
- {
- EA = 1; //開總中斷
- TMOD = 0X01; //定時(shí)器0、工作方式1
- ET0 = 1; //開定時(shí)器0中斷
- TR0 = 1; //允許定時(shí)器0定時(shí)
- }
- /*************手動(dòng)開關(guān)窗簾***************/
- void shoudong_kaiguan() //手動(dòng)開關(guān)窗簾
- {
- if(flag_zd_sd == 0) //手動(dòng)模式
- {
- if(guanxian <= guanxian_set)
- LED=0;
- else
- LED=1;
- if(menu_1 == 0)
- {
- if(flag_kaig_moshi == 0)
- {
- if(key_can == 2)
- flag_z_f = 1; //手動(dòng)開窗
- if(key_can == 3)
- flag_z_f = 2; //手動(dòng)關(guān)窗
- if(flag_lj_en == 0)
- flag_z_f = 0;
- }
- }
- }
- if(flag_kaig_moshi == 0)
- {
- if(flag_zd_sd == 1) //自動(dòng)模式
- {
-
- if(guanxian <= guanxian_set)
- flag_z_f = 2; //手動(dòng)開窗
-
-
- else
- flag_z_f = 1; //手動(dòng)關(guān)窗
-
-
- }
- }
- }
-
- /*********************智能窗簾處理函數(shù)***********************/
- void zinengchuanglian_dis() //智能窗簾處理函數(shù)
- {
- if((miao == 0) && (fen == k_fen) && (shi == k_shi)) //定時(shí)開窗
- {
- flag_z_f = 2; //關(guān)窗
- beep=0; //鬧鐘到
- flag_kaig_moshi = 1;
- }
- if((miao == 0) && (fen == g_fen) && (shi == g_shi)) //定時(shí)關(guān)窗
- {
- flag_z_f = 1; //開窗
- flag_kaig_moshi = 2;
- }
- }
- void main()
- {
- init_eepom(); //初始化EEPROM
- init_1602(); //lcd1602初始化
- init_1602_dis_csf(); //lcd1602初始化顯示
- init_ds1302_io(); //初始化ds1302Io
- init_time0(); //初始化定時(shí)器
- menu_1_break(); //菜單初始界面
- init_ds1302(); //ds1302初始化
- temperature1 = read1_temp(); //讀溫度1
- delay_1ms(650);
- while(1)
- {
- key(); //按鍵程序
- if(key_can < 10)
- {
- key_with();
- }
- shoudong_kaiguan(); //手動(dòng)開關(guān)窗簾
- if(flag_200ms == 1)
- {
- flag_200ms = 0;
- temperature1 = read1_temp(); //讀溫度1 環(huán)境溫度
- if(temperature1 >= 99)
- temperature1 = 99;
- zinengchuanglian_dis(); //智能窗簾處理函數(shù)
- guanxian = ad0832read(1,0) * 9.0 / 255;
- if((menu_1 == 0))
- {
- read_time(); //讀時(shí)間
- init_1602_ds1302(); //顯示時(shí)鐘
- write_sfm_18b20(2,13,temperature1); //顯示溫度
- write_sfm1(2,0,guanxian); //顯示溫度
- if(guanxian <= guanxian_set)
- LED=0;
- else
- LED=1;
- if((temperature1 >= t_high)||(yw==0))
- beep = ~beep; //蜂鳴器溫度煙霧報(bào)警
- else
- beep = 1;
- }
- }
- bujindj(); //步進(jìn)電機(jī)函數(shù)
- }
- }
- void time0() interrupt 1
- {
- static uchar value;
- TH0 = 0X3C;
- TL0 = 0XB0; //50ms
- value ++;
- if(value >= 4) //200ms
- {
- value = 0;
- flag_200ms = 1;
- }
- if(flag_lj_en == 1) //按下按鍵使能
- {
- key_time ++;
- if(key_time >= menu_shudu) //500ms
- {
- key_time = 0;
- key_500ms = 1; //500ms
- flag_value ++;
- if(flag_value > 3)
- {
- flag_value = 10;
- flag_lj_3_en = 1; //3次后1.5秒后連加大些
- }
- }
- }
- }
復(fù)制代碼
全部資料51hei下載地址:
基于單片機(jī)自動(dòng)窗簾控制系統(tǒng)設(shè)計(jì)(煙霧+燈控).7z
(10.17 MB, 下載次數(shù): 445)
2019-2-28 03:21 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
評(píng)分
-
查看全部評(píng)分
|