【TB作品】MSP430G2553,DS1302,LCD1602,时间读取和显示,万年历,Proteus仿真

效果

在这里插入图片描述

部分代码

#include <MSP430.h>
#include "ds1302.h"
#include "LCD.h"

//关掉ccs优化,并且Convert_BCD_To_Dec函数中只能是10.0f才行,不然有bug

void main(void)
{
    char cnt = 0;
    char disp[16];

    WDTCTL = WDTPW + WDTHOLD; /* 关闭看门狗 */
    P1DIR = 0xFF; /* 设置方向 */
    P1SEL = 0; /* 设置为普通I/O 口 */

    P2DIR = 0xFF; /* 设置方向 */
    P2SEL = 0; /* 设置为普通I/O 口 */

    P3DIR = 0xFF; /* 设置方向 */
    P3SEL = 0; /* 设置为普通I/O 口 */


    P1OUT = 0x00;
    P2OUT = 0x00;
    P3OUT = 0x00;

    delay_ms(200);
    LCD_init();

    TimeData[0] = 59; //秒
    TimeData[1] = 58; //分
    TimeData[2] = 58; //时

    TimeData[3] = 23; //日
    TimeData[4] = 6; //月
    TimeData[6] = 25; //年

    TimeData[5] = 1; //星期
    Init_DS1302();
    Set_DS1302_Time(DS1302_W_ADDR);  /* 先写入时钟日历寄存器起始地址再设置时钟日历初值 */

    while (1)
    {

        Read_DS1302_Time( DS1302_R_ADDR); /* 先写入时钟日历寄存器起始地址再读出时钟日历写入到TimeData数组中 */

        cnt = 0;
        disp[cnt++] = '2';
        disp[cnt++] = '0';
        disp[cnt++] = TimeData[6] / 10 + '0';
        disp[cnt++] = TimeData[6] % 10 + '0';
        disp[cnt++] = '-';
        disp[cnt++] = TimeData[4] / 10 + '0';
        disp[cnt++] = TimeData[4] % 10 + '0';
        disp[cnt++] = '-';
        disp[cnt++] = TimeData[3] / 10 + '0';
        disp[cnt++] = TimeData[3] % 10 + '0';
        disp[cnt++] = 0;
        LCD_dsp_string(0, 1, disp);

        cnt = 0;
        disp[cnt++] = TimeData[2] / 10 + '0';
        disp[cnt++] = TimeData[2] % 10 + '0';
        disp[cnt++] = ':';
        disp[cnt++] = TimeData[1] / 10 + '0';
        disp[cnt++] = TimeData[1] % 10 + '0';
        disp[cnt++] = ':';
        disp[cnt++] = TimeData[0] / 10 + '0';
        disp[cnt++] = TimeData[0] % 10 + '0';
        disp[cnt++] = 0;
        LCD_dsp_string(0, 2, disp);

        TimeData[5]=getWeekdayByYearday(2000+TimeData[6],TimeData[4],TimeData[3]);
        switch (TimeData[5])
        {
        case 1:
            LCD_dsp_string(12, 2, "MON");
            break;
        case 2:
            LCD_dsp_string(12, 2, "TUE");
            break;
        case 3:
            LCD_dsp_string(12, 2, "WED");
            break;
        case 4:
            LCD_dsp_string(12, 2, "THU");
            break;
        case 5:
            LCD_dsp_string(12, 2, "FRI");
            break;
        case 6:
            LCD_dsp_string(12, 2, "SAT");
            break;
        case 7:
            LCD_dsp_string(12, 2, "SUN");
            break;
        }

        delay_ms(500);

    }
}


代码解释

代码功能讲解

主要模块和功能
  1. 头文件包含

    • 包含了MSP430微控制器、DS1302时钟模块和LCD显示屏的相关定义和函数声明。
  2. 初始化

    • 关闭看门狗定时器,防止系统复位。
    • 设置P1、P2、P3端口的方向为输出,并将其设置为普通I/O口。
    • 初始化LCD显示屏。
  3. 时间设置

    • 初始化TimeData数组,设置秒、分、时、日、月、年和星期的初始值。
    • 初始化DS1302时钟模块,并将初始时间写入时钟模块。
  4. 主循环

    • 读取DS1302时钟模块中的当前时间,并更新TimeData数组。
    • 将时间数据转换为字符串格式,并在LCD显示屏上显示日期和时间。
    • 根据日期计算星期,并在LCD显示屏上显示相应的星期。
  5. 延时

    • 在循环的每次迭代中,增加一个500毫秒的延时,以确保显示内容稳定更新。

核心功能细节

  • 时钟设置与读取

    • 初始化时钟模块,并设置初始时间。
    • 从时钟模块读取当前时间并更新显示。
  • 显示功能

    • 将时间数据转换为字符串,并分行显示日期和时间。
    • 根据日期计算并显示当前星期。
  • 延时控制

    • 在每次更新显示内容后,增加延时以防止频繁刷新导致显示不稳定。

注意事项

  • 关闭CCS优化是为了防止在Convert_BCD_To_Dec函数中出现bug。
  • 代码初始化了端口方向和输出状态,以确保正确控制外部设备。

通过这些步骤,该程序实现了从DS1302读取时间并在LCD显示屏上实时显示当前日期和时间的功能。

全部代码

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

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

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

相关文章

基于51单片机的智能水表

一.硬件方案 本设计主要以51单片机作为主控处理器的智能水表&#xff0c;该水表能够记录总的用水量和单次用水量&#xff0c;当用水量超出设定值时系统发出声光报警提醒&#xff0c;水量报警值能够通过按键进行自行设置&#xff0c;并且存储于AT24C02中&#xff0c;并且可以测…

【Ardiuno】使用ESP32单片机网络功能调用API接口(图文)

接着上文连通wifi后&#xff0c;我们通过使用HTTPClient库进行网络相关操作&#xff0c;这里我们通过http协议进行接口调用。 为了简化操作&#xff0c;小飞鱼这里使用了本地服务器上的文件作为接口&#xff0c;正常操作时会调用接口后&#xff0c;将服务器返回的数据进行解析…

Vue32-挂载流程

一、init阶段 生命周期本质是函数。 1-1、beforeCreate函数 注意&#xff1a; 此时vue没有_data&#xff0c;即&#xff1a;data中的数据没有收到。 1-2、create函数 二、生成虚拟DOM阶段 注意&#xff1a; 因为没有template选项&#xff0c;所以&#xff0c;整个div root都…

stable diffusion最全插件大全,新手必备指南

Stable diffusion30个必备插件推荐&#xff0c;给我点个赞吧&#xff0c;兄弟们 1&#xff0c;ComfyUI&#xff0c;SD扩展里面直接搜索就行&#xff0c; ComfyUI 是一个基于节点操作的UI界面&#xff0c;玩过建模的更容易学 安装后大概是这样的 评价&#xff1a;comfyui,更适…

换卡槽=停机?新手机号使用指南!

刚办理的手机号莫名其妙的就被停用了&#xff1f;这到底是怎么回事&#xff1f;这篇文章快来学习一下吧。 ​ 先说一下&#xff0c;你的手机为什么被停机&#xff1f; 现在运营商对于手机卡的使用有着非常严格的要求&#xff0c;尤其是刚办理的新号码&#xff0c;更是“严上加…

神经网络学习1—nn.Module

nn.module 为所有神经网络提供了一个模板 import torch.nn as nn import torch.nn.functional as Fclass Model(nn.Module):def __init__(self):super(Model, self).__init__()self.conv1 nn.Conv2d(1, 20, 5)self.conv2 nn.Conv2d(20, 20, 5)def forward(self, x):x F.rel…

解决Echarts图表中tooltip无法换行问题

解决Echarts图表中tooltip无法换行问题 这里设置宽度、颜色都是是可以生效的&#xff0c;但就是不换行 解决办法tooltip. extraCssText extraCssText: max-width:300px; white-space:pre-wraptooltip: { // 单个柱子显示悬浮内容extraCssText: max-width:300px; white-space…

工业网关在智能制造中的具体应用和效果-天拓四方

随着工业4.0时代的到来&#xff0c;智能制造正逐渐成为工业领域的发展趋势。作为连接物理世界与数字世界的桥梁&#xff0c;工业网关在智能制造中发挥着至关重要的作用。本案例将详细阐述工业网关在某一制造企业中的具体应用&#xff0c;展示其如何助力企业实现数字化转型&…

【数据挖掘】机器学习中相似性度量方法-欧式距离

写在前面&#xff1a; 首先感谢兄弟们的订阅&#xff0c;让我有创作的动力&#xff0c;在创作过程我会尽最大能力&#xff0c;保证作品的质量&#xff0c;如果有问题&#xff0c;可以私信我&#xff0c;让我们携手共进&#xff0c;共创辉煌。 路虽远&#xff0c;行则将至&#…

Visual Studio 使用第三方库管理工具 vcpkg

一、介绍 Windows下开发C/C程序&#xff0c;少不了用开源的第三方库。比如线性代数和矩阵分析的库eigen&#xff0c;或者图像处理的OpenCV库。虽然这些库都是开源的&#xff0c;但是由于要编译debug和release版本的&#xff0c;32位以及64位的&#xff0c;如果像FFmpeg…

跨境电商测评、采购大额下单自养号需要解决哪些技术原理?

市场上有许多伪装工具&#xff0c;但大多数只是为了方便开发人员测试系统程序&#xff0c;它们并不能针对特定的电商平台进行伪装。每个电商平台都有其独特的风控机制&#xff0c;因此&#xff0c;我们需要从硬件环境的底层配合软件控制&#xff0c;以满足各平台的检测规则。 …

【测试】软件测试方案—实际项目直接套用(Word原件)

1. 引言 1.1. 编写目的 1.2. 项目背景 1.3. 读者对象 1.4. 参考资料 1.5. 术语与缩略语 2. 测试策略 2.1. 测试完成标准 2.2. 测试类型 2.2.1. 功能测试 2.2.2. 性能测试 2.2.3. 安全性与访问控制测试 2.3. 测试工具 3. 测试技术 4. 测试资源 4.1. 人员安排 4.2. 测试环境 4.2.…

Java 网站开发入门指南:如何用java写一个网站

Java 网站开发入门指南&#xff1a;如何用java写一个网站 Java 作为一门强大的编程语言&#xff0c;在网站开发领域也占据着重要地位。虽然现在 Python、JavaScript 等语言在网站开发中越来越流行&#xff0c;但 Java 凭借其稳定性、可扩展性和丰富的生态系统&#xff0c;仍然…

Aigtek电压放大器的标准参数是什么

电压放大器是电子电路中常用的一种器件&#xff0c;主要用于放大输入电压信号。为了评价和比较不同的电压放大器&#xff0c;有一些标准参数被广泛应用。下面将详细介绍电压放大器的几个常见标准参数。 首先是增益。增益是衡量电压放大器输出信号与输入信号之间的倍数关系&…

【乐吾乐2D可视化组态编辑器】开关、阀门、报警状态切换

开关状态 开关的断开与闭合&#xff1a;将电力组件的“开”与“关”2个组件重叠在一起&#xff0c;右键选择“组合为状态”&#xff0c;属性面板中就可以任意切换状态。 视频教程&#xff1a;开关阀门多状态控制 乐吾乐2D可视化组态编辑器地址&#xff1a;https://2d.le5le.co…

30KW高原汽油发电机,海拔5000米可使用

大汉动力高原汽油发电机是专为高原地区设计的发电设备&#xff0c;其设计和特性考虑了高原环境的特别性。以下是关于高原汽油发电机的一些关键信息&#xff1a; 设计特点&#xff1a; 高原适应性&#xff1a;高原地区海拔高&#xff0c;空气稀薄&#xff0c;氧气含量低&#x…

高考志愿填报选专业,兴趣爱好和就业前景哪个优先?

每个人都有自己的兴趣与爱好&#xff0c;而高考志愿填报是在为自己选择职业方向。最理想的状态就是把自己的兴趣和爱好与自己的职业统一起来&#xff0c;让兴趣和爱好促进职业的发展&#xff0c;为职业增添动力。但现实生活中&#xff0c;这种理想的状态并不是每个人都能达到的…

前端技术回顾系列 11|TS 中一些实用概念

在微信中阅读,关注公众号:CodeFit。 创作不易,如果你觉得这篇文章对您有帮助,请不要忘了 点赞、分享 和 关注 我的公众号:CodeFit,为我的持续创作提供动力。 上文回顾:泛型在类和接口中的应用 上一篇文章我们回顾了 泛型 在 类 和 接口 中的应用。 通过使用泛型,我们…

工资信息管理系统的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;基础数据管理&#xff0c;公告管理&#xff0c;津贴管理&#xff0c;管理员管理&#xff0c;绩效管理 用户账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;公告管理&#xff0c;津…

Python酷库之旅-比翼双飞情侣库(08)

目录 一、xlrd库的由来 二、xlrd库优缺点 1、优点 1-1、支持多种Excel文件格式 1-2、高效性 1-3、开源性 1-4、简单易用 1-5、良好的兼容性 2、缺点 2-1、对.xlsx格式支持有限 2-2、功能相对单一 2-3、更新和维护频率低 2-4、依赖外部资源 三、xlrd库的版本说明 …