【TB作品】msp430g2553单片机,家用可燃气体监测报警器,MQ-2,MQ5,PWM风扇

news2025/1/21 0:54:32

功能

//家用可燃气体监测报警器
//硬件:MQ-2 MQ5 OLED 蜂鸣器 按键 风扇
//1 OLED显示天然气、液化气浓度
//2 OLED显示可燃气体报警临界值
//3 2个按键用于修改可燃气体报警临界值
//4 MQ2检测到的浓度或者MQ7检测到的浓度 高于临界值时,蜂鸣器报警+风扇打开

//line:
//mq2 vcc-3.3v gnd-gnd data-p6.0
//mq5 vcc-3.3v gnd-gnd data-p6.1
//oled vcc-3.3v gnd-gnd scl-p2.0 sda-p2.2
//buzzer vcc-3.3v gnd-gnd data-p3.6
//fan vcc-3.3v gnd-gnd data-p3.5
//key1-p1.1 key2-p2.1 nocare

部分程序


int main(void)
{
    unsigned char dis[10];
    unsigned char time_cyc = 0;
    int set_value = 50;  //设置临界值
    int adc_prec[4];  //adc结果的百分比结果

    WDTCTL = WDTPW + WDTHOLD; /* Stop WDT */

    /* 初始化显示 */
    OLED_Init(); /* OLED初始化 */
    OLED_ShowString(0, 0, "MQ-2:");
    OLED_ShowString(0, 2, "MQ-5:");
    OLED_ShowString(0, 4, " SET:");
    dis[0] = set_value % 100 / 10 + '0';
    dis[1] = set_value % 10 + '0';
    dis[2] = 37;                     //这表示百分号
    dis[3] = 0;
    OLED_ShowString(8 * 6, 4, dis);

    /*按键端口 */
    P1DIR &= ~BIT1;
    P1SEL &= ~BIT1;
    P1REN |= BIT1;
    P1OUT |= BIT1;

    P2DIR &= ~BIT1;
    P2SEL &= ~BIT1;
    P2REN |= BIT1;
    P2OUT |= BIT1;

    /* 风扇端口 P35 */
    P3DIR |= BIT5;

    /* 蜂鸣器端口P3.6  PWM 频率是(1MHZ/1000)   占空比是TBCCR6/TBCCR0 */
    P3SEL |= BIT6;                       // P3.5-7.6 option select



    _EINT();
    while (1)
    {

        //显示MQ2 MQ5
        delay_ms(10);
        time_cyc = (time_cyc + 1) % 10;
        if (time_cyc == 1) /* 10 个10ms执行一次 */
        {
            adc_prec[0] = (int) ((float) (ADCresults[0]) * 1.0 / 4096.0 * 100); //结果转化成百分比
            dis[0] = adc_prec[0] % 100 / 10 + '0';
            dis[1] = adc_prec[0] % 10 + '0';
            dis[2] = 37;                     //这表示百分号
            dis[3] = 0;
            OLED_ShowString(8 * 6, 0, dis);//第一排显示MQ2

            adc_prec[1] = (int) ((float) (ADCresults[1]) * 1.0 / 4096.0 * 100); //结果转化成百分比
            dis[0] = adc_prec[1] % 100 / 10 + '0';
            dis[1] = adc_prec[1] % 10 + '0';
            dis[2] = 37;                     //这表示百分号
            dis[3] = 0;
            OLED_ShowString(8 * 6, 2, dis);//第一排显示MQ5

        }

        //按键1检测处理
        if (!(P1IN & BIT1))
        {
            while (!(P1IN & BIT1))
                ;
            if (set_value < 95)
                set_value += 1;                     //临界值加1

            adc_prec[0] = (int) ((float) (ADCresults[0]) * 1.0 / 4096.0 * 100); //结果转化成百分比
            dis[0] = set_value % 100 / 10 + '0';
            dis[1] = set_value % 10 + '0';
            dis[2] = 37;                     //这表示百分号
            dis[3] = 0;
            OLED_ShowString(8 * 6, 4, dis);
        }

        //按键2检测处理
        if (!(P2IN & BIT1))
        {
            while (!(P2IN & BIT1))
                ;
            if (set_value > 5)
                set_value -= 1;                     //临界值-1

            adc_prec[0] = (int) ((float) (ADCresults[0]) * 1.0 / 4096.0 * 100); //结果转化成百分比
            dis[0] = set_value % 100 / 10 + '0';
            dis[1] = set_value % 10 + '0';
            dis[2] = 37;                     //这表示百分号
            dis[3] = 0;
            OLED_ShowString(8 * 6, 4, dis);
        }

        //临界值判断
        if (adc_prec[0] > set_value || adc_prec[1] > set_value) //MQ2>临界值  或者 MQ7>临界值
        {
            TBCCR6 = 500; //打开蜂鸣器
            P3OUT &= ~BIT5;//打开风扇
        }
        else
        {
            TBCCR6 = 0; //关闭打开蜂鸣器
            P3OUT |= BIT5;//关闭风扇
        }

    }
}

#pragma vector=ADC12_VECTOR
__interrupt void ADC12ISR(void)
{

    switch (__even_in_range(ADC12IV, 34))
    {
    case 12:                                  // Vector 12:  ADC12IFG3
        ADCresults[0] = ADC12MEM0;         // Move A0 results, IFG is cleared
        ADCresults[1] = ADC12MEM1;         // Move A1 results, IFG is cleared
        ADCresults[2] = ADC12MEM2;         // Move A2 results, IFG is cleared
        ADCresults[3] = ADC12MEM3;         // Move A3 results, IFG is cleared

    default:
        break;
    }
}




在这里插入图片描述

在这里插入图片描述

全部程序

https://docs.qq.com/sheet/DUEdqZ2lmbmR6UVdU?tab=BB08J2

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1789940.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

正点原子[第二期]Linux之ARM(MX6U)裸机篇学习笔记-25 多点电容触摸屏实验

前言&#xff1a; 本文是根据哔哩哔哩网站上“正点原子[第二期]Linux之ARM&#xff08;MX6U&#xff09;裸机篇”视频的学习笔记&#xff0c;在这里会记录下正点原子 I.MX6ULL 开发板的配套视频教程所作的实验和学习笔记内容。本文大量引用了正点原子教学视频和链接中的内容。…

qlv文件怎么转换成mp4,qlv文件转换成mp4文件的工具软件

qlv转MP4的方法&#xff0c;一直是广大视频爱好者关注的问题。qlv是一种较为特殊的视频格式&#xff0c;而MP4则以其广泛的兼容性和优秀的播放效果&#xff0c;成为众多设备上的首选格式。因此&#xff0c;掌握qlv转MP4的技巧&#xff0c;对于提升视频观看体验至关重要。本文将…

svg使用 element plus 使用外部下载的svg,使用或作为背景图片的使用方式,svg背景填充自适应父级宽高

friger.vue 注意&#xff1a;引入路径后加#svgView(preserveAspectRatio(none))&#xff0c;可解决宽高设置无效的问题 代码上就这两句就行&#xff0c;它去这个路径下去找/assets/svgs/login-bg.svg&#xff0c;往这个目录下放svg文件就行<template><div class&quo…

D435相机结合Yolo V8识别出目标物体,并转点云出抓取位姿。

最近项目上需要完成整个识别、定位、到最后的抓取流程。 分享一下&#xff0c;通过使用D435相机并结合Yolo V8识别出目标物体后&#xff0c;抠取出目标物体部分的有效深度图&#xff0c;最后将前景物体部分的RGB D435相机结合Yolo V8识别出目标物体&#xff0c;并转点云出抓取位…

chatgpt之api的调用问题

1.调用api过程中&#xff0c;出现如下报错内容 先写一个测试样例 import openaiopenai.api_key "OPEN_AI_KEY" openai.api_base"OPEN_AI_BASE_URL" # 是否需要base根据自己所在地区和key情况进行completion openai.ChatCompletion.create(model"g…

空调外机清洁机器人设计

现在的空调&#xff0c;有很多安装在高层&#xff0c;一旦安装使用后&#xff0c;外机几乎不可能再清洗。因为费用高&#xff0c;清洁工人的钱应该是好几百还不止&#xff1b;清洁风险高&#xff0c;空调师傅需要高空作业&#xff0c;如果发生意外业主难以承担。但空调运行几年…

2024年分布式存储技术趋势:高性能、灵活架构与广泛应用

在数据驱动的世界中&#xff0c;存储技术的进步对于支撑现代企业和社会的数字化需求至关重要。2024年&#xff0c;分布式存储技术的发展呈现出一系列令人兴奋的趋势&#xff0c;预示着存储行业的未来走向。让我们一起探索这些关键趋势&#xff0c;并了解它们如何塑造我们的数据…

陆面生态水文模拟与多源遥感数据同化的实践技术应用

了解陆表过程的主要研究内容以及陆面模型在生态水文研究中的地位和作用&#xff1b;熟悉模型的发展历程&#xff0c;常见模型及各自特点&#xff1b;理解Noah-MP模型的原理&#xff0c;掌握Noah-MP模型在单站和区域的模拟、模拟结果的输出和后续分析及可视化等方法&#xff1b;…

Servlet详解(下)

目录 一、Servlet详解1.1、核心接口和类1.1.1、Servlet接口1.1.2、GenericServlet1.1.3、HttpServlet(推荐) 1.2、两种配置方法1.2.1、使用web.xml1.2.2、使用注解 二、Servlet应用2.1、request对象2.2、request主要方法2.2、response对象2.3、response主要方法 三、转发与重定…

LangChain框架介绍

LangChain 的核心组件 模型 I/O 封装 LLMs&#xff1a;大语言模型Chat Models&#xff1a;一般基于 LLMs&#xff0c;但按对话结构重新封装PromptTemple&#xff1a;提示词模板OutputParser&#xff1a;解析输出 数据连接封装 Document Loaders&#xff1a;各种格式文件的加载…

大数据数据治理

大数据数据治理介绍 大数据数据治理是一个复杂的过程&#xff0c;涉及到数据的标准化、融通、关联、解析、聚合等一系列活动。其核心目标是在确保数据安全的基础上&#xff0c;提高大数据资源和资产的可用性、易用性和可靠性&#xff0c;从而显著提升大数据资源和资产的价值7。…

【阿里前端面试题】聊聊前端性能优化的方案,解决过什么样的性能问题?

大家好&#xff0c;我是“寻找DX3906”。每天进步一点。日积月累&#xff0c;有朝一日定会厚积薄发&#xff01; 前言&#xff1a; 前面已经和大家分享了4篇面试题&#xff1a; 《【阿里前端面试题】浏览器的加载渲染过程》 《【阿里前端面试题】客户端和服务器交互&#xff…

店匠科技亮相VivaTech,新零售解决方案引关注

在中法建交60周年之际,两国关系持续发展并共同推动双方在人工智能和全球治理领域达成重要合作。同时,浙江-法国高新产业创新合作对接会在巴黎顺利举行,进一步促进了中法两国在高新技术领域的交流与合作。 紧跟此次访问的步伐,众多中国科技创新企业齐聚巴黎,于5月22日至25日在法…

热更新简述

只要实现了进程级别的无状态(或在重启时恢复状态),除了跨过"重启期间"的连接会受到影响这个问题之外,我们还可以通过重启进程的方式实现热更新 优雅的进程切换 在热更新期间,新旧经常会同时运行,旧进程处理旧的请求,等处理完全部请求之后,再退出,而新进程则负责处理…

通用多物理场仿真PaaS平台伏图(Simdroid)5.0发布 | 试用

伏图&#xff08;Simdroid&#xff09;是云道智造自主研发的通用多物理场仿真PaaS平台&#xff0c;历经十年打磨&#xff0c;已迭代至5.0版本&#xff0c;实现“工程可用”。 通用多物理场仿真PaaS平台伏图(Simdroid)5.0 伏图5.0具备自主可控的固体力学、流体力学、电动力学、热…

个人参与场外期权交易的最全指南

个人参与场外期权交易的最全指南 一、引言 场外期权作为金融市场中的一大亮点&#xff0c;为个人投资者提供了多样化的风险管理及投资策略选择。本文将详细探讨个人如何安全、有效地参与场外期权交易。 文章来源/&#xff1a;财智财经 二、理解场外期权 场外期权是双方通过协…

CSS双飞翼布局

双飞翼布局是一种经典的CSS布局模式&#xff0c;主要用于实现左右两列固定宽度&#xff0c;中间列自适应的布局。 比如&#xff1a;写一个左中右布局占满全屏&#xff0c;其中左、右两块固定宽 200px&#xff0c;中间自适应&#xff0c;要求先加载中间块。 <!DOCTYPE html…

智能工厂总体设计方案

近年来&#xff0c;中国制造业长久以来依靠的劳动力优势正在逐步丧失。廉价的劳动力大军&#xff0c;曾是中国制造业发展的主动力&#xff0c;如今已不如往昔那么庞大和廉价&#xff0c;企业还面临不断恶化的用工短缺问题。因此&#xff0c;对于大规模制造生产&#xff0c;并想…

【langchain手把手3】使用示例选择器构建Prompt

【langchain手把手3】使用示例选择器构建Prompt Example selector 示例选择器实现用于选择示例以将其包括在提示中的逻辑。这使我们能够选择与输入最相关的示例。core内置的有以下3种示例选择器&#xff1a; LengthBasedExampleSelector&#xff1a;MaxMarginalRelevanceExamp…