基于单片机智能围床灯

简介: 本文介绍了一种以单片机为核心,以单片微处理器为核心,以微处理器为核心,以微处理器为核心,对微机进行了智能化的控制。在目前的现实生活中,床围灯的控制方式大多都是人工开关,特别是在夜间的环境中,非常不方便。在这样的情况下,本课题结合当前的技术发展水平,使得床围灯的控制能够用单片机来实现。这样即给传统家庭带来了革新,又是科研人员及广大民众对美好生活的一种向往。智能床围灯控制系统改善了传统床围灯多终端控制带来的不便利之处,并以此为首要,简化操作流程的同时,也提高了系统的可操作性。这在一定程度上为人们的生活带去了便利,同时还在很大程度上节约了能源的消耗,因此它具备了良好的实用意义。


 

作者简介: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智能应用

基于大数据实现的各类数据管理和推荐系统

编辑

编辑

编辑

编辑

编辑

编辑

编辑

编辑



相关文章
|
4月前
|
传感器
毕业设计 基于51单片机的智能水表水流量计流量报警器温度设计
毕业设计 基于51单片机的智能水表水流量计流量报警器温度设计
|
4月前
|
传感器 物联网 芯片
毕业设计 基于STM32单片机无线ZIGBEE智能大棚土壤湿度光照检测
毕业设计 基于STM32单片机无线ZIGBEE智能大棚土壤湿度光照检测
|
5月前
|
人工智能 安全 搜索推荐
单片机毕业设计|基于stm32智能快递箱设计
随在当今的社会,网上购物以及线下获取快递己经成为日常生活中很重要的一个组成部分,电子商务的发展也带来了快递业的繁荣。这对快递业而言,是一个巨大的发展机遇,同时也是一个不可忽视的挑战。当前,快件运输的安全性越来越受到大家的重视,对快件的服务要求也越来越高。但就目前的快递行业来说,也面临着这样那样的问题,比较经常遇到送快递的到了,业务不在家,取快递时间对不上等。在此基础上,提出了一种以STM32为核心的智能化快递柜。本快递柜的主要功能有,指纹解锁功能,按键功能,警报功能,继电器柜门开锁功能,验证码功能,主要设计加入了指纹解锁功能。本系统以STM32F103为主控芯片,配置了指纹传感、4*4矩阵键盘
137 0
|
4月前
|
人工智能 安全 搜索推荐
单片机毕业设计|基于stm32智能快递箱设计
单片机毕业设计|基于stm32智能快递箱设计
|
4月前
|
机器学习/深度学习 传感器 语音技术
毕业设计|基于STM32单片机的语音识别控制智能停车场设计
毕业设计|基于STM32单片机的语音识别控制智能停车场设计
|
4月前
|
传感器
毕业设计 基于STM32的单片机智能门禁热释人体感应报警设计
毕业设计 基于STM32的单片机智能门禁热释人体感应报警设计
|
4月前
|
传感器
毕业设计 基于51单片机自动智能浇花系统设计
毕业设计 基于51单片机自动智能浇花系统设计
|
5月前
|
人工智能 安全 搜索推荐
单片机毕业设计|基于stm32智能快递箱设计
单片机毕业设计|基于stm32智能快递箱设计
|
12月前
基于51单片机的智能电子秤设计课程设计毕业设计
具体功能: 1、数码管显示当前的重量,单位是g; 2、有去皮和清零功能,可以通过三个按键微调校准重量; 3、最大称重9.999kg,超过最大量程声光报警。
148 0
|
10月前
|
传感器 存储 网络协议
基于51单片机的智能营养秤系统设计与实现
当前系统采用了STC89C52单片机作为主控芯片,预置了多种食材的营养成分数据。用户只需要使用矩阵键盘输入食材编号,将需要称重的食材放置在重力传感器上进行依次称重,系统就可以自动计算出所有食材的各类营养含量总值,并通过液晶屏显示出来。同时,系统根据预设的营养指标,对不达标或超标的食材进行对应的声光提示,提醒用户注意饮食健康。
55 0