上篇推文介绍了以51单片机为控制核心来实现对传感器的控制。本期推文将以电光学院“星火杯”中的优秀作品——基于51单片机的智能晾衣架为例,介绍51单片机在湿度检测方面的应用。

(图片来源:“星火杯”参赛队伍汤玥  李可欣  曹宗青组)

基于51单片机的智能晾衣架设计原理

智能晾衣架设计思路:本设计采用单片机STC89C51作为自动晾衣架的检测及控制核心,通过发光二极管显示晾衣架的工作状态,通过湿度传感器与光敏电阻自动根据环境湿度和光线强度升降晾衣架,在此基础上增加无线控制功能,提供更加方便的操作。

特点

1采用无线遥控控制方式。

2利用光敏电阻来智能识别光线,对衣架智能控制,天黑时自动收衣,天亮后自动晾衣。

3利用湿度传感器,阴雨时自动收衣,天晴后自动晾衣。

4利用限位开关来控制晾衣架停止,防止超限,阻力过大,烧坏电机或者损坏机械。

(文字来源:“星火杯”参赛队伍汤玥  李可欣  曹宗青组)

(图片来源:“星火杯”参赛队伍汤玥  李可欣  曹宗青组)

程序示例:

#include                 //调用单片机头文件

#define uchar unsigned char  //无符号字符型 宏定义        变量范围0~255

#define uint  unsigned int         //无符号整型 宏定义        变量范围0~65535

sbit beep = P1^4;   //蜂鸣器

int flag_300ms ;

//  按键的IO变量的定义

uchar key_can;                 //按键值的变量

sbit wh_led = P2^2;  //温度报警指示灯IO口定义

sbit wl_led = P2^3;  //温度报警指示灯IO口定义

sbit sh_led = P2^1;  //湿度报警指示灯IO口定义

sbit sl_led = P2^0;  //湿度报警指示灯IO口定义

uchar flag_en = 1;

uchar menu_1;        //菜单设计的变量

uint t_high = 35,t_low = 10;        //温度报警参数

uint s_high = 80,s_low = 10;        //湿度报警参数

/***************************************************************

* 名称 : delay_1ms()

* 功能 : 延时1ms函数

* 输入 : q

* 输出 : 无

****************************************************************/

void delay_1ms(uint q)

{

uint i,j;

for(i=0;i

for(j=0;j<120;j++);

}

sbit dht11=P1^5;         //温度传感器IO口定义

uchar table_dht11[5]={1,2,3,4,5};

uchar code table_num[]="0123456789abcdefg";

sbit rs=P1^0;         //寄存器选择信号 H:数据寄存器          L:指令寄存器

sbit rw=P1^1;         //寄存器选择信号 H:数据寄存器          L:指令寄存器

sbit e =P1^2;         //片选信号   下降沿触发

/********************************************************************

* 名称 : delay_uint()

* 功能 : 小延时。

* 输入 : 无

* 输出 : 无

***********************************************************************/

void delay_uint(uint q)

{

while(q--);

}

/********************************************************************

* 名称 : write_com(uchar com)

* 功能 : 1602命令函数

* 输入 : 输入的命令值

* 输出 : 无

***********************************************************************/

void write_com(uchar com)

{

e=0;

rs=0;

rw=0;

P0=com;

delay_uint(25);

e=1;

delay_uint(100);

e=0;

}

/********************************************************************

* 名称 : write_data(uchar dat)

* 功能 : 1602写数据函数

* 输入 : 需要写入1602的数据

* 输出 : 无

***********************************************************************/

void write_data(uchar dat)

{

e=0;

rs=1;

rw=0;

P0=dat;

delay_uint(25);

e=1;

delay_uint(100);

e=0;

}

/***********************lcd1602上显示特定的字符****0XDF 度********************/

void write_zifu(uchar hang,uchar add,uchar date)

{

if(hang==1)

write_com(0x80+add);

else

write_com(0x80+0x40+add);

write_data(date);

}

/***********************lcd1602上显示两位十进制数************************/

void write_sfm2(uchar hang,uchar add,uint date)

{

if(hang==1)

write_com(0x80+add);

else

write_com(0x80+0x40+add);

write_data(0x30+date/10%10);

write_data(0x30+date%10);

}

/***********************lcd1602上显示这字符函数************************/

void write_string(uchar hang,uchar add,uchar *p)

{

if(hang==1)

write_com(0x80+add);

else

write_com(0x80+0x40+add);

while(1)

{

if(*p == '')  break;

write_data(*p);

p++;

}

}

/***********************lcd1602初始化设置************************/

void init_1602()        //lcd1602初始化

{

write_com(0x38);

write_com(0x0c);

write_com(0x06);

delay_uint(1000);

write_string(1,0,"Wd:00  H00  L00   ");

write_string(2,0,"Sd:00% H00% L00% ");

write_zifu(1,5,0xdf);        //显示度

write_zifu(1,10,0xdf);        //显示度

write_zifu(1,15,0xdf);        //显示度

write_sfm2(1,3,table_dht11[2]);           //显示温度

write_sfm2(2,3,table_dht11[0]);   //显示湿度

write_sfm2(1,7,t_high);          //显示温度

write_sfm2(2,7,s_high);   //显示湿度

write_sfm2(1,10,t_low);          //显示温度

write_sfm2(2,10,s_low);   //显示湿度

}

/********************独立按键程序*****************/

uchar key_can;         //按键值

void key()             //独立按键程序

{

static uchar key_new;

key_can = 20;               //按键值还原

P3 |= 0xf0;

if((P3 & 0xf0) != 0xf0)                //按键按下

{

delay_1ms(1);                     //按键消抖动

if(((P3 & 0xf0) != 0xf0) && (key_new == 1))

{                                                //确认是按键按下                        key_new = 0;

switch(

switch(P3 & 0xf0)

{

case 0xd0: key_can = 1; break;           //得到k1键值

case 0xb0: key_can = 2; break;           //得到K2键值

case 0x70: key_can = 3; break;           //得到k3键值

}

}

}

else

key_new = 1;

}

(代码来源: http://news.eeworld.com.cn/mcu/ic480289.html)

(代码来源: http://news.eeworld.com.cn/mcu/ic480289.html)

本次推文简要介绍了单片机应用于智能晾衣架的实例与原理,同学们可以自己尝试进性编程学习,后续的推文还将继续介绍51单片机其他模块的使用。

单片机光敏电阻控制蜂鸣器_走进单片机|第七期:湿度检测相关推荐

  1. 单片机光敏电阻控制蜂鸣器_小白求助——如何用光敏电阻控制蜂鸣器开关?(晴天娃娃闹钟)...

    本帖最后由 vincentlee 于 2014-7-24 19:51 编辑 经过参考两位官方大神的教程 1.http://www.geek-workshop.com/thread-1340-1-1.h ...

  2. 单片机光敏电阻控制蜂鸣器_光敏电阻控制蜂鸣器的开关,当值大于200时关,反之则开。...

    [判断题]作用在质点系上的外力的主矢始终为零,则质点系中每个质点的动量都保持不变.(2.0分) [填空题]图示系统中,半径 r = 40cm 的半圆形凸轮 A ,水平向右作匀加速运动, a A = 1 ...

  3. diy 单片机 自动浇花_基于单片机的自动浇花系统的设计

    中图分类号:TP368.12文献标识码:A 文章编号:2096-4706(2018)03-0000-03 Design of Automatic Watering System Basedon Sin ...

  4. 单片机彩灯移动实验_基于单片机的广告移动彩灯

    基于单片机的广告移动彩灯 摘要 随着电子技术的迅速发展,单片机得到了越来越多的应用.本设计用单片机89S51结合LED(发光二极管)制作了一个广告移动彩灯,它由一块89S51组成,通过逐次扫描其中一块 ...

  5. diy 单片机 自动浇花_基于单片机的自动浇花器的制作方法

    本实用新型涉及浇花设备技术领域,尤其涉及一种基于单片机的自动浇花器. 背景技术: 随着人们生活质量的不断提高,人们喜欢在家里放置花卉来点缀家中环境,从而使花卉种植不断普及,然而大多数花草生长问题是由花 ...

  6. diy 单片机 自动浇花_基于单片机的自动浇花系统

    摘要 很多家庭都种植有令人赏心悦目的花卉,但是当主人外出几天时,为避免这些花卉处于无人浇水的境地,所以设计一种自动浇花器十分必要的.本系统采用51单片机STC12C5A60S2作为核心控制器,用土壤湿 ...

  7. stm32f302实现斩波控制步进电机_电子产品装调与智能检测实训考核装置

    SBGYD-185E型电子产品装调与智能检测实训考核装置 自购 双踪示波器YLDS1102D: 一.设备概述 电子产品装调与智能检测实训考核设备生产实际和职业岗位的技能要求按照职业院校的教学和实验实训 ...

  8. linux pwm控制蜂鸣器 滴滴_51单片机PWM直流电机PID控制转速源程序

    \ AT89C51单片机PWM直流电机转速PID控制源程序,重点介绍利用MCS-51系列单片机控制PWM信号从而实现对直流电机转速进行控制的方法.设计中采用了专门的芯片组成了PWM信号的发生系统并且对 ...

  9. 51单片机光敏电阻控制led亮

    1.光敏电阻和单片机的接线vcc-5v,gnd-gnd,do-p2^0 2.我设置的是当周围亮时亮两盏灯,暗时亮四盏灯,可以根据自己需要调整.代码如下: #include "reg51.h& ...

最新文章

  1. 绘制分类界面以及性能曲面中的meshgrid函数
  2. joa-framework 工作流高速开发框架(jeecg官方工作流版本号) 公布
  3. 巨头入局,华为云将给音视频行业带来什么?
  4. 学校计算机教室安全预案,小学校园微机室安全事故应急疏散预案
  5. 十五、详述 IntelliJ IDEA 插件的安装及使用方法
  6. vs code打开新的文件后旧的文件被顶掉
  7. (47)FPGA同步复位与异步复位(异步复位同步释放)
  8. Java设计模式学习总结(14)——结构型模式之代理模式
  9. 那些年做的xmind思维导图
  10. wince 开发_正运动技术运动控制卡应用开发教程之Python
  11. Webpack 学习笔记
  12. meta分析stata教程
  13. JDBC作用接口和创建的步骤详细解析
  14. PCIe/PCI插槽不够用怎么办
  15. 用Python写一个双人对战的小游戏;
  16. C#DataGridView使用线程定时循环滚动数据
  17. 微信公众号信息推送实现业务解耦
  18. ae制作小球轨迹运动_AE教程AE特效:教你如何用AE创建一个弹跳运动的小球特效...
  19. MySQL期末复习题和答案
  20. 第三代电子计算机的核心部件为,计算机基础试题

热门文章

  1. 解决uni-app中flex布局子元素宽度溢出
  2. SQLserver模糊查询
  3. oracle可以迁徙mysql吗_项目oracle迁徙到mysql的小总结
  4. 利用函数wavread对语音信号进行采样_语音识别第4讲:语音特征参数MFCC
  5. python polar contour_Python将2darray的最后一行和第二列添加到最后位置 - Polar Contour图...
  6. 关于这件事,我有话要说!
  7. 一天搞定HTML----标签的嵌套规则06
  8. jQeury的日期时分秒生成器插件,使用jQuery的匿名函数,静态方法的使用
  9. Java设计模式——桥模式
  10. android开发中,可能会导致内存泄露的问题