|
整個(gè)系統(tǒng)以AT89C52單片機(jī)為核心器件,配合電阻電容晶振等器件,構(gòu)成單片機(jī)的最小系統(tǒng)。其它個(gè)模塊圍繞著單片機(jī)最小系統(tǒng)展開。其中包括,顯示設(shè)備使用1602液晶,可以同時(shí)顯示年、月、日、時(shí)、分、控制模式、光照強(qiáng)度等基本信息;時(shí)鐘模塊采用DS1302芯片,初始化之后,就會(huì)開始運(yùn)行計(jì)算時(shí)間,單片機(jī)只需進(jìn)行時(shí)間信息的讀取即可;光照檢測(cè)電路采用光敏電阻和模數(shù)轉(zhuǎn)換芯片ADC0832,將模擬量數(shù)字化并顯示出來;窗簾使用步進(jìn)電機(jī)進(jìn)行代替模擬,同時(shí)配有一個(gè)LED燈用來指示窗簾當(dāng)前的開關(guān)狀態(tài);本設(shè)計(jì)還有5個(gè)按鍵作為操作輸入設(shè)備,可以對(duì)當(dāng)前時(shí)間進(jìn)行調(diào)整設(shè)置和設(shè)置窗簾開關(guān)時(shí)間和光控閾值等;最后是供電采用常用的USB 5V進(jìn)行供電。智能窗簾控制系統(tǒng)具有以下幾個(gè)基本功能:
(1)手動(dòng)控制:該功能是根據(jù)用戶的需求通過按鍵進(jìn)行窗簾的開關(guān),此功能可以使窗簾的開閉處于任何一種狀態(tài);
(2)光照自動(dòng)控制:系統(tǒng)可以根據(jù)用戶設(shè)定的光照強(qiáng)度值通過感光器采集光照自動(dòng)開光窗簾;
(3)時(shí)間控制:此功能是根據(jù)用戶設(shè)定的時(shí)間一次性開關(guān)窗簾。
(4)可以通過按鍵是上面三種控制模式循環(huán)切換。
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
51hei.gif (188.59 KB, 下載次數(shù): 18)
下載附件
2022-12-12 03:33 上傳
單片機(jī)源程序如下:
- #include <reg52.h>
- #include <intrins.h>
- #define uchar unsigned char // 以后unsigned char就可以用uchar代替
- #define uint unsigned int // 以后unsigned int 就可以用uint 代替
- sbit ADC_CS = P1^6; // ADC0832的CS引腳
- sbit ADC_CLK = P1^7; // ADC0832的CLK引腳
- sbit ADC_DAT = P3^2; // ADC0832的DI/DO引腳
- sbit SCK_P = P1^0; // 時(shí)鐘芯片DS1302的SCK管腳
- sbit SDA_P = P1^1; // 時(shí)鐘芯片DS1302的SDA管腳
- sbit RST_P = P1^2; // 時(shí)鐘芯片DS1302的RST管腳
- sbit LcdRs_P = P1^3; // 1602液晶的RS管腳
- sbit LcdRw_P = P1^4; // 1602液晶的RW管腳
- sbit LcdEn_P = P1^5; // 1602液晶的EN管腳
- sbit KeyMode_P = P3^3; // 模式切換
- sbit KeySet_P = P3^4; // 設(shè)置時(shí)間按鍵
- sbit KeySet2_P = P3^5; // 設(shè)置時(shí)間模式的開關(guān)時(shí)間和光照控制強(qiáng)度
- sbit KeyDown_P = P3^6; // 減按鍵
- sbit KeyUp_P = P3^7; // 加按鍵
- sbit Led_P = P2^0; // 指示燈
- uchar gMode=1; // 1是手動(dòng)模式,2是時(shí)間自動(dòng)模式,3是亮度自動(dòng)模式
- uchar OpenHour = 18; // 開啟窗簾的小時(shí)
- uchar OpenMinute = 20; // 開啟窗簾的分鐘
- uchar CloseHour = 10; // 關(guān)閉窗簾的小時(shí)
- uchar CloseMinute = 30; // 關(guān)閉窗簾的分鐘
- uchar gLight = 40; // 窗簾開關(guān)的閾值
- uchar code Clock[]={0x10,0x90,0x80,0xc0}; // 步進(jìn)電機(jī)順時(shí)針旋轉(zhuǎn)數(shù)組
- uchar code AntiClock[]={0x80,0x90,0x10,0x30}; // 步進(jìn)電機(jī)逆時(shí)針旋轉(zhuǎn)數(shù)組
- uchar code Clock1[]={0x10,0x90,0x80,0xc0};
- uchar TimeBuff[7]={17,9,1,6,18,30,40}; // 時(shí)間數(shù)組,默認(rèn)2017年9月1日,星期五,18:30:40
- // TimeBuff[0] 代表年份,范圍00-99
- // TimeBuff[1] 代表月份,范圍1-12
- // TimeBuff[2] 代表日期,范圍1-31
- // TimeBuff[3] 代表星期,范圍1-7
- // TimeBuff[4] 代表小時(shí),范圍00-23
- // TimeBuff[5] 代表分鐘,范圍00-59
- // TimeBuff[6] 代表秒鐘,范圍00-59
- /*********************************************************/
- // 按鍵掃描(設(shè)置當(dāng)前時(shí)間)
- /*********************************************************/
- void KeyScanf1()
- {
- if(KeySet_P==0)
- {
- LcdGotoXY(0,13); // 顯示秒鐘的冒號(hào)
- LcdWriteData(':');
- LcdWriteCmd(0x0f); // 啟動(dòng)光標(biāo)閃爍
- LcdGotoXY(0,3); // 定位光標(biāo)到年份閃爍
- DelayMs(10); // 延時(shí)等待,消除按鍵按下的抖動(dòng)
- while(!KeySet_P); // 等待按鍵釋放
- DelayMs(10); // 延時(shí)等待,消除按鍵松開的抖動(dòng)
-
- /* 調(diào)整年份 */
- while(1)
- {
- if(KeyDown_P==0) // 如果減按鍵被下去
- {
- if(TimeBuff[0]>0) // 判斷年份是否大于0
- TimeBuff[0]--; // 是的話就減去1
- LcdGotoXY(0,2); // 光標(biāo)定位到年份的位置
- LcdPrintNum(TimeBuff[0]); // 刷新顯示改變后的年份
- LcdGotoXY(0,3); // 定位光標(biāo)到年份閃爍
- DelayMs(300); // 延時(shí)0.3秒左右
- }
-
- if(KeyUp_P==0) // 如果加按鍵被下去
- {
- if(TimeBuff[0]<99) // 判斷年份是否小于99
- TimeBuff[0]++; // 是的話就加上1
- LcdGotoXY(0,2); // 光標(biāo)定位到年份的位置
- LcdPrintNum(TimeBuff[0]); // 刷新顯示改變后的年份
- LcdGotoXY(0,3); // 定位光標(biāo)到年份閃爍
- DelayMs(300); // 延時(shí)0.3秒左右
- }
-
- if(KeySet_P==0)
- {
- break;
- }
- }
-
- LcdGotoXY(0,6); // 定位光標(biāo)到月份閃爍
- DelayMs(10); // 延時(shí)等待,消除按鍵按下的抖動(dòng)
- while(!KeySet_P); // 等待按鍵釋放
- DelayMs(10); // 延時(shí)等待,消除按鍵松開的抖動(dòng)
-
- /* 調(diào)整月份 */
- while(1)
- {
- if(KeyDown_P==0) // 如果減按鍵被下去
- {
- if(TimeBuff[1]>1) // 判斷月份是否大于1
- TimeBuff[1]--; // 是的話就減去1
- LcdGotoXY(0,5); // 光標(biāo)定位到月份的位置
- LcdPrintNum(TimeBuff[1]); // 刷新顯示改變后的月份
- LcdGotoXY(0,6); // 定位光標(biāo)到月份閃爍
- DelayMs(300); // 延時(shí)0.3秒左右
- }
-
- if(KeyUp_P==0) // 如果加按鍵被下去
- {
- if(TimeBuff[1]<12) // 判斷月份是否小于12
- TimeBuff[1]++; // 是的話就加上1
- LcdGotoXY(0,5); // 光標(biāo)定位到月份的位置
- LcdPrintNum(TimeBuff[1]); // 刷新顯示改變后的月份
- LcdGotoXY(0,6); // 定位光標(biāo)到月份閃爍
- DelayMs(300); // 延時(shí)0.3秒左右
- }
-
- if(KeySet_P==0)
- {
- break;
- }
- }
-
- LcdGotoXY(0,9); // 定位光標(biāo)到日期閃爍
- DelayMs(10); // 延時(shí)等待,消除按鍵按下的抖動(dòng)
- while(!KeySet_P); // 等待按鍵釋放
- DelayMs(10); // 延時(shí)等待,消除按鍵松開的抖動(dòng)
-
- /* 調(diào)整日期 */
- while(1)
- {
- if(KeyDown_P==0) // 如果減按鍵被下去
- {
- if(TimeBuff[2]>1) // 判斷日期是否大于1
- TimeBuff[2]--; // 是的話就減去1
- LcdGotoXY(0,8); // 光標(biāo)定位到日期的位置
- LcdPrintNum(TimeBuff[2]); // 刷新顯示改變后的日期
- LcdGotoXY(0,9); // 定位光標(biāo)到日期閃爍
- DelayMs(300); // 延時(shí)0.3秒左右
- }
-
- if(KeyUp_P==0) // 如果加按鍵被下去
- {
- if(TimeBuff[2]<31) // 判斷日期是否小于31
- TimeBuff[2]++; // 是的話就加上1
- LcdGotoXY(0,8); // 光標(biāo)定位到日期的位置
- LcdPrintNum(TimeBuff[2]); // 刷新顯示改變后的日期
- LcdGotoXY(0,9); // 定位光標(biāo)到日期閃爍
- DelayMs(300); // 延時(shí)0.3秒左右
- }
-
- if(KeySet_P==0)
- {
- break;
- }
- }
-
- LcdGotoXY(0,12); // 定位光標(biāo)到小時(shí)閃爍
- DelayMs(10); // 延時(shí)等待,消除按鍵按下的抖動(dòng)
- while(!KeySet_P); // 等待按鍵釋放
- DelayMs(10); // 延時(shí)等待,消除按鍵松開的抖動(dòng)
-
-
- /* 調(diào)整小時(shí) */
- while(1)
- {
- if(KeyDown_P==0) // 如果減按鍵被下去
- {
- if(TimeBuff[4]>0) // 判斷小時(shí)是否大于0
- TimeBuff[4]--; // 是的話就減去1
- LcdGotoXY(0,11); // 光標(biāo)定位到小時(shí)的位置
- LcdPrintNum(TimeBuff[4]); // 刷新顯示改變后的小時(shí)
- LcdGotoXY(0,12); // 定位光標(biāo)到小時(shí)閃爍
- DelayMs(300); // 延時(shí)0.3秒左右
- }
-
- if(KeyUp_P==0) // 如果加按鍵被下去
- {
- if(TimeBuff[4]<23) // 判斷小時(shí)是否小于23
- TimeBuff[4]++; // 是的話就加上1
- LcdGotoXY(0,11); // 光標(biāo)定位到小時(shí)的位置
- LcdPrintNum(TimeBuff[4]); // 刷新顯示改變后的小時(shí)
- LcdGotoXY(0,12); // 定位光標(biāo)到小時(shí)閃爍
- DelayMs(300); // 延時(shí)0.3秒左右
- }
-
- if(KeySet_P==0)
- {
- break;
- }
- }
-
- LcdGotoXY(0,15); // 定位光標(biāo)到分鐘閃爍
- DelayMs(10); // 延時(shí)等待,消除按鍵按下的抖動(dòng)
- while(!KeySet_P); // 等待按鍵釋放
- DelayMs(10); // 延時(shí)等待,消除按鍵松開的抖動(dòng)
-
- /* 調(diào)整分鐘 */
- while(1)
- {
- if(KeyDown_P==0) // 如果減按鍵被下去
- {
- if(TimeBuff[5]>0) // 判斷分鐘是否大于0
- TimeBuff[5]--; // 是的話就減去1
- LcdGotoXY(0,14); // 光標(biāo)定位到分鐘的位置
- LcdPrintNum(TimeBuff[5]); // 刷新顯示改變后的分鐘
- LcdGotoXY(0,15); // 定位光標(biāo)到分鐘閃爍
- DelayMs(300); // 延時(shí)0.3秒左右
- }
-
- if(KeyUp_P==0) // 如果加按鍵被下去
- {
- if(TimeBuff[5]<59) // 判斷分鐘是否小于59
- TimeBuff[5]++; // 是的話就加上1
- LcdGotoXY(0,14); // 光標(biāo)定位到分鐘的位置
- LcdPrintNum(TimeBuff[5]); // 刷新顯示改變后的分鐘
- LcdGotoXY(0,15); // 定位光標(biāo)到分鐘閃爍
- DelayMs(300); // 延時(shí)0.3秒左右
- }
-
- if(KeySet_P==0)
- {
- break;
- }
- }
-
- /* 退出前的設(shè)置 */
- LcdWriteCmd(0x0C); // 關(guān)閉光標(biāo)閃爍
- DS1302_Write_Time(); // 把新設(shè)置的時(shí)間值存入DS1302芯片
- DelayMs(10); // 延時(shí)等待,消除按鍵按下的抖動(dòng)
- while(!KeySet_P); // 等待按鍵釋放
- DelayMs(10); // 延時(shí)等待,消除按鍵松開的抖動(dòng)
- }
- }
- /*********************************************************/
- // 按鍵掃描(設(shè)置窗簾的動(dòng)作)
- /*********************************************************/
- void KeyScanf2()
- {
- if(KeySet2_P==0)
- {
- LcdGotoXY(0,0); // 光標(biāo)定位
- LcdPrintStr(" OpenTime : "); // 顯示第1行內(nèi)容
- LcdGotoXY(1,0); // 光標(biāo)定位
- LcdPrintStr("CloseTime : "); // 顯示第2行內(nèi)容
- LcdGotoXY(0,10); // 光標(biāo)定位
- LcdPrintNum(OpenHour); // 顯示開啟窗簾的小時(shí)
- LcdGotoXY(0,13); // 光標(biāo)定位
- LcdPrintNum(OpenMinute); // 顯示開啟窗簾的分鐘
- LcdGotoXY(1,10); // 光標(biāo)定位
- LcdPrintNum(CloseHour); // 顯示關(guān)閉窗簾的小時(shí)
- LcdGotoXY(1,13); // 光標(biāo)定位
- LcdPrintNum(CloseMinute); // 顯示關(guān)閉窗簾的分鐘
-
- LcdWriteCmd(0x0f); // 啟動(dòng)光標(biāo)閃爍
- LcdGotoXY(0,11); // 定位光標(biāo)
- DelayMs(10); // 延時(shí)等待,消除按鍵按下的抖動(dòng)
- while(!KeySet2_P); // 等待按鍵釋放
- DelayMs(10); // 延時(shí)等待,消除按鍵松開的抖動(dòng)
-
- /* 調(diào)整開啟的小時(shí) */
- while(1)
- {
- if(KeyDown_P==0) // 如果減按鍵被下去
- {
- if(OpenHour>0) // 判斷小時(shí)是否大于0
- OpenHour--; // 是的話就減去1
- LcdGotoXY(0,10); // 光標(biāo)定位
- LcdPrintNum(OpenHour); // 刷新顯示改變后的小時(shí)
- LcdGotoXY(0,11); // 定位光標(biāo)
- DelayMs(300); // 延時(shí)0.3秒左右
- }
-
- if(KeyUp_P==0) // 如果加按鍵被下去
- {
- if(OpenHour<23) // 判斷小時(shí)是否小于23
- OpenHour++; // 是的話就加上1
- LcdGotoXY(0,10); // 光標(biāo)定位
- LcdPrintNum(OpenHour); // 刷新顯示改變后的小時(shí)
- LcdGotoXY(0,11); // 定位光標(biāo)
- DelayMs(300); // 延時(shí)0.3秒左右
- }
-
- if(KeySet2_P==0)
- {
- break;
- }
- }
-
- LcdGotoXY(0,14); // 定位光標(biāo)
- DelayMs(10); // 延時(shí)等待,消除按鍵按下的抖動(dòng)
- while(!KeySet2_P); // 等待按鍵釋放
- DelayMs(10); // 延時(shí)等待,消除按鍵松開的抖動(dòng)
-
- /* 調(diào)整開啟的分鐘 */
- while(1)
- {
- if(KeyDown_P==0) // 如果減按鍵被下去
- {
- if(OpenMinute>0) // 判斷分鐘是否大于0
- OpenMinute--; // 是的話就減去1
- LcdGotoXY(0,13); // 光標(biāo)定位
- LcdPrintNum(OpenMinute); // 刷新顯示改變后的分鐘
- LcdGotoXY(0,14); // 定位光標(biāo)
- DelayMs(300); // 延時(shí)0.3秒左右
- }
-
- if(KeyUp_P==0) // 如果加按鍵被下去
- {
- if(OpenMinute<59) // 判斷分鐘是否小于59
- OpenMinute++; // 是的話就加上1
- LcdGotoXY(0,13); // 光標(biāo)定位
- LcdPrintNum(OpenMinute); // 刷新顯示改變后的分鐘
- LcdGotoXY(0,14); // 定位光標(biāo)
- DelayMs(300); // 延時(shí)0.3秒左右
- }
-
- if(KeySet2_P==0)
- {
- break;
- }
- }
-
- LcdGotoXY(1,11); // 定位光標(biāo)
- DelayMs(10); // 延時(shí)等待,消除按鍵按下的抖動(dòng)
- while(!KeySet2_P); // 等待按鍵釋放
- DelayMs(10); // 延時(shí)等待,消除按鍵松開的抖動(dòng)
-
- /* 調(diào)整關(guān)閉的小時(shí) */
- while(1)
- {
- if(KeyDown_P==0) // 如果減按鍵被下去
- {
- if(CloseHour>0) // 判斷小時(shí)是否大于0
- CloseHour--; // 是的話就減去1
- LcdGotoXY(1,10); // 光標(biāo)定位
- LcdPrintNum(CloseHour); // 刷新顯示改變后的小時(shí)
- LcdGotoXY(1,11); // 定位光標(biāo)
- DelayMs(300); // 延時(shí)0.3秒左右
- }
-
- if(KeyUp_P==0) // 如果加按鍵被下去
- {
- if(CloseHour<23) // 判斷小時(shí)是否小于23
- CloseHour++; // 是的話就加上1
- LcdGotoXY(1,10); // 光標(biāo)定位
- LcdPrintNum(CloseHour); // 刷新顯示改變后的小時(shí)
- LcdGotoXY(1,11); // 定位光標(biāo)
- DelayMs(300); // 延時(shí)0.3秒左右
- }
-
- if(KeySet2_P==0)
- {
- break;
- }
- }
-
- LcdGotoXY(1,14); // 定位光標(biāo)
- DelayMs(10); // 延時(shí)等待,消除按鍵按下的抖動(dòng)
- while(!KeySet2_P); // 等待按鍵釋放
- DelayMs(10); // 延時(shí)等待,消除按鍵松開的抖動(dòng)
-
- /* 調(diào)整關(guān)閉的分鐘 */
- while(1)
- {
- if(KeyDown_P==0) // 如果減按鍵被下去
- {
- if(CloseMinute>0) // 判斷分鐘是否大于0
- CloseMinute--; // 是的話就減去1
- LcdGotoXY(1,13); // 光標(biāo)定位
- LcdPrintNum(CloseMinute); // 刷新顯示改變后的分鐘
- LcdGotoXY(1,14); // 定位光標(biāo)
- DelayMs(300); // 延時(shí)0.3秒左右
- }
-
- if(KeyUp_P==0) // 如果加按鍵被下去
- {
- if(CloseMinute<59) // 判斷分鐘是否小于59
- CloseMinute++; // 是的話就加上1
- LcdGotoXY(1,13); // 光標(biāo)定位
- LcdPrintNum(CloseMinute); // 刷新顯示改變后的分鐘
- LcdGotoXY(1,14); // 定位光標(biāo)
- DelayMs(300); // 延時(shí)0.3秒左右
- }
-
- if(KeySet2_P==0)
- {
- break;
- }
- }
-
- DelayMs(10); // 延時(shí)等待,消除按鍵按下的抖動(dòng)
- while(!KeySet2_P); // 等待按鍵釋放
- DelayMs(10); // 延時(shí)等待,消除按鍵松開的抖動(dòng)
-
- /* 光照強(qiáng)度的設(shè)置 */
- LcdWriteCmd(0x0C); // 關(guān)閉光標(biāo)閃爍
- LcdGotoXY(0,0); // 光標(biāo)定位
- LcdPrintStr(" Light Set "); // 顯示第1行內(nèi)容
- LcdGotoXY(1,0); // 光標(biāo)定位
- LcdPrintStr(" "); // 顯示第2行內(nèi)容
- LcdGotoXY(1,7); // 光標(biāo)定位
- LcdPrintNum(gLight); // 顯示窗簾的光線控制強(qiáng)度閾值
-
- while(1)
- {
- if(KeyDown_P==0) // 如果減按鍵被下去
- {
- if(gLight>0) // 判斷光線閾值是否大于0
- gLight--; // 是的話就減去1
- LcdGotoXY(1,7); // 光標(biāo)定位
- LcdPrintNum(gLight); // 刷新顯示改變后的光線閾值
- DelayMs(300); // 延時(shí)0.3秒左右
- }
-
- if(KeyUp_P==0) // 如果加按鍵被下去
- {
- if(gLight<99) // 判斷光線閾值是否小于59
- gLight++; // 是的話就加上1
- LcdGotoXY(1,7); // 光標(biāo)定位
- LcdPrintNum(gLight); // 刷新顯示改變后的光線閾值
- DelayMs(300); // 延時(shí)0.3秒左右
- }
-
- if(KeySet2_P==0)
- {
- break;
- }
- }
-
- /* 退出前的設(shè)置 */
- LcdShowInit(); // 液晶顯示內(nèi)容初始化
- DelayMs(10); // 延時(shí)等待,消除按鍵按下的抖動(dòng)
- while(!KeySet2_P); // 等待按鍵釋放
- DelayMs(10); // 延時(shí)等待,消除按鍵松開的抖動(dòng)
- }
- }
- /*********************************************************/
- // 按鍵掃描(模式切換)
- /*********************************************************/
- void KeyScanf3()
- {
- if(KeyMode_P==0)
- {
- gMode++; // 切換到下一模式
- if(gMode==4) // 如果到盡頭了
- gMode=1; // 回到第一種模式
- LcdGotoXY(1,0); // 光標(biāo)定位
- LcdPrintMode(gMode); // 顯示模式
- DelayMs(10); // 去除按鍵按下的抖動(dòng)
- while(!KeyMode_P); // 等待按鍵是否
- DelayMs(10); // 去除按鍵松開的抖動(dòng)
- }
- }
- /*********************************************************/
- // 開窗
- /*********************************************************/
- void Open()
- {
- uint i;
- for(i=0;i<4;i++)
- {
- P2=Clock[i];
- DelayMs(250);
- }
- Led_P=0;
- }
- /*********************************************************/
- // 關(guān)窗
- /*********************************************************/
- void Close()
- {
- uint i;
- for(i=0;i<4;i++)
- {
- P2=AntiClock[i];
- DelayMs(250);
- }
- Led_P=1;
- }
- /*********************************************************/
- // 主函數(shù)
- /*********************************************************/
- void main()
- {
- uchar light;
-
- LcdInit(); // 執(zhí)行液晶初始化
- DS1302_Init(); // 時(shí)鐘芯片的初始化
- LcdShowInit(); // 液晶顯示內(nèi)容的初始化
-
- if(DS1302_Read_Byte(0x81)>=128) // 判斷時(shí)鐘芯片是否正在運(yùn)行
- {
- DS1302_Write_Time(); // 如果沒有,則初始化一個(gè)時(shí)間
- }
-
- while(1)
- {
- DS1302_Read_Time(); // 獲取當(dāng)前時(shí)鐘芯片的時(shí)間,存在數(shù)組time_buf中
- FlashTime(); // 刷新時(shí)間顯示
- light=Get_ADC0832(); // 讀取光照強(qiáng)度
- light=light/2.5; // 縮小光照檢測(cè)結(jié)果(在0-99)
- if(light>99) // 如果大于99
- light=99; // 則依然保持99
- LcdGotoXY(1,14); // 光標(biāo)定位
- LcdPrintNum(light); // 顯示光照強(qiáng)度
-
- KeyScanf1(); // 按鍵掃描(時(shí)間的設(shè)置)
- KeyScanf2(); // 按鍵掃描(閾值的設(shè)置)
- KeyScanf3(); // 按鍵掃描(模式切換)
-
- /*手動(dòng)控制模式*/
- if(gMode==1)
- {
- if(KeyDown_P==0) // 如果關(guān)窗簾鍵按下了
- {
- if(Led_P==0) // 如果窗簾當(dāng)前是打開的
- {
- Close(); // 則關(guān)閉窗簾
- }
- }
- if(KeyUp_P==0) // 如果開窗簾鍵按下了
- {
- if(Led_P==1) // 如果窗簾當(dāng)前是關(guān)閉的
- {
- Open(); // 則打開窗簾
- }
- }
- }
-
- /*時(shí)間控制模式*/
- if(gMode==2)
- {
- if((TimeBuff[4]==CloseHour)&&(TimeBuff[5]==CloseMinute)&&(TimeBuff[6]==0)) // 如果到了關(guān)窗簾的時(shí)間
- {
- if(Led_P==0) // 如果窗簾當(dāng)前是打開的
- {
- Close(); // 則關(guān)閉窗簾
- }
- }
- if((TimeBuff[4]==OpenHour)&&(TimeBuff[5]==OpenMinute)&&(TimeBuff[6]==0)) // 如果到了開窗簾的時(shí)間
- {
- if(Led_P==1) // 如果窗簾當(dāng)前是關(guān)閉的
- {
- Open(); // 則打開窗簾
- }
- }
- }
-
- /*光線控制模式*/
- if(gMode==3)
- {
- if(light<gLight) // 當(dāng)前光線小于設(shè)置的閾值
- {
- if(Led_P==0) // 如果窗簾當(dāng)前是打開的
- {
- Close(); // 則關(guān)閉窗簾
- }
- }
- else // 當(dāng)前光線大于或等于設(shè)置的閾值
- {
- if(Led_P==1) // 如果窗簾當(dāng)前是關(guān)閉的
- {
- Open(); // 則打開窗簾
- }
- }
- }
-
- DelayMs(100); // 延時(shí)0.1秒
- }
- }
復(fù)制代碼
所有資料51hei附件下載:
仿真程序.7z
(89.02 KB, 下載次數(shù): 57)
2022-12-12 03:37 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
評(píng)分
-
查看全部評(píng)分
|