2024-09-01
售卖作品
00

目录

效果
部分代码
代码解释
代码功能讲解
主要模块和功能
核心功能细节
注意事项
全部代码

效果

在这里插入图片描述

部分代码

cpp
#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显示屏上实时显示当前日期和时间的功能。

全部代码

cpp
https://docs.qq.com/sheet/DUEdqZ2lmbmR6UVdU?tab=BB08J2
如果对你有用的话,可以打赏哦
打赏
ali pay
wechat pay

本文作者:Dong

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC。本作品采用《知识共享署名-非商业性使用 4.0 国际许可协议》进行许可。您可以在非商业用途下自由转载和修改,但必须注明出处并提供原作者链接。 许可协议。转载请注明出处!