HRTOS实战:8051使用雨滴传感器DO检测雨滴并通过数码管显示
一、前言在前面的文章中我们使用雨滴传感器的 AO 模拟量输出通过 ADC 获取雨滴传感器的模拟数据并使用4位数码管显示 ADC 转换结果。除了 AO 模拟输出之外常见的雨滴传感器模块还提供 DO 数字输出可以直接根据传感器的阈值判断当前是否检测到雨滴。本文使用 HRTOS 在 8051 单片机上实现一个简单的雨滴检测应用读取雨滴传感器 DO 数字量判断当前是否检测到雨滴使用4位数码管显示检测状态将传感器读取和显示分别设计为独立任务最终显示效果0000检测到雨滴 0001未检测到雨滴通过这个简单的实例可以进一步了解 HRTOS 在 8051 传感器检测类应用中的基本使用方法。二、雨滴传感器 DO 输出雨滴传感器模块通常可以提供 AO 和 DO 两种输出。其中AO模拟量输出可以反映传感器检测到的雨滴变化程度DO数字量输出根据模块上的比较器阈值输出高低电平本文使用的是 DO 数字量输出。程序中约定DO 0检测到雨滴 DO 1未检测到雨滴因此应用程序并不需要进行 ADC 转换只需要读取一个数字状态即可。这种方式比较适合实现简单的开关量检测例如是否下雨 是否有人 是否有障碍物 是否触发传感器如果需要获得更加连续、精确的雨滴变化数据则可以使用前面介绍的 AO 模拟量方式。三、程序结构本实例仍然采用 HRTOS 的多任务方式组织程序。整个应用划分为两个任务┌──────────────────────────┐ │ HRTOS 应用程序 │ ├──────────────────────────┤ │ │ │ task_raindrop_read │ │ 雨滴传感器DO读取任务 │ │ │ │ │ ▼ │ │ raindrop_do │ │ │ │ │ ▼ │ │ task_seg_display │ │ 数码管显示任务 │ │ │ └──────────────────────────┘其中任务1雨滴传感器读取负责周期性调用drv_raindrop_read_do();读取传感器当前的 DO 状态。任务2数码管显示负责不断刷新4位数码管并根据raindrop_do的状态显示0000或者0001这样可以将传感器采集和数据显示分开使程序结构更加清晰。四、定义雨滴传感器状态首先定义一个变量保存雨滴传感器的 DO 状态unsigned char raindrop_do 1;初始化为1表示默认状态为未检测到雨滴传感器读取任务运行后会不断更新这个变量。五、创建雨滴传感器读取任务传感器读取任务如下void task_raindrop_read(void) { while(1) { /* 读取雨滴传感器数字量 */ raindrop_do drv_raindrop_read_do(); /* * 周期读取传感器状态 */ os_delay(50); } }任务首先调用drv_raindrop_read_do();获得当前雨滴传感器的 DO 状态。然后保存到raindrop_do变量中。读取完成之后调用os_delay(50);让当前任务延时一段时间然后再次读取。这样就形成了一个周期性的传感器采集任务读取DO ↓ 保存状态 ↓ 延时 ↓ 再次读取 ↓ 循环对于这种变化速度比较慢的传感器没有必要让任务一直高速读取因此使用周期性任务即可。六、创建数码管显示任务数码管显示任务如下void task_seg_display(void) { while(1) { /* * 显示雨滴传感器状态 * * 0000检测到雨滴 * 0001未检测到雨滴 */ drv_seg_display(0, 0); drv_seg_display(1, 0); drv_seg_display(2, 0); drv_seg_display(3, raindrop_do); } }这里前三位固定显示000最后一位显示raindrop_do。因此当raindrop_do 0;数码管显示0000表示检测到雨滴。当raindrop_do 1;数码管显示0001表示未检测到雨滴。这里没有在显示任务中调用os_delay()而是持续执行数码管刷新操作。这样可以保持动态数码管正常显示。七、初始化 HRTOS 应用系统入口函数void hrtos_main(void) { /* 初始化雨滴传感器 */ drv_raindrop_init(); /* 初始化数码管 */ drv_seg_init(); /* 创建雨滴传感器读取任务 */ os_task_create( task_raindrop_read, 2, 2, 4 ); /* 创建数码管显示任务 */ os_task_create( task_seg_display, 3, 2, 4 ); }首先初始化雨滴传感器drv_raindrop_init();然后初始化4位数码管drv_seg_init();最后创建两个任务os_task_create(task_raindrop_read, 2, 2, 4); os_task_create(task_seg_display, 3, 2, 4);这样 HRTOS 启动后就可以同时运行传感器读取任务和数码管显示任务。八、完整程序完整示例代码如下#include hrtos.h #include hrtos_hal.h /* * * 雨滴传感器DO 4位数码管显示示例 * --------------------------------------------------------- * 功能 * 1. 初始化雨滴传感器 * 2. 读取雨滴传感器数字量DO * 3. 使用4位数码管显示检测状态 * * DO状态 * 0检测到雨滴 * 1未检测到雨滴 * * 数码管显示 * 0000检测到雨滴 * 0001未检测到雨滴 * */ unsigned char raindrop_do 1; /*------------------------------------------------ * 雨滴传感器DO读取任务 *------------------------------------------------*/ void task_raindrop_read(void) { while(1) { /* 读取雨滴传感器数字量 */ raindrop_do drv_raindrop_read_do(); /* * 周期读取传感器状态 */ os_delay(50); } } /*------------------------------------------------ * 数码管显示任务 *------------------------------------------------*/ void task_seg_display(void) { while(1) { /* * 显示雨滴传感器状态 * * 0000检测到雨滴 * 0001未检测到雨滴 */ drv_seg_display(0, 0); drv_seg_display(1, 0); drv_seg_display(2, 0); drv_seg_display(3, raindrop_do); } } /** * brief 雨滴传感器DO示例初始化 */ void hrtos_main(void) { /* 初始化雨滴传感器 */ drv_raindrop_init(); /* 初始化数码管 */ drv_seg_init(); /* 创建雨滴传感器读取任务 */ os_task_create( task_raindrop_read, 2, 2, 4 ); /* 创建数码管显示任务 */ os_task_create( task_seg_display, 3, 2, 4 ); }九、HRTOS任务划分的意义这个例子虽然非常简单但它体现了一个比较典型的嵌入式任务划分方式。传统的单循环程序可能会写成while(1) { raindrop_do drv_raindrop_read_do(); drv_seg_display(0, 0); drv_seg_display(1, 0); drv_seg_display(2, 0); drv_seg_display(3, raindrop_do); }当功能继续增加以后所有功能都会堆积在一个循环中。使用 HRTOS 后可以按照功能拆分传感器任务 ↓ 负责数据采集 显示任务 ↓ 负责数据显示以后如果继续增加蜂鸣器、继电器、串口通信等功能还可以继续创建对应任务而不需要把所有代码都集中在一个while(1)中。例如可以进一步扩展为task_raindrop_read │ ├── 获取雨滴状态 │ ▼ raindrop_do │ ├───────────────┐ ▼ ▼ 显示任务 报警任务 数码管显示 蜂鸣器控制这也是 HRTOS 在实际 8051 项目中的一个重要作用将不同功能按照任务进行组织。十、DO与AO的区别雨滴传感器的 AO 和 DO 适合不同的应用场景。输出方式数据类型典型用途AO模拟量获取雨滴变化程度DO数字量判断是否达到检测阈值如果只是需要判断有没有雨那么 DO 就已经足够。如果需要进一步分析雨滴变化大小 雨量变化趋势 传感器输出曲线则可以使用 AO并通过 ADC 获取更加详细的数据。因此这两个接口并不是相互替代而是针对不同应用需求提供不同的数据形式。十一、总结本文使用 HRTOS 在 8051 单片机上实现了一个简单的雨滴传感器数字量检测实例。整个程序主要包含两个任务task_raindrop_read负责周期读取雨滴传感器 DO 状态task_seg_display负责实时刷新4位数码管。最终通过0000表示检测到雨滴通过0001表示未检测到雨滴。虽然这个实例功能比较简单但它完整体现了传感器采集任务 显示任务的基本 HRTOS 应用结构。对于 8051 这类资源有限的单片机来说通过任务划分组织应用程序可以让程序结构更加清晰也方便后续继续加入更多传感器、执行器和通信功能。后续还可以在这个基础上扩展雨滴报警、继电器控制、串口上传以及多传感器协同等功能。

相关新闻

小龙虾技能之【Dementia Confusion / Disorientation Recognition and Orientation Soothing | 失智老人困惑/迷惘识别与定

小龙虾技能之【Dementia Confusion / Disorientation Recognition and Orientation Soothing | 失智老人困惑/迷惘识别与定

🧭 Dementia Confusion / Disorientation Recognition and Orientation Soothing | 失智老人困惑/迷惘识别与定向安抚 智能分析中枢 图片/视频智能分析 结构化报告 历史报告云端查询 🧭 技能概览 | Overview 模块内容🏷️ 技能名称失智老…

2026/9/27 7:34:59 阅读更多 →
《三国志》游戏的MySQL数据设计与管理

《三国志》游戏的MySQL数据设计与管理

在任何一款成功的游戏背后,数据系统的设计与管理起着至关重要的作用。它不仅决定了游戏的运行效率,更直接影响到玩家的沉浸感和体验。《三国志》作为一款经典的策略游戏,凭借其庞大的数据架构和精细的数据管理,为玩家带来了丰富而多样的游戏体验。 通过对武将、城池、战役…

2026/9/27 7:33:59 阅读更多 →
《三国志》游戏的数据表设计与优化

《三国志》游戏的数据表设计与优化

《三国志》系列游戏中的数据表设计与优化是开发过程中极其重要的环节,尤其是面对复杂的游戏系统时,合理的数据管理架构能显著提升游戏的流畅性和玩家的整体体验。在之前的内容中,已经初步介绍了数据库的基础概念以及《三国志》游戏中的数据管理需求。 本篇文章将深入探讨如…

2026/9/27 7:33:59 阅读更多 →

最新新闻

3个维度拆解招聘网站建设技术要求与对比评测避坑

3个维度拆解招聘网站建设技术要求与对比评测避坑

3个维度拆解招聘网站建设技术要求与对比评测避坑 刚入行做网站,或者准备转行搞这行,最让人头大的往往不是写代码,而是 域名和服务器…

2026/9/27 8:08:19 阅读更多 →
puppet resource 命令完全指南:用 Puppet RAL 直接查询与修改系统状态

puppet resource 命令完全指南:用 Puppet RAL 直接查询与修改系统状态

运维DevOpsIaC 【免费下载链接】puppet Server automation framework and application 项目地址: https://gitcode.com/gh_mirrors/pu/puppet 点击查看 免费下载 puppet resource 是 Puppet 的命令行核心工具之一,被称为"资源抽象层(Re…

2026/9/27 8:08:19 阅读更多 →
Apereo CAS 属性释放策略(Attribute Release Policy)详解:Return Allowed 白名单精准放行

Apereo CAS 属性释放策略(Attribute Release Policy)详解:Return Allowed 白名单精准放行

后端认证鉴权单点登录 【免费下载链接】cas Apereo CAS - Identity & Single Sign On for all earthlings and beyond. 项目地址: https://gitcode.com/gh_mirrors/ca/cas 点击查看 免费下载 本指南以 Apereo CAS 开源仓库中的 Attribute-Release-Policy-Retur…

2026/9/27 8:08:19 阅读更多 →
丹阳网站建设如何落地 2026最新避坑指南

丹阳网站建设如何落地 2026最新避坑指南

丹阳网站建设如何落地 2026最新避坑指南 域名买好了服务器却没配好?SSL证书过期导致客户不敢下单?很多丹阳的老板在 丹阳网站建设如何 启动这一步就卡壳,明明花了钱,网站却像个摆设,流量进不来,询盘留不住。别急, 2026最新…

2026/9/27 8:08:19 阅读更多 →
建网站权威公司最佳实践

建网站权威公司最佳实践

3家权威建站公司实测:保姆级教程避坑指南 别再盯着那些千篇一律的模板网站了。客户一眼就能看出廉价感,转化率惨不忍睹,这才是建站最大的痛点。很多老板为了省钱选了低价套餐,结果做出来的站点像十年前的个人博客,既丑又慢,还过不了SEO的关。…

2026/9/27 8:08:19 阅读更多 →
【零基础学智能仿真-30】二维有限元的形函数与数值积分:从三角形到四边形

【零基础学智能仿真-30】二维有限元的形函数与数值积分:从三角形到四边形

课程摘要 上一节用一维杆说明了弱形式如何产生单元方程。本节走进二维:先用三节点三角形单元推导形函数、雅可比矩阵和应变矩阵,再用一个线性位移场检验计算结果;随后以四节点矩形单元比较单点积分与 \(2\times2\) 高斯积分。通过两个可核对的小实验,理解“怎样描述单元内的…

2026/9/27 8:07:19 阅读更多 →

日新闻

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/9/27 0:00:34 阅读更多 →
SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/9/27 0:00:34 阅读更多 →
FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏 【免费下载链接】FireRed-OpenStoryline FireRed-OpenStoryline is an AI video editing agent that transforms manual editing into intention-driven directing through natural language …

2026/9/27 0:00:34 阅读更多 →

周新闻

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/9/27 0:00:34 阅读更多 →
SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/9/27 0:00:34 阅读更多 →
FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏 【免费下载链接】FireRed-OpenStoryline FireRed-OpenStoryline is an AI video editing agent that transforms manual editing into intention-driven directing through natural language …

2026/9/27 0:00:34 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/25 20:29:43 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/25 20:29:31 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/26 22:52:30 阅读更多 →