基于AT89C51+LCD1602+DS1302+按键+LED组成设计了一个完整的智能控制系统。
P2.0-P2.3 4个LED等代表庭院内的4盏灯
P1.3-P1.7 5个开关,第一个代表光敏电阻传感器,后四个都是热释电红外传感器
P3.2、P3.4、P3.5、P3.6为四个按键开关,可设置万年历时间。
人性化地加入了时间和温度的LCD显示,并可以通过按键去设置时间日期等。
智能灯控制分为自动和手动控制。
逻辑功能:
当P3.0为0,也就是按下的时候为手动控制,反之则为自动控制。
手动:
按下开关P3.1,所有的灯都打开,按下开关P3.2,所有的灯都关闭。
自动:
一个光敏电阻传感器和四个红外热释电传感器,实现逻辑为:
当时间为晚上18点-早上6点之间或者光敏电阻传感器为0时,一旦有人,则点亮灯,一个灯附近安装一个红外热释电传感器,当走进灯时,灯亮。
#include<reg51.h>
#include<intrins.h>
#include<string.h>
#define uchar unsigned char
#define uint unsigned int
#define delayNOP() {_nop_();_nop_();_nop_();_nop_();}
sbit SDA=P1^0; // DS1302数据线
sbit CLK=P1^1; // DS1302时钟线
sbit RST=P1^2; // DS1302复位线
//DS18B20数据端口定义
sbit DQ=P2^4; //DS18B20数据端口
sbit LCD_RS=P2^5; // LCD寄存器选择
sbit LCD_RW=P2^6; // LCD读写/写控制
sbit LCD_EN=P2^7; // LCD启用
sbit K1=P3^2; // 选择
sbit K2=P3^3; // 确定
sbit K3=P3^5; // 加
sbit K4=P3^6; // 减
sbit key_1=P3^0; //自动手动切换
sbit key_2=P3^1; //关灯,按一下,关一个
sbit key_3=P3^4; //开灯,按一下,开一个
uchar code zz[]={0x08,0x0c,0x04,0x06,0x02,0x03,0x01,0x09};
uchar code fz[]={0x09,0x01,0x03,0x02,0x06,0x04,0x0c,0x08};
sbit R_LED=P2^0; //红灯
sbit Y_LED=P2^1; //黄灯
sbit G_LED=P2^2; //绿灯
sbit B_LED=P2^3; //蓝灯
sbit guangmin=P1^3; //光敏电阻传感器
sbit ren1=P1^4; //红外热释电传感器1
sbit ren2=P1^5; //红外热释电传感器2
sbit ren3=P1^6; //红外热释电传感器3
sbit ren4=P1^7; //红外热释电传感器4
//温度字符
uchar code Temperature_Char[8]={0x0c,0x12,0x12,0x0c,0x00,0x00,0x00,0x00};
//温度小数对照表
uchar code df_Table[]={0,1,1,2,3,3,4,4,5,6,6,7,8,8,9,9};
uchar CurrentT=0; //当前读取温度的整数部分
uchar Temp_Value[]={0x00,0x00}; //从DS18B20读取的温度值
uchar Display_Digit[]={0,0,0,0};//待显示的各温度数位
bit DS18B20_IS_OK=1;//传感器正常标志