使用野火SYM32F103VET6指南者开发板使用4针OLED屏幕写一段万年历的代码
时间: 2023-06-19 09:05:37 浏览: 148
以下是使用野火SYM32F103VET6指南者开发板和4针OLED屏幕编写的简单万年历代码:
```
#include "stm32f10x.h"
#include "oled.h"
#define YEAR 2021 // 当前年份
#define MONTH 1 // 当前月份
#define DAY 1 // 当前日期
uint8_t month_day[12] = {31,28,31,30,31,30,31,31,30,31,30,31}; // 每个月份的天数
void delay(uint32_t count)
{
uint32_t i;
for(i = 0; i < count; i++);
}
void OLED_Show_Year(uint16_t year)
{
OLED_ShowString(0, 0, "Year: ");
OLED_ShowNum(48, 0, year, 4, 16);
}
void OLED_Show_Month(uint8_t month)
{
OLED_ShowString(0, 16, "Month: ");
OLED_ShowNum(48, 16, month, 2, 16);
}
void OLED_Show_Day(uint8_t day)
{
OLED_ShowString(0, 32, "Day: ");
OLED_ShowNum(48, 32, day, 2, 16);
}
void OLED_Show_Week(uint8_t week)
{
OLED_ShowString(0, 48, "Week: ");
switch(week)
{
case 0:
OLED_ShowString(48, 48, "Sunday");
break;
case 1:
OLED_ShowString(48, 48, "Monday");
break;
case 2:
OLED_ShowString(48, 48, "Tuesday");
break;
case 3:
OLED_ShowString(48, 48, "Wednesday");
break;
case 4:
OLED_ShowString(48, 48, "Thursday");
break;
case 5:
OLED_ShowString(48, 48, "Friday");
break;
case 6:
OLED_ShowString(48, 48, "Saturday");
break;
default:
break;
}
}
void OLED_Show_Calendar(uint16_t year, uint8_t month, uint8_t day)
{
uint8_t week = 0;
uint16_t days = 0;
// 计算该年份是否为闰年
if((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
{
month_day[1] = 29; // 闰年2月份为29天
}
else
{
month_day[1] = 28; // 平年2月份为28天
}
// 计算该日期是该年份中的第几天
for(uint8_t i = 0; i < month - 1; i++)
{
days += month_day[i];
}
days += day;
// 计算该日期是星期几
week = (days + 5) % 7;
OLED_Show_Year(year);
OLED_Show_Month(month);
OLED_Show_Day(day);
OLED_Show_Week(week);
}
int main(void)
{
OLED_Init(); // 初始化OLED屏幕
OLED_ShowString(0, 0, "Hello, World!");
delay(1000000);
OLED_Clear();
OLED_Show_Calendar(YEAR, MONTH, DAY);
while(1);
return 0;
}
```
在该代码中,我们定义了当前的年份、月份和日期,并且使用了一个数组来存储每个月份的天数。然后我们使用了一些函数来显示年份、月份、日期和星期几,最后在主函数中调用了这些函数来显示万年历。你可以根据需要对代码进行修改以适应你的具体需求。
阅读全文