內涵程序,文檔,仿真圖等文件,需要的請下載
智能窗戶 AT89S52 1602顯示 步進電機轉動模擬開窗關窗
(1)手動控制:該功能是根據用戶的需求通過按鍵進行窗簾的開關,此功能可以使窗簾的開閉處于任何一種狀態;
(2)光照自動控制:系統可以根據用戶設定的光照強度值通過感光器采集光照自動開關窗簾;
(3)時間控制:此功能是根據用戶設定的時間一次性開關窗簾,并顯示當前溫度。
(4)溫度報警系統:可以自行設置溫度報警溫度。
(5)時間顯示及鬧鐘系統:可以自行設置鬧鐘時間。
(6)手動自動控制按鍵隨時切換
制作出來的自動窗簾實物圖如下:
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
智能窗戶元件清單
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) 電池盒
單片機自動窗簾源程序:
- #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;//開關模式
- bit flag_zd_sd; //自動 手動 模式
- bit flag_lj_en; //按鍵連加使能
- bit flag_lj_3_en; //按鍵連3次連加后使能 加的數就越大了
- uchar key_time,flag_value; //用做連加的中間變量
- bit key_500ms ;
- uchar menu_shudu = 20; //用來控制連加的速度
- uchar value,i;
- uchar k_shi=1,k_fen=2; //開窗簾時間
- uchar g_shi=3,g_fen=4; //關窗簾時間
- uint t_high; //高溫報警值
- 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; //減
- /*************寫單片機內部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);
- }
- /*************讀單片機內部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; //模式設置
- a_a = 1;
- k_shi=8;
- k_fen=2; //開
- g_shi=3;
- g_fen=4; //關
- t_high = 35;
- guanxian_set = 4;
- bjdj_value = 0;
- write_eepom();
- }
- }
- #include "menu.h"
- /***************讀數模轉換數據****************/
- //請先了解ADC0832模數轉換的串行協議,再來讀本函數,主要是對應時序圖來理解,本函數是模擬0832的串行協議進行的
- // 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; //第一個上升沿
- SCL=0;
- DO=SGL;
- SCL=1; //第二個上升沿
- SCL=0;
- DO=ODD;
- SCL=1; //第三個上升沿
- SCL=0; //第三個下降沿
- DO=1;
- for(i=0;i<8;i++)
- {
- SCL=1;
- SCL=0; //開始從第四個下降沿接收數據
- value<<=1;
- if(DO)
- value++;
- }
- for(i=0;i<8;i++)
- { //接收校驗數據
- value1>>=1;
- if(DO)
- value1+=0x80;
- SCL=1;
- SCL=0;
- }
- CS=1;
- SCL=1;
- if(value==value1) //與校驗數據比較,正確就返回數據,否則返回0
- return value;
- return 0;
- }
- /******************1ms 延時函數*******************/
- void delay_1ms(uint q)
- {
- uint i,j;
- for(i=0;i<q;i++)
- for(j=0;j<120;j++);
- }
- /*************定時器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);
- }
- /*************定時器0初始化程序***************/
- void init_time0()
- {
- EA = 1; //開總中斷
- TMOD = 0X01; //定時器0、工作方式1
- ET0 = 1; //開定時器0中斷
- TR0 = 1; //允許定時器0定時
- }
- /*************手動開關窗簾***************/
- void shoudong_kaiguan() //手動開關窗簾
- {
- if(flag_zd_sd == 0) //手動模式
- {
- 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; //手動開窗
- if(key_can == 3)
- flag_z_f = 2; //手動關窗
- if(flag_lj_en == 0)
- flag_z_f = 0;
- }
- }
- }
- if(flag_kaig_moshi == 0)
- {
- if(flag_zd_sd == 1) //自動模式
- {
-
- if(guanxian <= guanxian_set)
- flag_z_f = 2; //手動開窗
-
-
- else
- flag_z_f = 1; //手動關窗
-
-
- }
- }
- }
-
- /*********************智能窗簾處理函數***********************/
- void zinengchuanglian_dis() //智能窗簾處理函數
- {
- if((miao == 0) && (fen == k_fen) && (shi == k_shi)) //定時開窗
- {
- flag_z_f = 2; //關窗
- beep=0; //鬧鐘到
- flag_kaig_moshi = 1;
- }
- if((miao == 0) && (fen == g_fen) && (shi == g_shi)) //定時關窗
- {
- 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(); //初始化定時器
- menu_1_break(); //菜單初始界面
- init_ds1302(); //ds1302初始化
- temperature1 = read1_temp(); //讀溫度1
- delay_1ms(650);
- while(1)
- {
- key(); //按鍵程序
- if(key_can < 10)
- {
- key_with();
- }
- shoudong_kaiguan(); //手動開關窗簾
- if(flag_200ms == 1)
- {
- flag_200ms = 0;
- temperature1 = read1_temp(); //讀溫度1 環境溫度
- if(temperature1 >= 99)
- temperature1 = 99;
- zinengchuanglian_dis(); //智能窗簾處理函數
- guanxian = ad0832read(1,0) * 9.0 / 255;
- if((menu_1 == 0))
- {
- read_time(); //讀時間
- init_1602_ds1302(); //顯示時鐘
- 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; //蜂鳴器溫度煙霧報警
- else
- beep = 1;
- }
- }
- bujindj(); //步進電機函數
- }
- }
- 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秒后連加大些
- }
- }
- }
- }
復制代碼
全部資料51hei下載地址:
基于單片機自動窗簾控制系統設計(煙霧+燈控).7z
(10.17 MB, 下載次數: 445)
2019-2-28 03:21 上傳
點擊文件名下載附件
|