【单片机】msp430f5529 万年历,数字时钟,矩阵键盘修改时间,7针OLED显示,内部温度读取

news2024/11/26 0:42:21

文章目录

  • 功能
  • 实物图
  • 原理图
  • 一些程序片段
    • 矩阵键盘
    • 内部温度读取
    • 将年月日转为星期

功能

1 显示万年历,利用内部RTC模块
2 按键修改时间
3 显示芯片内部的温度数值

实物图

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

原理图

在这里插入图片描述

一些程序片段

矩阵键盘

https://qq742971636.blog.csdn.net/article/details/131650521

内部温度读取

这段代码是用来初始化一个模拟-数字转换器(ADC)的函数。它的作用是配置ADC的参数和寄存器,以便进行模拟信号的采样和转换。

具体解释如下:

首先,设置ADC12CTL0寄存器的位操作。将ADC12ON置1,表示打开ADC;将ADC12SHT0_12设置为1,表示设置采样保持时间为1024个时钟周期。

然后,配置ADC12CTL1寄存器的位操作。将ADC12SHP置1,表示使用脉冲采样模式;将ADC12SSEL_1置1,表示选择ACLK作为时钟源;将ADC12DIV_1置1,表示时钟分频系数为1。

接下来,设置ADC12IE寄存器的值为0x01,表示允许中断使能。这样当ADC转换完成时,将会触发中断。

清除REFCTL0寄存器的REFMSTR位,将参考电压控制权交给ADC12。这是为了确保ADC使用内部参考电压。

设置ADC12CTL0寄存器的ADC12REFON位为1,表示打开参考电压。此时参考电压被设置为1.5V。

设置ADC12MCTL0寄存器的ADC12SREF_1位为1,表示ADC的正输入端连接到参考电压(VREF)。这是为了使用内部参考电压来测量。

设置ADC12MCTL0寄存器的ADC12INCH_10位为1,表示ADC的输入通道选择为内部温度传感器。

最后,设置ADC12CTL0寄存器的ADC12ENC位为1,表示使能ADC12_A转换。这样配置完成后,即可开始进行ADC转换。

总结起来,这段代码的作用是初始化ADC,设置采样保持时间、选择时钟源、配置输入通道等参数,并打开ADC使能,以便进行模拟信号的采样和转换。

#define CALADC12_15V_30C *((unsigned int *)0x1A1A)  //6682
#define CALADC12_15V_85C *((unsigned int *)0x1A1C)  //6684

void ADC_Init(void) {
    ADC12CTL0 |= ADC12ON + ADC12SHT0_12;              /* 打开AD,设置采样保持时间为1024个时钟周期 */
    ADC12CTL1 = ADC12SHP + ADC12SSEL_1 + ADC12DIV_1;  /* 脉冲采样模式 ACLK 2分频 */
    ADC12IE = 0x01;                                 /* 中断使能 */

    REFCTL0 &= ~REFMSTR;                            /* 参考电压控制权交给ADC12 */
    ADC12CTL0 |= ADC12REFON;                          /* REF_ON REF=1.5V */
    ADC12MCTL0 |= ADC12SREF_1;                         /* V+ = REF  V- = AVSS */

    ADC12MCTL0 |= ADC12INCH_10;                        /* ADC输入为内部温度传感器 */
    ADC12CTL0 |= ADC12ENC;                            /* 开启ADC12_A转换 最后写 */
}
unsigned int temperature = 0;

void main(void){
    double tmp;
    int temp_k;
	WDTCTL = WDTPW + WDTHOLD;       /* Stop WDT */
	
	ADC_Init();
	
	while(1){
	
	ADC12CTL0 |= ADC12SC;
    tmp = (float) (((long) temperature - CALADC12_15V_30C) * (85 - 30))
          / (CALADC12_15V_85C - CALADC12_15V_30C) + 30.0f;
    temp_k = tmp * 100;
    //显示温度
    oled_cnt = 0;
    oled_disp[oled_cnt++] = 'T';
    oled_disp[oled_cnt++] = 'E';
    oled_disp[oled_cnt++] = 'M';
    oled_disp[oled_cnt++] = ':';

    oled_disp[oled_cnt++] = temp_k / 1000 + '0';
    oled_disp[oled_cnt++] = temp_k % 1000 / 100 + '0';
    oled_disp[oled_cnt++] = '.';
    oled_disp[oled_cnt++] = temp_k % 100 / 10 + '0';
    oled_disp[oled_cnt++] = temp_k % 10 + '0';
    oled_disp[oled_cnt++] = 'C';
    oled_disp[oled_cnt++] = 0;
    OLED_ShowString(0, 6, oled_disp, 0);


	}	
}

#pragma vector = ADC12_VECTOR
__interrupt void ADC12_ISR(void) {
    switch (__even_in_range(ADC12IV, 34)) {
        case 6: // Vector 6: ADC12IFG0
            temperature = ADC12MEM0;
            //__bic_SR_register_on_exit(LPM0_bits); // Exit active CPU
        default:
            break;
    }
}


将年月日转为星期

这段代码是一个函数,用于根据给定的年月日计算对应的星期几。

代码以输入参数 iY、iM 和 iD 代表年、月和日。然后,根据公式计算出一个数值 iWeekDay 来表示星期几。

首先,代码检查给定的月份是否为1月或2月,如果是,则将传入的月份 iM 增加12,并将年份 iY 减去1。这是因为在公式中,一月和二月被认为属于前一年的13月和14月。

然后,使用如下公式计算星期几的数值:(iD + 1 + 2 * iM + 3 * (iM + 1) / 5 + iY + iY / 4 - iY / 100 + iY / 400) % 7

最后,如果计算出的星期几数值为0,则将其转换为7,以符合星期数值的范围。

函数返回计算得到的星期几数值,范围在1到7之间,分别代表星期一到星期天。


/*
 * 由年月日获取星期 https://www.cnblogs.com/fengbohello/p/3264300.html
 * 返回1到7 代表星期一到星期天
 *
 */
int getWeekdayByYearday(int iY, int iM, int iD) {
    int iWeekDay = -1;
    if (1 == iM || 2 == iM) {
        iM += 12;
        iY--;
    }
    iWeekDay = (iD + 1 + 2 * iM + 3 * (iM + 1) / 5 + iY + iY / 4 - iY / 100 + iY / 400) % 7;
    if (iWeekDay == 0)
        iWeekDay = 7;
    return (iWeekDay);
}

源码:http://dt4.8tupian.net/2/28880a12b16800.pg3

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

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

相关文章

Vue3 + TS + Element-Plus 封装Tree组件 《亲测可用》

前期回顾 Vite Vue3 Ts 《企业级项目》二次封装 el-table、el-pagination、el-tooltip、el-dialog_vue后台管理系统需要二次封装的组件有哪些_彩色之外的博客-CSDN博客封装的功能有哪些?分页、表格排序、文字居中、溢出隐藏、操作列、开关、宽、最小宽、type类型…

【Vue H5项目实战】从0到1的自助点餐系统—— 搭建脚手架(Vue3.2 + Vite + TS + Vant + Pinia + Node.js)

前言 H5 项目基于 Web 技术,可以在智能手机、平板电脑等移动设备上的浏览器中运行,无需下载和安装任何应用程序,且H5 项目的代码和资源可以集中在服务器端进行管理,只需更新服务器上的代码,即可让所有顾客访问到最新的…

6.2Java EE——Spring的入门程序

下面通过一个简单的入门程序演示Spring框架的使用,要求在控制台打印“张三,欢迎来到Spring”,实现步骤具体如下。 1、在IDEA中创建名称为chapter06的Maven项目,然后在pom.xml文件中加载需使用到的Spring四个基础包以及Spring依赖…

【域渗透篇】渗透域环境下的windows7与2008-r2

目录 前言 域环境搭建测试 主机发现&&端口服务扫描&&漏洞脚本扫描 主机发现 全端口扫描 漏洞脚本扫描 永恒之蓝获取shell 主机信息收集 查看当前所在域及当前域用户 找到域控制器 收集域成员的IP msf后渗透阶段 Hashdump获取本地密码信息 破解ha…

cesium学习文档

文章目录 1. 简易的cesium安装依赖修改 vite.config.js申请token创建简单的cesium 2. 修改查看器3. 修改摄像头4. 设置纽约城市模型5. 划分城市区域并且着色6. 地图标记显示7. 实现无人机巡城 1. 简易的cesium 安装依赖 yarn add -D cesium vite vite-plugin-cesium修改 vite…

Openlayers实战:小物块运动轨迹动画

Openlayers地图在做轨迹的时候,除了标注各个位置点,连线,还经常会用到轨迹动画。 本实战就是这样示例,一个物块在轨迹上移动。其实质是用setInterval,每个一小段时间,重新计算定位一下小物块位置,整体串起来就是在移动。 效果图 源代码 /* * @Author: 大剑师兰特(xia…

TextMining Day3 基于信息抽取的文本挖掘

TextMining Day3 基于信息抽取的文本挖掘 1. 简介2. 背景:文本挖掘与信息提取3. 数据挖掘与信息提取相结合3.1 DISCOTEX系统3.2 评价 4. 使用挖掘规则改进IE4.1 算法4.2 评价 7. 结论 1. 简介 图1:基于IE(信息抽取)的文本挖掘框架概述 本文报告了计算机…

stm32 使用CubeIDE 移植RTX5

STM32 使用st的官方开发环境 cubeide (eclipse gcc)移植 cmsis rtos2 RTX5 实时操作系统 这套环境的主要优势是免费。cubeide免费使用。RTX5 免商业版税(已从原keil中剥离出来,现在完全开源免费)。 一,环…

微软开源社区上线,能够给微软Win95等“上古系统”打补丁

日前一个基于社区的项目“Windows Update Restored”上线,据了解该项目的目的是为老系统重新提供对Windows Update的支持,可为 Windows 95 / NT 4.0/98(包括 SE)/ME/ 2000 SP2 等“上古时期”的微软操作系统提供升级补丁、修复 bug 或安全漏洞。 据悉&a…

Python+Requests+Excel接口测试实战

1、EXCEL文件接口保存方式,如图。 2、然后就是读取EXCEL文件中的数据方法,如下: 1 import xlrd2 3 4 class readExcel(object):5 def __init__(self, path):6 self.path path7 8 property9 def getSheet(self): 10 …

设计模式【创建型】-- 原型模式

原型模式(Prototype) 原型模式是指原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。调用者不需要知道任何创建细节,不调用构造函数 主要应用: 浅拷贝深拷贝 原型模式: 抽象原型类&#xf…

【Redis】—— Redis的AOF持久化机制

💧 【 R e d i s 】—— R e d i s 的 A O F 持久化机制 \color{#FF1493}{【Redis】 —— Redis的AOF持久化机制} 【Redis】——Redis的AOF持久化机制💧 🌷 仰望天空,妳我亦是行人.✨ 🦄 个人主页——微风撞…

如何搭建一个优秀的移动商城?

移动商城是一种新兴的购物方式。随着移动设备的普及和人们对线上购物的需求不断增加,移动商城已经成为了现代电子商务的重要组成部分。 对于想要在这个领域中获得成功的人来说,建立一个优秀的移动商城非常重要。但在搭建移动商城的过程中,有很…

【监控系统】Prometheus架构相关概念及源码部署实战

上篇我们介绍了业界主流监控框架的对比,我们监控系统这块主要是采用Prometheus。 那么,什么是Prometheus 官网:https://prometheus.io/docs/introduction/overview/ Prometheus是一个开源的系统监控和报警系统,现在已经加入到CN…

Android Java代码与JNI交互 JNI方法Java类字段 (六)

🔥 Android Studio 版本 🔥 🔥 Java 基础类型数据对应 jni 中的字母 🔥 通过 jni 查找java某个类中相应字段对应的数据类型 , 需要使用到 jni 中的 GetFieldID() 函数 jfieldID GetFieldID(jclass clazz, const char* name, const char* sig){ return functions-&g…

MySQL 如何处理 慢查询

如何定位慢查询? 方式一: 可以使用开源工具,比如: 调试工具:Arthas运维工具:Prometheus 、Skywalking 方式二: 使用MySQL自带慢日志 慢查询日志记录了所有执行时间超过指定参数(long_qu…

bsub 的用法和意义

bsub -R “rusage [mem40960]” -Is -XF 执行脚本的方法 bsub <run 几条有用的命令 bqueues 查询所有queue的状态 4. 常用命令之bhosts 显示各节点作业相关情况 bhosts hostname 常用命令之bjobs 查看提交作业运行情况; bjobs –r 显示正在运行的作业 bjobs –a 显示正在…

微信小程序,左上脚返回点击直接到首页

我们做小程序时就有很多这种情况&#xff0c;根据不同情况处理方式不同 第一种情况&#xff1a;小程序有多个tab onUnload(event){ //多层级跳转之后&#xff0c;监听左上角返回事件&#xff0c;直接退回到indexuni.switchTab({url:"/pages/index/index"})}, 第二种…

pandas 笔记:高亮内容

1 高亮缺失值 1.0 数据 import pandas as pd import numpy as npdata[{a:1,b:2},{a:3,c:4},{a:10,b:-2,c:5}]df1pd.DataFrame(data) df1 1.1 highlight_null df.style.highlight_null(color: str red,subset: Subset | None None,props: str | None None, ) 1.1.1 默认情…

【Elasticsearch】RestClient操作文档

目录 5.RestClient操作文档 5.1.新增文档 5.1.1.索引库实体类 5.1.2.语法说明 5.1.3.完整代码 5.2.查询文档 5.2.1.语法说明 5.2.2.完整代码 5.3.删除文档 5.4.修改文档 5.4.1.语法说明 5.4.2.完整代码 5.5.批量导入文档 5.5.1.语法说明 5.5.2.完整代码 5.6.小…