【51单片机】【protues仿真】基于51单片机智能晾衣架系统

目录

一、主要功能

二、使用步骤

三、硬件资源

四、软件设计

五、实验现象

一、主要功能

1、数码管显示当前湿度值

2、按键切换手动和自动模式

3、手动模式下按键控制晾衣架伸缩

4、自动模式下按检测光线强度低于阈值,晚上或湿度高,

此时晾衣架缩回,如果检测光线强度高于阈值,白天或湿

度低,伸出晾衣架

5、指示灯显示

二、使用步骤

基于51单片机的智能晾衣架系统是一种结合环境感知与自动控制的家居设备,核心功能包括手动/自动模式切换、温湿度及光照检测、电机驱动晾衣架升降等

三、硬件资源

1、51单片机核心模块

2、按键模块

3、DHT11温湿度传感器、光敏传感器传感器模块

4、限位器开关

5、继电器模块

6、数码管显示模块

四、软件设计

#include<reg52.h>

#include<intrins.h>

#include<absacc.h> //头文件

#define uc unsigned char

#define ui unsigned int

sbit in_go = P1^3;

sbit in_back = P1^2;//手动前进后退按键

sbit out_go = P3^0;

sbit out_back = P3^5;//电机控制输出

sbit limit_go = P3^4;

sbit limit_back = P3^6;//前进后退限位开关

sbit led_go = P1^4;

sbit led_back = P1^5;//前进后退限位指示灯

sbit light = P1^0;//光线传感器

sbit change = P1^1;//手动自动切换按键(默认自动)

sbit led_zhishi = P1^7;

sbit buzz = P1^6;

sbit W1=P2^2;

sbit W2=P2^1;

//定义DHT11数据口

sbit DATA = P2^0;

uc U8FLAG,U8temp,U8comdata,U8RH_data_H_temp,U8RH_data_L_temp,U8T_data_H_temp,U8T_data_L_temp,U8checkdata_temp;

uc U8RH_data_H,U8RH_data_L,U8T_data_H,U8T_data_L,U8checkdata;

uc Mode,humidity;

bit bdata FlagStartRH,hot,cold,humid,dry;

bit bdata flag1,flag2,change_flag,flag_shan,flag_shan1,flag_shan2,flag_HH;

uc m,n,shan;

uc code table[11]={ //共阴极字型码

0x3f, //--0

0x06, //--1

0x5b, //--2

0x4f, //--3

0x66, //--4

0x6d, //--5

0x7d, //--6

0x07, //--7

0x7f, //--8

0x6f, //--9

0x00 //--NULL

};

//定时器0初始化

void Timer0_Init()

{

ET0 = 1; //允许定时器0中断

TMOD = 1; //定时器工作方式选择

TL0 = 0xb0;

TH0 = 0x3c; //定时器赋予初值

TR0 = 1; //启动定时器

EA=1;

}

void Delay1(ui j)

{

uc i;

for(;j>0;j--)

{

for(i=0;i<27;i++);

}

}

void Delay_10us(void)

{

uc i;

i--;

i--;

i--;

i--;

i--;

i--;

}

void delay(ui x)//延时函数

{

ui i,j;

for(i=0;i<x;i++)

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

}

void display()

{

P0=table[humidity/10];

W1=0;

delay(1); //延时

W1=1; //关显示

P0=table[humidity%10];

W2=0;

delay(1); //延时

W2=1; //关显示

}

void main()//主函数

{

uc testnum;

light=0;

buzz=1;

led_zhishi=0;

Timer0_Init();

while(1)//进入死循环

{

work();//调用工作函数

display();

if (FlagStartRH == 1) //温湿度转换标志检查

{

testnum = RH();

FlagStartRH = 0;

humidity = U8RH_data_H; //读出湿度,只取整数部分

if(humidity>=80)

flag_HH=1;

else

flag_HH=0;

TR0 = 1;

}

display();

}

}

五、实验现象

演示视频:

相关推荐
小憩-4 小时前
【stm32】对射式红外传感器计次以及旋转编码器计次
stm32·单片机·嵌入式硬件
微风扬!4 小时前
STM32手动移植FreeRTOS
stm32·单片机·freertos
蓝风破云5 小时前
模拟实现STL中的list容器
c语言·数据结构·c++·链表·迭代器·list·iterator
HHONGQI1235 小时前
STM32 之GP2Y1014AU0F的应用--基于RTOS的环境
stm32·单片机·嵌入式硬件
Peter_Deng.6 小时前
C语言 - 输出参数详解:从简单示例到 alloc_chrdev_region
c语言·开发语言
麦麦在写代码7 小时前
联合体Union
c语言
ShineWinsu11 小时前
对于牛客网—语言学习篇—编程初学者入门训练—复合类型:BC136 KiKi判断上三角矩阵及BC139 矩阵交换题目的解析
c语言·c++·学习·算法·矩阵·数组·牛客网
时空自由民.15 小时前
FOC开环控制代码解读
嵌入式硬件