23-基于单片机的全自动抽油烟机控制系统设计(定时、日历显示、步进电机、时间设定、掉电保护、LCD1602、阈值调节、多页切换)
功能描述:
基于单片机实现的自动抽油烟机控制系统,实现了在液晶显示器LCD1602上,日历显示,年、月、日、星期,油烟测量阈值、时、分、秒、抽烟挡位、实时测量值。所有显示的值都可以进行手动调节,加或减。当监测到当前油烟值大于设定阈值后,步进电机将会转动,带动油烟抽出。可手动设定抽油烟机的启动和关闭的时间,一共可以设置5组。将设定好的数据将会保存在外置Flash(24C02)中。
1、日历显示,年、月、日、星期、时、分、秒
2、油烟实时测量值
3、人机交互可调节,年、月、日、星期、时、分、秒、阈值
4、抽油烟挡位设置
4、多页切换可以设置定时启动关闭的时间
5、设置参数可以保存在Flash中
有哪些资料:
1、仿真工程文件
2、原理图工程文件
3、源代码
4、物料清单BOM
5、流程图
/***********架构:显示**********/
#include <reg51.h>
#include "lcd1602.h"
#include"ds1302.h"
#include"i2c.h"
#include <ADC0832.h>
sbit k1=P3^2;//按钮
sbit k2=P3^3;
sbit k3=P3^4;
sbit k4=P3^5;
sbit AA=P2^4;//电机
sbit BB=P2^5;
sbit CC=P2^6;
sbit DD=P2^7;
sbit stop=P3^1;
sbit buzzer=P3^7;
//-----------------------------------显示数组
uchar ye=0;//第一页
uchar hang1[]="2000.00.00 0 000";//日期+星期
uchar hang2[]="00:00:00 D:0 000";//时间+转速
uchar hang3[]="00:00 00:00 ";//第二页
uchar hang4[]="TIME1: ";
uchar lcd_xian=0;//显示延时变量
//-----------------------------------
uchar cursor=0;//光标位置
uchar code cursor_num[]={1,3,1,6,1,9,1,11,1,15,2,1,2,4,2,7,2,11,2,1,2,4,2,8,2,11};//光标位置数组.行+列
uchar shi1=6,fen1=0,shi2=0,fen2=0;//时间控制
uchar num=0,bei=0;
uchar speed=0,sec=0;//速度
uchar start=0,flag=0;
uchar yanwu_lim=50;
uchar yanwu=0;
void Delay1ms(uchar i)
{
while(i--)
delay_uint(110);
}
void read()
{
shi1=At24c02Read(4*num);
fen1=At24c02Read(4*num+1);
shi2=At24c02Read(4*num+2);
fen2=At24c02Read(4*num+3);
}
//**************************************主函数
void main()
{
uchar two;
//初始化
init_1602();
Ds1302ReadTime();//启动DS1302
TIME[0]=0;
Ds1302Init();
//显示初始化
for(num=0;num<5;num++)
{
shi1=At24c02Read(4*num);
if(shi1==0xff)
{
shi1=0x06+2*num;
At24c02Write(4*num,shi1);
Delay1ms(10);
}
fen1=At24c02Read(4*num+1);
if(fen1==0xff)
{
fen1=0;
At24c02Write(4*num+1,fen1);
Delay1ms(10);
}
shi2=At24c02Read(4*num+2);
if(shi2==0xff)
{
shi2=shi1+1;
At24c02Write(4*num+2,shi2);
Delay1ms(10);
}
fen2=At24c02Read(4*num+3);
if(fen2==0xff)
{
fen2=0;
At24c02Write(4*num+3,fen2);
Delay1ms(10);
}
}
num=0;
speed=At24c02Read(20);//读取速度
if(speed>9)
{
speed=5;
At24c02Write(20,5);
Delay1ms(10);
}
//===============定时器初始化
TMOD|=0X01;
TH0=(65536-10000)/256;//给定时器赋初值,定时10ms
TL0=(65536-10000)%256;
ET0=1;//打开定时器0中断允许
EA=1;//打开总中断
TR0=1;//打开定时器
//===============
yanwu=ADC1();
yanwu = 0;
start=0;