/***************************************************************/ /* 智能家居控制系统 原设计:刘东宇
芯片:STC89C58+DS18B20+DHT11+DS1302+LCD12864+红外人体感应器+无线遥控 功能:1.数字可调万年历
2.显示空气中温度和湿度 3.对环境温度和湿度可以自动控制 4.测量水的温度 5.无线控制 6.防盗报警 7.低功耗模式 8.开机图片 9.EEPROM数据保存 其他文件略做修改即可添加 */ /***************************************************************/
#include
/********************函数申明********************/ void init(); //初始化程序 void sleep_sign_init(); //睡眠(报警)模式初始化 void init_time_DHT11_DS18B20(); //初始化定时器T0和T1 void open_logo(); //开机图片 void kay_scan(); //kay_scan 按键扫描程序 void display_time(); //display_time时间扫描(LCD12864显示) void alarm(); //温湿度超值判断
void sleep_sign(); //睡眠(报警)模式和正常模式切换函数 void sos_display(); //当声光报警时LCD12864显示“报警!” /************位变量定义****************/ sbit lcd_lig=P2^4; //LCD12864背光控制 sbit relay1=P1^0; //继电器1 sbit relay2=P1^1; //继电器2
sbit voi_lig_sigo=P1^2; //声光报警控制位 sbit key_sigo=P1^6; //睡眠(报警)模式进入按键 /************变量定义****************/ unsigned char code shu5[]={\
unsigned char code shu6[]={\年月日:%unsigned int k,T; bit Interrupt_flag=1; //该标志位可以有效防止报警触发后影响其他程序
bit sos=0; //LCD12864显示报警标志位
void main() {
init(); //初始化程序 lcd_lig=0; //开LCD背光 open_logo(); //开机LOGO sleep_sign_init(); //睡眠(报警)模式初始化 init_lcd12864(); //初始化LCD12864 init_time_DHT11_DS18B20(); //初始化定时器T0和T1 DS18B20_caution(); //DS18B20温度报警设置 while(1) { kay_scan(); //kay_scan 按键扫描程序 display_time(); //display_time 时间显示扫描(LCD12864显示) alarm(); //温湿度超值判断 sleep_sign(); //睡眠(报警)模式和正常模式切换函数 sos_display(); //当声光报警时LCD12864显示“报警!” } }
/************************************************/
/****************程序初始化**********************/ /************************************************/ void init() {
IAP_ReadCode(0x8000,&set_up_sd,1); //读湿度阀值 IAP_ReadCode(0x800f,&set_up_wd,1); //读温度阀值
relay1=1; //继电器1(湿度控制) relay2=1; //继电器2(温度控制)
IP=0X0A; //中断优先级设定,将定时器T0和T1设置为高级
sd_shi=0; sd_ge=0;
wd_shi1=0; wd_ge1=0;
dsq_0=0; //定时器T0
/***********DS1302初始化****************/ ds_io=0; ds_rst=0;
ds_sclk=0; //DS1302初始化 ds_xieshu(0x8e,0x00); //控制 }
/*****************************************************/ /**************睡眠(报警)模式初始化*****************/ /*****************************************************/ void sleep_sign_init() {
voi_lig_sigo=1; key2=1; lcd_lig=0;
//睡眠(报警)模式初始化
//初始化声光报警控制位 //初始化按键key2(睡眠报警模式进入键) //LCD12864背光控制位
TCON=0X55; //INT0设置为下降沿触发,INT0设置为下降沿触发 EX0=1; //开外部中断INT0 EX1=0; //关外部中断INT1 EA=1; //开总中断 }
/**************************************/
/********初始化计时器T0和T1************/ /**************************************/
void init_time_DHT11_DS18B20() //初始化定时器T0和T1 {
TMOD=0X11; //定时器T0和T1工作于方式1 TH0=(65535-50000)/256; //给定时器T0装初值 TL0=(65535-50000)%6; }
TR0=1; ET0=1;
//开定时器T0计数 //开定时器T0中断 //给定时器T1装初值 //开定时器T1计数 //开定时器T1中断
TH1=(65535-50000)/256; TL1=(65535-50000)%6; TR1=1; ET1=1;
/************************************************/ /**************** 开机图片 ********************/ /************************************************/ void open_logo() {
display_bmp_logo(bmp_1); delay(10000); display_bmp_logo(bmp_2); delay(10000);
display_bmp_logo(bmp_3); delay(10000);
display_bmp_logo(bmp_4); delay(10000);
display_bmp_logo(bmp_5); delay(8000);
display_bmp_logo(bmp_6); delay(8000);
//写入图片1 //写入图片2 //写入图片3 //写入图片4 //写入图片5 //写入图片6
display_bmp_logo(bmp_7); //写入图片7 delay(8000); }
/************************************************/ /****************温湿度报警检测******************/ /************************************************/
void alarm() //温湿度超值判断 { if(sign_sd>=set_up_sd) //湿度判断 relay1=0; //继电器1(降湿度控制) else relay1=1; if(sign_wd>=set_up_wd) //温度判断 relay2=0; //继电器2(降温度控制) else relay2=1; }
/***************************************************/ /*********************按键扫描程序******************/ /***************************************************/ void kay_scan() //kay_scan按键扫描程序 {
if(key1==0) { delay(20); //按键消抖
相关推荐: