鱼C论坛

 找回密码
 立即注册
查看: 215|回复: 1

Proteus 仿真89c51设计晾衣架

[复制链接]
发表于 2024-6-5 22:00:42 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
被单片机课程设计逼疯,三个人连夜查材料编程序做仿真失败n次,心碎了......
智能晾衣架设计
设计要求
(1)电机的转动是通过继电器控制的;
(2)开机初始时为智能模式,通过光敏自动识别光线强弱(白天或夜晚),采用DHT11温湿度传感器检测空气的湿度,数码管显示湿度值;
(3)当湿度小于80%时,电机会相应的白天伸出或夜晚收回衣架,碰触相应的限位行程开关,停止转动。如果外面的湿度达到80%以上时,即使是白天衣架也会自动收回。
(4)在实际应用中行程开关安装在晾衣架的上下限位处,当晾衣架上升或下降到极限时,会碰触行程开关(设计中只是模拟,需要用手碰触),行程开关会给单片机信号,从而防止过卷,安全无误;
(5)当按下遥控板上的切换按键,实现智能模式与手动模式的切换。手动模式按一下伸出或收回键电机相应的转动,再按一下停止,晾衣架到限位即手动碰触行程开关会停止转动。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-6-5 22:01:07 | 显示全部楼层
这个智能晾衣架设计的要求听起来是挺复杂的,但是我们可以一步一步来解决。首先,我们需要编写程序控制单片机,然后通过继电器控制电机的转动。

Step 1:配置 IO 端口
首先,我们需要配置 IO 端口用来控制继电器和行程开关。假设我们将继电器控制引脚接到 P2.0 端口,行程开关引脚接到 P3.0 和 P3.1 端口。那么我们需要在程序一开始就进行配置:
sbit relay = P2^0; // 继电器控制引脚
sbit limit_up = P3^0; // 上限位行程开关
sbit limit_down = P3^1; // 下限位行程开关

Step 2:配置 DHT11 温湿度传感器
接下来,我们需要配置 DHT11 温湿度传感器。这里我使用了一个已经封装好的 DHT11 库,你可以在网上搜索并下载这个库。下载好后,将库文件添加到 Proteus 中,并在程序中引入该库。
#include <DHT11.h> // 引入 DHT11 库

sbit DHT11_DAT=P2^7; // DHT11 数据引脚连接到 P2.7

DHT11 DHT11_obj; // 创建一个 DHT11 对象

Step 3:初始化程序
接下来,我们需要编写初始化程序,用于配置串口、继电器等。
void Init()
{
    EA = 1; // 允许全局中断
    TMOD = 0x20; // 设置计时器1为8位自动重载模式
    TH1 = 0xFD; // 波特率设置
    TCON = 0x69; // 启动计数器1
    PCON = 0x00; // 波特率不加倍
    SCON = 0x50; // 串口工作方式1
}

void main()
{
    Init(); // 初始化程序

    // 这里编写其他代码...
}

Step 4:读取光敏传感器和 DHT11 传感器数据
为了实现光敏自动识别光线强弱、检测空气湿度等功能,我们需要读取光敏传感器和 DHT11 传感器的数据。这里就不具体编写读取传感器数据的代码,你可以自行查找相关资料。

Step 5:编写自动模式和手动模式的代码
根据设计要求,我们需要分别编写自动模式和手动模式的代码。

在自动模式下,根据光敏传感器和 DHT11 传感器的数据判断是否需要伸出或收回晾衣架。
void AutoMode()
{
    while (1) {
        // 读取光敏传感器和 DHT11 传感器数据

        if (光线强度是白天 && 湿度小于80%) {
            // 控制晾衣架伸出
            relay = 1;
        } else {
            // 控制晾衣架收回
            relay = 0;
        }
    }
}

在手动模式下,通过按下遥控板上的按钮来控制晾衣架的转动。
void ManualMode()
{
    while (1) {
        if (按下伸出按钮) {
            // 控制晾衣架伸出
            relay = 1;
        } else if (按下收回按钮) {
            // 控制晾衣架收回
            relay = 0;
        }
    }
}

Step 6:处理行程开关信号
最后,我们需要编写处理行程开关信号的代码。当晾衣架达到极限位置时,行程开关会触发,从而发送信号给单片机停止转动。
void LimitSwitchInterrupt() interrupt 0
{
    if (limit_up == 0 || limit_down == 0) {
        // 行程开关触发,停止转动
        relay = 0;
    }
}

以上就是初步的代码框架,你可以根据实际情况进行修改和完善。希望能够帮助到你!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-24 00:12

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表