|
問題還很多,大家可以繼續完善:
個人為電子競賽所做的《智能家居系統Proteus仿真設計》,現分享給大家,共同學習學習!
整個設計由Proteus仿真完成。智能家居系統有以下幾個模塊組成:
(1)中央處理器模塊
(2)窗簾控制系統
(3)溫度監控系統
(4)門禁密碼系統
(5)居室燈光控制系統
(6)居室照明系統
(7)煙霧火災報警系統
(8)室內中央顯示系統
(9)按鍵設置系統
(10)門禁開關系統
(11)網絡通訊系統
原理圖為:
智能家居.jpg (96.77 KB, 下載次數: 89)
下載附件
2019-8-11 21:56 上傳
22.jpg (116.29 KB, 下載次數: 81)
下載附件
2019-8-11 21:58 上傳
程序部分:
23.jpg (97.55 KB, 下載次數: 83)
下載附件
2019-8-11 22:00 上傳
部分代碼如下:
#include "DELAY.H"
#include "LATCH.H"
#include "DISPLAY.H"
#include "LCD1602.H"
#include "KEYSCAN.H"
#include "24C02.H"
#include "PCF8591.H"
#include "DS18B20.H"
#include "TIMER.H"
#define LedBright 0x00 //明亮
#define LedNormal 0x64 //一般
#define LedSleep 0xc8 //睡眠
#define ledClose 0xff //關閉
uchar KeyNum;
uchar LED_flag;
uchar LED_DIS_1;
uint LightRes;
uchar code LED_Light_Mode[]="Choose ledlight mode";
uchar code LEDNum[] = "1 2 3";
uchar code LED_Control_Mode[]="Choose ledcontrol mode";
uchar code LED_Control_Follow[]="1:Hand 2:Auto";
enum {Hand,Auto} Control_Follow = Hand;
uchar code DisProgram[]="Mode Status";
uchar code LED_Dis_One[]="LED LedBright";
uchar code LED_Dis_Two[]="LED LedNormal";
uchar code LED_Dis_Three[]="LED LedSleep";
uchar Led_i = 0;
uchar Led_j = 0;
uchar LedOutputValue;
uchar Timer0Num;
void main()
{
Init_TIME(0,0);
ChooseChannel(0x01);
Init_LCD();
while(1)
{
KeyNum = KeyScan();
if(KeyNum != 0xff)
{
if(KeyNum == 4) {LED_flag = 1; Led_i++; LedOutputValue = LedNormal;}
if(Led_i == 2) {LED_flag = 0; Led_i = 0; Led_j = 0; LED_DIS_1 = 0;}
if(LED_flag && KeyNum == 1 ) {Led_j++; if(Led_j == 1)LedOutputValue = LedBright; LED_DIS_1 = 1;}
if(LED_flag && KeyNum == 2 ) {Led_j++; if(Led_j == 1)LedOutputValue = LedNormal; LED_DIS_1 = 1;}
if(LED_flag && KeyNum == 3 ) {Led_j++; if(Led_j == 1)LedOutputValue = LedSleep; LED_DIS_1 = 1;}
}
if(LED_flag && (LED_DIS_1 == 0))
{
LCDPosition(1,LED_Light_Mode);
LCDPosition(2,LEDNum);
}
if(LED_DIS_1 && (Led_j==1))
{
LCDPosition(1,LED_Control_Mode);
LCDPosition(2,LED_Control_Follow);
}
if((KeyNum == 1)&& (Led_j==2)) Control_Follow = Hand;
if((KeyNum == 2)&& (Led_j==2)) Control_Follow = Auto;
// if(Control_Follow == Hand) DA_Sent(LedOutputValue);
if(Control_Follow == Auto)
{
TR0 = 1;
if(LightRes > 180) LedOutputValue = LedSleep;
else if(LightRes > 100 && LightRes < 180 ) LedOutputValue = LedNormal;
else LedOutputValue = LedBright;
}
if(Led_j==2)
{
LCDPosition(1,DisProgram);
switch(LedOutputValue)
{
case LedBright: LCDPosition(2,LED_Dis_One); break;
case LedNormal: LCDPosition(2,LED_Dis_Two); break;
case LedSleep: LCDPosition(2,LED_Dis_Three); break;
}
}
DA_Sent(LedOutputValue);
// LCDPosition(1,LED_Light_Mode);
}
}
void Timer0() interrupt 1
{
TH0 = (65536-50000)/256;
TL0 = (65536 - 50000)%256;
Timer0Num++;
if(Timer0Num == 20)
{
Timer0Num = 0;
LightRes = AD_Receive();
}
}
仿真文件和程序見附件:
24.jpg (29.61 KB, 下載次數: 81)
下載附件
2019-8-11 22:04 上傳
不能運行,仿真沒有反應,求大神指導:
仿真程序有錯誤,求大神幫助.7z
(63.72 KB, 下載次數: 285)
2021-4-15 00:55 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|
|