【TB作品】msp430g2553单片机,DS18B20,温控装置,iic OLED

功能

/*

  • 硬件:DS18B20+OLEDIIC+绿灯+红灯+一个按键+蜂鸣器+加热片
  • 功能:
  • 1 显示温度
  • 2 显示临界值,按键可以加减临界值,临界值在20~35之间可调。
  • 3 实际温度高于(临界值+1)后绿灯亮表示降温。
  • 4 实际温度低于(临界值-1)后加热片工作表示加热。
  • 5 实际温度高于35摄氏度无源蜂鸣器报警。
  • 6 设置温度时候,临界值高于30摄氏度,红灯亮,提醒避免设置温度过高。
  • LINE:
  • DS18B20: VCC-VCC DS-P15 GND-GND
  • OLED:GND-GND VCC-VCC SCL-P20 SDA-P21
  • BUZZER:VCC-VCC GND-GND IN-P22
  • JIAREPIAN:VCC-VCC GND-GND IN-P23
  • KEY:P13
  • GREEN LED :P16
  • RED LED:P10
    */

部分程序


int main( void )
{
    unsigned char   dis[10];
    unsigned char   time_cyc = 0;

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

    if ( CALBC1_8MHZ == 0xFF )              /* If calibration constant erased */
    {
        while ( 1 )
            ;                       /* do not load, trap CPU!! */
    }
    DCOCTL  = 0;                            /* Select lowest DCOx and MODx settings */
    BCSCTL1 = CALBC1_8MHZ;                  /* Set range */
    DCOCTL  = CALDCO_8MHZ;                  /* Set DCO step + modulation * / */

    /* 初始化显示 */
    OLED_Init();                            /* OLED初始化 */
    OLED_ShowString( 0, 0, "DS18B20:" );
    OLED_ShowString( 0, 4, "SET:" );
    display_set_temp();

    /* 10MS */
    CCTL0   = 0;                            /* CCR0 interrupt enabled */
    CCR0    = 10000;                        /* 10ms */
    TACTL   = TASSEL_2 + MC_2 + ID_3;       /* SMCLK, contmode */
    _EINT();

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

    /* 绿灯端口 */
    P1DIR |= BIT6;

    /* 红灯端口 */
    P1DIR |= BIT0;

    /* 蜂鸣器端口 PWM:当TA1CCR1=500 蜂鸣器响,当TA1CCR1=0,蜂鸣器不响 */
    P2DIR       |= BIT2;
    P2SEL       |= BIT2;

    /* 加热片端口 */
    P2DIR |= BIT3;

    while ( 1 )
    {
        CCTL0 = CCIE;
        LPM0;
        time_cyc = (time_cyc + 1) % 30;
        if ( time_cyc == 1 )                                    /* 30 个10ms执行一次 */
        {
            temp_value  = get_one_temperature();        /* 读取温度 */
            dis[0]      = temp_value % 1000 / 100 + '0';
            dis[1]      = temp_value % 100 / 10 + '0';
            dis[2]      = '.';
            dis[3]      = temp_value % 10 + '0';
            dis[4]      = 'C';
            dis[5]      = 0;
            OLED_ShowString( 0, 2, dis );
        }

        /* 以下是根据温度控制 */
        if ( temp_value > (set_temp + 10) )             /* 3 实际温度高于(临界值+1)后绿灯亮表示降温。 */
        {
            P1OUT   |= BIT6;                        /* 高电平 绿灯点亮 */
            P2OUT   |= BIT3;                        /* 加热片不工作 */
            OLED_ShowString( 0, 6, "cooling" );
        }else if ( temp_value < (set_temp - 10) )       /* 4 实际温度低于(临界值-1)后加热片工作表示加热。 */
        {
            P1OUT   &= ~BIT6;                       /* 绿灯不亮 */
            P2OUT   &= ~BIT3;                       /* 低电平 加热片工作 */
            OLED_ShowString( 0, 6, "heating" );
        }else  {
            P1OUT   &= ~BIT6;                       /* 绿灯不亮 */
            P2OUT   |= BIT3;                        /* 加热片不工作 */
            OLED_ShowString( 0, 6, "        " );
        }
        /* 5 实际温度高于35摄氏度无源蜂鸣器报警。 */
        if ( temp_value > 350 )
        {
            TA1CCR1 = 500;                          /* PWM占空比 500/1000  蜂鸣器响 */
        }else  {
            TA1CCR1 = 0;
        }
        /* 6 设置温度时候,临界值高于30摄氏度,红灯亮,提醒避免设置温度过高。 */
        if ( set_temp > 300 )
        {
            P1OUT |= BIT0;                          /* 高电平 红灯点亮 */
        }else  {
            P1OUT &= ~BIT0;
        }


        /* 以下是按键处理   2 显示临界值,按键可以加减临界值,临界值在20~35之间可调。 */
        if ( time_key == 0 )
        {
            if ( double_key_ifg == 0 )
            {
                if ( (P1IN & BIT3) == 0 )
                {
                    while ( (P1IN & BIT3) == 0 )
                        ;               /* 当循环 等待按键松开 */
                    time_key    = 10;   /* 时间内双击按键检测 */
                    double_key_ifg  = 1;
                }
            }else  {
                double_key_ifg = 0;             /*上次按过 这次恢复到0 是单击 */

                /* 单击按键处理 */
                if ( set_temp < 350 )
                {
                    set_temp += 10;
                }
                display_set_temp();
            }
        }else  {
            if ( double_key_ifg == 1 )      /*上次按过 时间内再次按了 */
            {
                if ( (P1IN & BIT3) == 0 )
                {
                    while ( (P1IN & BIT3) == 0 )
                        ;       /* 当循环 等待按键松开 */
                    double_key_ifg  = 0;
                    time_key    = 0;

                    /* 双击按键处理 */
                    if ( set_temp > 200 )
                    {
                        set_temp -= 10;
                    }
                    display_set_temp();
                }
            }
        }
    }
}

全部程序

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

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【云原生_K8S系列】什么是 Kubernetes Pod?用实际例子解释

Kubernetes&#xff08;简称K8S&#xff09;是一个开源的容器编排平台&#xff0c;用于自动化容器化应用的部署、扩展和管理。在Kubernetes中&#xff0c;Pod是最小的部署单元。理解Pod的概念对于掌握Kubernetes至关重要。本篇文章将详细解释什么是Kubernetes Pod&#xff0c;并…

【机器学习】LoRA:大语言模型中低秩自适应分析

LoRA&#xff1a;大型语言模型中的低秩自适应调优策略 一、LoRA的原理与优势二、LoRA在编程和数学任务中的性能表现四、总结与展望 随着人工智能技术的飞速发展&#xff0c;大型语言模型已成为自然语言处理领域的明星技术。然而&#xff0c;这些模型通常拥有数以亿计的参数&…

vivado BD_PIN、BD_PORT

BD_PIN 描述 块设计引脚或bd_pin对象是块设计上的逻辑连接点 单间牢房块设计引脚允许抽象单元的内部逻辑&#xff0c;并且 简化以便于使用。引脚可以是标量引脚或总线引脚&#xff0c;并且可以出现在层次结构上 块设计单元或叶级单元。 相关对象 如图所示&#xff0c;块设计引脚…

Mac保姆级配置jdk环境

1.找到下载的jdk环境 通常是这个。留作备用 /Library/Java/JavaVirtualMachines/jdk1.8.0_291.jdk/Contents/Home/bin 然后新开一个终端下执行以下命令 sudo vim ~/.bash_profile 进入编辑模式后 按 i 开始添加内容结束编辑模式按 ESC结束后保存输入 :wq!不保存输入 :q! 注意…

react native中内容占位效果

react native中内容占位效果 效果实例图实例代码skeleton.jsx 效果实例图 实例代码skeleton.jsx import React, { useEffect, useRef } from "react"; import { Animated, StyleSheet, View } from "react-native"; import { pxToPd } from "../../.…

【Lua】IntelliJ IDEA 写注释或选中变量单词时偶尔会选中相邻的内容或下一行内容

例如: --UI代码local a 0 当你想在a变量上方加一行 --UI代码注释时&#xff0c;会发现敲打daima中文拼音时&#xff08;还未按回车&#xff09;就会选中当前行以及下一行前半部分。 打完按空格就会变成这样子&#xff01; 原因是因为开启了英文检测&#xff0c;需要关掉它。 …

LabVIEW实现汽车逆变器功能测试系统

​介绍了如何利用LabVIEW开发汽车逆变器&#xff08;包括功率板和控制板&#xff09;的自动测试设备&#xff08;ATE&#xff09;&#xff0c;实现对额定800V电压、300A电流的逆变器进行功能测试。系统通过CAN2.0通讯协议&#xff0c;实现电机控制、温度传感器监测、电压校验和…

js中弹框有那些,提示框、请求成功弹窗、请求失败弹框等

我这里写的是个人推荐仅供参考&#xff1a; 效果图&#xff1a; 代码实现 <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title><script src"js/jquery-3.6.3.js"></script><style&g…

el-table的一些操作

1.el-table实现全部选择和全部取消 其实非常简单&#xff0c;el-table自带的都有方法toggleAllSelection()和clearSelection() 表格数据&#xff1a; <el-button clickcheckAll>全选</el-button> <el-button clickcancelAll>反选</el-button>// 全…

SQL进阶day10————多表查询

1嵌套子查询 1.1月均完成试卷数不小于3的用户爱作答的类别 我的代码&#xff1a;思路就是这么个思路&#xff0c;反正没有搞出来当月均完成试卷数 select tag,count(submit_time) tag_cnt from exam_record er join examination_info ei on er.exam_id ei.exam_id where uid…

【从零开始部署SAM(Segment Anything Model )大模型 3 Ubuntu20 离线部署 C++】

这里是目录 总览环境配置模型准备Moble SAM onnx模型获取Moble SAM pre onnx模型获取 运行cmakelist 运行结果 总览 相比于使用python离线部署SAM大模型&#xff0c;C要麻烦的多&#xff0c;本篇的部署过程主要基于项目&#xff1a;https://github.com/dinglufe/segment-anyth…

Python中上下文管理器解析

文章目录 基本原理上下文管理器的工作原理自定义上下文管理器enter和exitcontextlib 模块 异常处理 Python中的上下文管理器&#xff08;Context Manager&#xff09;是一种用于管理资源的机制&#xff0c;特别是在文件操作、数据库连接和锁定等场景中非常有用。上下文管理器通…

python替换“${}“占位符为变量,实现读取配置文件

文章目录 背景1、定义正则表达式2、替换变量占位符3、实现功能 背景 使用python编写小工具&#xff0c;有一个配置文件&#xff0c;希望实现类似shell命令的&#xff0c;定义变量并且使用${}或者$来引用。如果有好的建议欢迎讨论。 配置文件示例内容如下: D:\project\test\pr…

Windows下通过Ollama部署使用本地模型

Windows下通过Ollama部署使用本地模型 下载Ollama 安装主程序 Ollama下载exe&#xff0c;直接下一步下一步没有设置可以更改 windows默认安装路径在C盘 安装后会自动将该路径加入环境变量 双击图标运行后状态栏会出现小图标&#xff0c;右键有退出、打开日志文件夹按钮 通过…

mac配置Personal Access Tokens

背景 在macbook环境中&#xff0c;使用idea、android studio、xcode时&#xff0c;使用gitlab需要登录&#xff0c;而直接使用文明密码是不允许登录的&#xff0c;这时就需要换种方式&#xff0c;这里有两种&#xff1a;ssh、Access Tokens&#xff0c;在公用电脑上推荐使用Ac…

Linux网络的DHCP配置

文章目录 DHCP配置DHCP流程简述DHCP优点DHCP的分配方式DHCP的租约过程DHCP配置实验实验1实验2 DHCP配置 DHCP&#xff1a;动态主机配置协议 服务端和客户端 服务端&#xff1a;server&#xff0c;提供某种特定的服务 客户端&#xff1a;client&#xff0c;使用服务端提供的服…

R语言探索与分析18-基于时间序列的汇率预测

一、研究背景与意义 汇率是指两个国家之间的货币兑换比率&#xff0c;而且在国家与国家的经济交流有着举足轻重的作用。随着经济全球化的不断深入&#xff0c;在整个全球经济体中&#xff0c;汇率还是一个评估国家与国家之间的经济状况和发展水平的一个风向标。汇率的变动会对…

Thread Local六连问,你扛得住吗?

一、Thread Local 是什么? 线程本地变量。当使用ThreadLocal维护变量时&#xff0c;ThreadLocal为每个使用该变量的线程提供独立的变量副本&#xff0c;所以每个线程都可以独立地改变自己的副本&#xff0c;而不影响其他线程&#xff0c;做到了线程隔离。 二、Thread Local …

HTB 靶场 Mailing 未完待续

访问网页 在/etc/hosts 添加ip和域名 hosts 文件包含ip地址与主机名之间的映射&#xff0c;还包括主机的别名。 Linux系统所有程序查询/etc/hosts文件解析对主机名或者域名的IP地址。没有找到就需要使用DNS服务器解释域名。 DNS原理 1 输入域名&#xff0c;在本地缓存服务…

【工具】Vmware17 安装mac(13.6.7)虚拟机

目录 0.简介 1.环境 2.详细步骤 2.1下载mac镜像&#xff08;可以选择你所需要的&#xff09; 2.2 VMware安装 1&#xff09;创建新的虚拟机 2&#xff09;选择【典型】&#xff0c;点击下一步 3&#xff09;选择【安装程序光盘映像文件】&#xff0c;点击浏览&#xff…