作者主页:编程指南针
作者简介:Java领域优质创作者、CSDN博客专家 、CSDN内容合伙人、掘金特邀作者、阿里云博客专家、51CTO特邀作者、多年架构师设计经验、腾讯课堂常驻讲师
主要内容:Java项目、Python项目、前端项目、人工智能与大数据、简历模板、学习资料、面试题库、技术互助
收藏点赞不迷路 关注作者有好处
文末获取源码
项目编号:BS-DPJ-004
一,环境介绍
语言环境:C语言
开发技术:51单片机
二,项目简介
科技进步促进了人民生活的不断改善。各个行业都在逐步推进智能化,在我们的日常生活中,我们所接触到的智能设备也在不断增多,这给我们带来了更多的选择。在现实生活中,床围灯以人工开关为主,特别是在夜间,非常不方便。在此基础上,提出了一种基于51 单片机的床边灯光自动控制系统。系统主要包括:单片机主控系统, LCD液晶显示模块,温、湿度探测、光强探测、人体散发出的热量探测、照明自动调节等。它主要完成了对人体位置的感知,对灯光进行智能控制,对温度、湿度和光照强度进行检测,并对 LCD液晶显示屏进行显示。本课题与目前的科技发展水平相结合,提出了使用单片机来实现智能床围灯的控制。这既是一种对传统家庭的一种革新,也是科研人员和广大人民群众对美好生活的一种期待。
本文介绍了一种以单片机为核心,以单片微处理器为核心,以微处理器为核心,以微处理器为核心,对微机进行了智能化的控制。在目前的现实生活中,床围灯的控制方式大多都是人工开关,特别是在夜间的环境中,非常不方便。在这样的情况下,本课题结合当前的技术发展水平,使得床围灯的控制能够用单片机来实现。这样即给传统家庭带来了革新,又是科研人员及广大民众对美好生活的一种向往。智能床围灯控制系统改善了传统床围灯多终端控制带来的不便利之处,并以此为首要,简化操作流程的同时,也提高了系统的可操作性。这在一定程度上为人们的生活带去了便利,同时还在很大程度上节约了能源的消耗,因此它具备了良好的实用意义。
三,系统展示
四,核心代码展示
#include "reg52.h"
#include "stdio.h"
#include "1602.h"
#include "ds1302.h"
#include "pcf8591.h"
#include "dht11.h"
uchar buf[16]; //显示缓存
sbit BEEP=P3^3;//蜂鸣器
sbit JDQ1=P3^7;//开关
sbit JDQ2=P3^2;//开关
sbit JDQ3=P1^0;//开关 .
sbit SYS_SET = P1^1;//按键选择
sbit SYS_MD = P1^2;//增加
sbit DCIN1 = P1^5; //人体探头
sbit DCIN2 = P1^6;
sbit DCIN3 = P1^7;
int f,PWM_T1=0,PWM_T2=0,PWM_T3=0;
void pwmtext(){
TMOD = 0x02; //定时器0,工作模式2,8位定时模式
TH0=150; //写入预置初值(取值1-255,数越大PWM频率越高)
TL0=150; //写入预置值 (取值1-255,数越大PWM频率越高)
TR0=1; //启动定时器
ET0=1; //允许定时器0中断
EA=1; //允许总中断
}
/**************中断服务程序*****************/
void timer0() interrupt 1 //2.5毫秒@11.0592MHz
{
f++; //每次定时器溢出加1
if(f==20) //PWM周期 100个单位
{
f=0; //使t=0,开始新的PWM周期
JDQ1=0;JDQ2=0;JDQ3=0;
}
if(PWM_T1==f) //按照当前占空比切换输出为高电平
{
JDQ1=1; //
}
if(PWM_T2==f) //按照当前占空比切换输出为高电平
{
JDQ2=1; //
}
if(PWM_T3==f) //按照当前占空比切换输出为高电平
{
JDQ3=1; //
}
}
//标志位
void BEEPS(){ //蜂鸣器响一声
BEEP=0;delay(100);BEEP=1;delay(100);
}
/***************主程序****************/
void main()
{ int mds=0,cd=0,flag=0;
uchar temp1,gzmax=20,wenmax=30,shimax=70;
pwmtext(); //PWM初始化
lcd1602_init();//液晶初始化
init_ds1302();//ds1302初始化
// write_time();//写数据
// BEEPS();
while(1)
{
read_time();//获取时间
temp1=(float)((float)Read_PCF8591(1)/255.0)*100.0; //读取模拟量1 光照值
Read_PCF8591(2); //读取模拟量2
Read_PCF8591(3); //读取模拟量3
Read_PCF8591(4); //读取模拟量4
cd++;
if(cd>25){cd=0;
flag=!flag; lcd_Write_com(0x01); //清屏
EA=0;DHT11_receive();EA=1;
}
if(flag){
//显示数据
hz_lcdDis(0,0,"Te:"); hz_lcdDis(0,6,"C");
hz_lcdDis(1,0,"Hu:");fuhao(5);
hz_lcdDis(1,5,"%");
hz_lcdDis(1,9,"Gz:");
hz_lcdDis(1,14,"%");
num_lcdDis(0,3,temp_value,2);
num_lcdDis(1,3,humi_value,2);
num_lcdDis(1,12,(int)temp1,2);
}else{
sprintf(buf,"Date:%02d-%02d-%02d ",2000+(int)nians,(int)yues,(int)ris); //年月日
hz_lcdDis(0,0,buf);//显示在第一行
sprintf(buf,"Time:%02d:%02d:%02d ",(int)shis,(int)fens,(int)miaos);//时分秒
hz_lcdDis(1,0,buf); //显示在第二行
}
if(temp_value>wenmax|humi_value>shimax){ //阈值超标报警
BEEPS();
}
//
if(temp1<gzmax){ //光照过低
if(DCIN1==1){ //1位置有人
if(PWM_T1<20){
PWM_T1++; //开灯
}
}else{
if(PWM_T1>0){
PWM_T1--; //关灯
}
}
if(DCIN2==1){ //2位置有人
if(PWM_T2<20){
PWM_T2++; //开灯
}
}else{
if(PWM_T2>0){
PWM_T2--; //关灯
}
}
if(DCIN3==1){ //3位置有人
if(PWM_T3<20){
PWM_T3++; //开灯
}
}else{
if(PWM_T3>0){
PWM_T3--; //关灯
}
}
}else{
if(PWM_T3>0){
PWM_T3--;
};if(PWM_T2>0){
PWM_T2--;
} if(PWM_T1>0){
PWM_T1--;
}
}
if(SYS_SET==0){
BEEPS();
lcd_Write_com(0x01); //清屏
while(SYS_SET==0);
mds=1;
lcd_Write_com(0x01);
nian = read_ds1302(read_add[5]);
sprintf(buf,"nian:%d ",(int)nians);
hz_lcdDis(0,0,buf); //显示在第1行
hz_lcdDis(0,14,"<=");
hz_lcdDis(1,14," ");
while(1){
if(SYS_SET==0){
mds++;BEEPS();
if(mds==2){
yue = read_ds1302(read_add[4]);
sprintf(buf,"yue:%d ",(int)yues);
hz_lcdDis(1,0,buf); //显示在第2行
hz_lcdDis(0,14," ");
hz_lcdDis(1,14,"<=");
}
if(mds==3){lcd_Write_com(0x01);
ri = read_ds1302(read_add[3]);
sprintf(buf,"ri:%d ",(int)ris);
hz_lcdDis(0,0,buf); //显示在第3行
hz_lcdDis(0,14,"<=");
hz_lcdDis(1,14," ");
}
if(mds==4){
shi = read_ds1302(read_add[2]);
sprintf(buf,"shi:%d ",(int)shis);
hz_lcdDis(1,0,buf); //显示在第4行
hz_lcdDis(0,14," ");
hz_lcdDis(1,14,"<=");
}
if(mds==5){
lcd_Write_com(0x01);
fen = read_ds1302(read_add[1]);
sprintf(buf,"fen:%d ",(int)fens);
hz_lcdDis(0,0,buf); //显示在第5行
hz_lcdDis(0,14,"<=");
hz_lcdDis(1,14," ");
}
if(mds==6){
miao = read_ds1302(read_add[0]);
sprintf(buf,"miao:%d ",(int)miaos);
hz_lcdDis(1,0,buf); //显示在第4行
hz_lcdDis(0,14," ");
hz_lcdDis(1,14,"<=");
}
if(mds==7){
lcd_Write_com(0x01);
sprintf(buf,"gzmax:%d ",(int)gzmax);
hz_lcdDis(0,0,buf); //显示在第4行
hz_lcdDis(0,14,"<=");
hz_lcdDis(1,14," ");
}
if(mds==8){
sprintf(buf,"wenmax:%d ",(int)wenmax);
hz_lcdDis(1,0,buf); //显示在第4行
hz_lcdDis(0,14," ");
hz_lcdDis(1,14,"<=");
}
if(mds==9){
lcd_Write_com(0x01);
sprintf(buf,"shimax:%d ",(int)shimax);
hz_lcdDis(0,0,buf); //显示在第4行
hz_lcdDis(0,14,"<=");
hz_lcdDis(1,14," ");
}
if(mds>9){lcd_Write_com(0x01);
write_time();//写数据
break;
}
while(SYS_SET==0);
}
if(mds==1){
if(SYS_MD==0){BEEPS();
nian=nian+1;
nians=nians+1;
if(nians>25){
nian=nians=23;
}
sprintf(buf,"nian:%d ",(int)nians);//时分秒
hz_lcdDis(0,0,buf); //显示在第二行
while(SYS_MD==0);
}
}
if(mds==2){
if(SYS_MD==0){ BEEPS();
yue=yue+1;
yues=yues+1;
if(yues>12){
yues=yue=1;
}
sprintf(buf,"yue:%d ",(int)yues);//时分秒
hz_lcdDis(1,0,buf); //显示在第二行
while(SYS_MD==0);
}
}
if(mds==3){
if(SYS_MD==0){ BEEPS();
ri=ri+1;
ris=ris+1;
if(ris>31){
ris=ri=1;
}
sprintf(buf,"ri:%d ",(int)ris);//时分秒
hz_lcdDis(0,0,buf); //显示在第二行
while(SYS_MD==0);
}
}
if(mds==4){
if(SYS_MD==0){ BEEPS();
shi=shi+1;
shis=shis+1;
if(shis>23){
shis=shi=0;
}
sprintf(buf,"shi:%d ",(int)shis);//时分秒
hz_lcdDis(1,0,buf); //显示在第二行
while(SYS_MD==0);
}
}
if(mds==5){
if(SYS_MD==0){ BEEPS();
fen=fen+1;
fens=fens+1;
if(fens>59){
fens=fen=0;
}
sprintf(buf,"fen:%d ",(int)fens);//时分秒
hz_lcdDis(0,0,buf); //显示在第二行
while(SYS_MD==0);
}
}if(mds==6){
if(SYS_MD==0){ BEEPS();
miao=miao+1;
miaos=miaos+1;
if(miaos>59){
miaos=miao=0;
}
sprintf(buf,"miao:%d ",(int)miaos);//时分秒
hz_lcdDis(1,0,buf); //显示在第二行
while(SYS_MD==0);
}
}
if(mds==7){
if(SYS_MD==0){ BEEPS();
gzmax=gzmax+1;
if(gzmax>80){
gzmax=10;
}
sprintf(buf,"gzmax:%d ",(int)gzmax);//时分秒
hz_lcdDis(0,0,buf); //显示在第二行
while(SYS_MD==0);
}
}
if(mds==8){
if(SYS_MD==0){ BEEPS();
;
wenmax=wenmax+1;
if(wenmax>45){
wenmax=10;
}
sprintf(buf,"wenmax:%d ",(int)wenmax);//时分秒
hz_lcdDis(1,0,buf); //显示在第二行
while(SYS_MD==0);
}
}
if(mds==9){
if(SYS_MD==0){ BEEPS();
shimax=shimax+1;
if(shimax>80){
shimax=10;
}
sprintf(buf,"shimax:%d ",(int)shimax);//时分秒
hz_lcdDis(0,0,buf); //显示在第二行
while(SYS_MD==0);
}
}
}
}
}
}
五,相关作品展示
基于Java开发、Python开发、PHP开发、C#开发等相关语言开发的实战项目
基于Nodejs、Vue等前端技术开发的前端实战项目
基于微信小程序和安卓APP应用开发的相关作品
基于51单片机等嵌入式物联网开发应用
基于各类算法实现的AI智能应用
基于大数据实现的各类数据管理和推荐系统
文章来源:https://www.toymoban.com/news/detail-731261.html
文章来源地址https://www.toymoban.com/news/detail-731261.html
到了这里,关于基于单片机智能围床灯的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!