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);
}
}
头文件包含:
初始化:
关闭看门狗定时器,防止系统复位。
设置P1、P2、P3端口的方向为输出,并将其设置为普通I/O口。
初始化LCD显示屏。
时间设置:
初始化TimeData
数组,设置秒、分、时、日、月、年和星期的初始值。
初始化DS1302时钟模块,并将初始时间写入时钟模块。
主循环:
读取DS1302时钟模块中的当前时间,并更新TimeData
数组。
将时间数据转换为字符串格式,并在LCD显示屏上显示日期和时间。
根据日期计算星期,并在LCD显示屏上显示相应的星期。
延时:
时钟设置与读取:
初始化时钟模块,并设置初始时间。
从时钟模块读取当前时间并更新显示。
显示功能:
将时间数据转换为字符串,并分行显示日期和时间。
根据日期计算并显示当前星期。
延时控制:
关闭CCS优化是为了防止在Convert_BCD_To_Dec
函数中出现bug。
代码初始化了端口方向和输出状态,以确保正确控制外部设备。
通过这些步骤,该程序实现了从DS1302读取时间并在LCD显示屏上实时显示当前日期和时间的功能。
cpphttps://docs.qq.com/sheet/DUEdqZ2lmbmR6UVdU?tab=BB08J2
本文作者:Dong
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC。本作品采用《知识共享署名-非商业性使用 4.0 国际许可协议》进行许可。您可以在非商业用途下自由转载和修改,但必须注明出处并提供原作者链接。 许可协议。转载请注明出处!