功能:
0.本系统采用单片机STC89C52作为系统的主控芯片
1.系统采用LCD1602液晶实时显示当前时间/窗帘状态/光照强度
2.系统具有四个功能按键,支持手动按键/定时/遥控三种模式控制窗帘
3.系统采用一个轻触按键模拟限位开关,步进电机模拟窗帘窗户的运动
4.采用DC002作为电源接口可直接输入5V给整个系统供电
原理图:
PCB :
主程序:
/*************************************************************
智能窗帘
补充说明:
***************************************************************/
#include "reg52.h"
#include "LCD1602.h"
#include "DS1302.h"
#include "28BYJ48.h"
#include "eeprom52.h"
#include "tlc0832.h"
#include "infrared.h"
#include "delay.h"
#define uchar unsigned char //宏定义
#define uint unsigned int
/*******************引脚定义*********************/
sbit KEY_MODE = P3^3; //设置键
sbit KEY_ADD = P3^4; //加值键
sbit KEY_SUB = P3^6; //减值键
sbit KEY_ENTER = P3^5; //确定键
sbit BUZZER = P2^0; //蜂鸣器
sbit SW1 = P1^3; //全开 限位开关
/*******************变量定义*********************/
uchar light_up = 80;
uchar light_down = 30; //存储光强上、下限值
uchar set_f = 0; //设置选择标记,=0非设置,=1设置年,=2设置月,=3设置日,=4设置时,=5设置分,=6设置秒
// =7设置定时-时,=8设置定时-分,=9设置定时-开关,=10设置窗帘打开/关闭
// =11设置光强上限,=12设置光强下限,=13设置校准窗帘位置
unsigned char dis[10] = {
'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'};
uchar num; //计数变量
uchar ds[4] = {
8, 30, 16, 20}; //定时控制开时、分、控制关时、分
uchar mode = 0; //模式标记。=0手动,=1定时,=2光控
uchar light; //存储光强
uint moto_num = 0; //记录窗帘位置
uchar motor_state = 0; //窗帘状态,=0已经关闭,=1处于运转过程中,=2已经打开
bit moto_f = 0; //标记当前控制状态,=0控制关,=1控制开
uchar code display_mode[3][3] = {
"SD\0", "DS\0", "GK\0"}; //显示模式
void WriteData(void)
{
SectorErase(0x2000); //擦除扇区
WriteByte(0x2000, ds[0]); //写入【定时时间】数据保存
WriteByte(0x2001, ds[1]); //写入【定时时间】数据保存存
WriteByte(0x2002, ds[2]); //写入【定时时间】数据保存存
WriteByte(0x2003, ds[3]); //写入【定时时间】数据保存存
WriteByte(0x2004, light_up); //写入【光强上限值】数据保存
WriteByte(0x2005, light_down); //写入【光强下限值】数据保存
WriteByte(0x2006, mode); //写入【模式】数据保存
}
void ReadData(void)
{
ds[0] = ReadByte(0x2000); //读取存储的【定时时间】数据
ds[1] = ReadByte(0x2001); //读取存储的【定时时间】数据
ds[2] = ReadByte(0x2002); //读取存储的【定时时间】数据
ds[3] = ReadByte(0x2003); //读取存储的【定时时间】数据
light_up = ReadByte(0x2004); //读取存储的【光强上限值】数据
light_down = ReadByte(0x2005); //读取存储的【光强下限值】数据
mode = ReadByte(0x2006); //读取存储的【模式】数据
}
/********************************************************
函数名称:void display(void)
函数作用:正常显示日期、时间、光强等函数
参数说明:
********************************************************/
void display(void)
{
uint t[3];
//显示时间
LCD_DispOneChar(0, 1, dis[time[2] / 10]); //显示时【0:表示第1列,2:表示第2行,所有关于显示都一样】
LCD_DispOneChar(1, 1, dis[time[2] % 10]);
LCD_DispOneChar(2, 1, ':');
LCD_DispOneChar(3, 1, dis[time[1] / 10]); //显示分【3:表示第4列,2:表示第2行,所有关于显示都一样】
LCD_DispOneChar(4, 1, dis[time[1] % 10]);
LCD_DispOneChar(5, 1, ':');
LCD_DispOneChar(