具体任务:
2020年有366天,将2020年1月1日作为计数起点,即计数1,2020年12月31日作为计数终点,即计数366。计数1代表“2020年1月1日-星期三”,计数10代表“2020年1月10日-星期五”。设计一个实验,实现每秒计数递增一次,计数范围为1~366,并通过printf函数每秒打印一次计数对应的年、月、日、星期。例如,初始日期设置为10,即“2020年1月10日-星期五”,则第1秒打印“2020年1月10日-星期五”,第2秒打印“2020年1月11日-星期六”,以此类推。
代码:
CalcMonth.h部分
/*********************************************************************************************************************************************************************
* 模块名称:CalcMonth.h
* 摘 要:
* 当前版本:1.0.0
* 作 者:努摆的皮卡皮
* 完成日期:2022年07月23日
* 内 容:
* 注 意:
**********************************************************************************************************************************************************************
* 取代版本:
* 作 者:
* 完成日期:
* 修改内容:
* 修改文件:
*********************************************************************************************************************************************************************/
#ifndef _CALC_MONTH_H_
#define _CALC_MONTH_H_
/*********************************************************************************************************************************************************************
* 包含头文件
*********************************************************************************************************************************************************************/
/*********************************************************************************************************************************************************************
* 宏定义
*********************************************************************************************************************************************************************/
/*********************************************************************************************************************************************************************
* 枚举结构体定义
*********************************************************************************************************************************************************************/
/*********************************************************************************************************************************************************************
* API函数声明
*********************************************************************************************************************************************************************/
void InitCalcMonth(void); //初始化CalcMonth模块
short CalcMonth(int tick); //计算月份值
#endif
CalcMonth.c部分
//不变
/*********************************************************************************************************************************************************************
* 模块名称:CalcMonth.c
* 摘 要:
* 当前版本:1.0.0
* 作 者:努摆的皮卡皮
* 完成日期:2022年07月23日
* 内 容:
* 注 意:
**********************************************************************************************************************************************************************
* 取代版本:
* 作 者:******************************************************
* 完成日期:
* 修改内容:
* 修改文件:
*********************************************************************************************************************************************************************/
/*********************************************************************************************************************************************************************
* 包含头文件
*********************************************************************************************************************************************************************/
#include "CalcMonth.h"
#include "stdio.h"
/*********************************************************************************************************************************************************************
* 宏定义
*********************************************************************************************************************************************************************/
/*********************************************************************************************************************************************************************
* 枚举结构体定义
*********************************************************************************************************************************************************************/
/*********************************************************************************************************************************************************************
* 内部变量
*********************************************************************************************************************************************************************/
/*********************************************************************************************************************************************************************
* 内部函数声明
*********************************************************************************************************************************************************************/
/*********************************************************************************************************************************************************************
* 内部函数实现
*********************************************************************************************************************************************************************/
/*********************************************************************************************************************************************************************
* API函数实现
*********************************************************************************************************************************************************************/
/*********************************************************************************************************************************************************************
* 函数名称:
* 函数功能:
* 输入参数:
* 输出参数:
* 返回值:
* 创建日期:
* 注 意:
*********************************************************************************************************************************************************************/
void InitCalcMonth(void)
{
}
/*********************************************************************************************************************************************************************
* 函数名称:
* 函数功能:
* 输入函数:
* 输出函数:
* 返回值:
* 创建日期:
* 注 意:
*********************************************************************************************************************************************************************/
short CalcMonth(int tick)
{
short month = 0;
if (tick >= 1 && tick <= 31)
{
month = 1;
}
else
{
if (tick > 31 && tick <= 60)
{
month = 2;
}
else
{
if (tick > 60 && tick <= 91)
{
month = 3;
}
else
{
if (tick > 91 && tick <= 121)
{
month = 4;
}
else
{
if (tick > 121 && tick <= 152)
{
month = 5;
}
else
{
if (tick > 152 && tick <= 182)
{
month = 6;
}
else
{
if (tick > 182 && tick <= 213)
{
month = 7;
}
else
{
if (tick > 213 && tick <= 244)
{
month = 8;
}
else
{
if (tick > 244 && tick <= 274)
{
month = 9;
}
else
{
if (tick > 274 && tick <= 305)
{
month = 10;
}
else
{
if (tick > 305 && tick <= 335)
{
month = 11;
}
else
{
if (tick > 335 && tick <= 366)
{
month = 12;
}
else
{
printf("no this day\n");
}
}
}
}
}
}
}
}
}
}
}
}
return(month);
}
CalcDay.h部分
/*********************************************************************************************************************************************************************
* 模块名称:CalcDay.h
* 摘 要:
* 当前版本:1.0.0
* 作 者:努摆的皮卡皮
* 完成日期:2022年07月23日
* 内 容:
* 注 意:
**********************************************************************************************************************************************************************
* 取代版本:
* 作 者:
* 完成日期:
* 修改内容:
* 修改文件:
*********************************************************************************************************************************************************************/
#ifndef _CALC_DAY_H_
#define _CALC_DAY_H_
/*********************************************************************************************************************************************************************
* 包含头文件
*********************************************************************************************************************************************************************/
/*********************************************************************************************************************************************************************
* 宏定义
*********************************************************************************************************************************************************************/
/*********************************************************************************************************************************************************************
* 枚举结构体定义
*********************************************************************************************************************************************************************/
/*********************************************************************************************************************************************************************
* API函数声明
*********************************************************************************************************************************************************************/
void InitCalcDay(void); //初始化CalcDay模块
short CalcDay(int tick); //计算日期值
#endif
CalcDay.c部分
//不变
/*********************************************************************************************************************************************************************
* 模块名称:CalcDay.c
* 摘 要:
* 当前版本:1.0.0
* 作 者:努摆的皮卡皮
* 完成日期:2022年07月23日
* 内 容:
* 注 意:
**********************************************************************************************************************************************************************
* 取代版本:
* 作 者:
* 完成日期:
* 修改内容:
* 修改文件:
*********************************************************************************************************************************************************************/
/*********************************************************************************************************************************************************************
* 包含头文件
*********************************************************************************************************************************************************************/
#include "CalcDay.h"
#include "stdio.h"
/*********************************************************************************************************************************************************************
* 宏定义
*********************************************************************************************************************************************************************/
/*********************************************************************************************************************************************************************
* 枚举结构体定义
*********************************************************************************************************************************************************************/
/*********************************************************************************************************************************************************************
* 内部变量
*********************************************************************************************************************************************************************/
/*********************************************************************************************************************************************************************
* 内部函数声明
*********************************************************************************************************************************************************************/
/********************************************************************************************************************************************************************
*********************************************************************************************************************************************************************/
/*********************************************************************************************************************************************************************
* API函数实现
*********************************************************************************************************************************************************************/
/*********************************************************************************************************************************************************************
* 函数名称:
* 函数功能:
* 输入参数:
* 输出参数:
* 返回值:
* 创建日期:
* 注 意:
*********************************************************************************************************************************************************************/
void InitCalcDay(void)
{
}
/*********************************************************************************************************************************************************************
* 函数名称:
* 函数功能:
* 输入函数:
* 输出函数:
* 返回值:
* 创建日期:
* 注 意:
*********************************************************************************************************************************************************************/
short CalcDay(int tick)
{
short day;
if (tick >= 1 && tick <= 31)
{
day = tick;
}
else
{
if (tick > 31 && tick <= 60)
{
day = tick - 31;
}
else
{
if (tick > 60 && tick <= 91)
{
day = tick - 60;
}
else
{
if (tick > 91 && tick <= 121)
{
day = tick - 91;
}
else
{
if (tick > 121 && tick <= 152)
{
day = tick - 121;
}
else
{
if (tick > 152 && tick <= 182)
{
day = tick - 152;
}
else
{
if (tick > 182 && tick <= 213)
{
day = tick - 182;
}
else
{
if (tick > 213 && tick <= 244)
{
day = tick - 213;
}
else
{
if (tick > 244 && tick <= 274)
{
day = tick - 244;
}
else
{
if (tick > 274 && tick <= 305)
{
day = tick - 274;
}
else
{
{
day = tick - 274;
}
if (tick > 305 && tick <= 335)
{
day = tick - 305;
}
else
{
if (tick > 335 && tick <= 366)
{
day = tick - 335;
}
else
{
printf("no this day\n");
}
}
}
}
}
}
}
}
}
}
}
}
return(day);
}
CalcWeek.h部分
/*********************************************************************************************************************************************************************
* 模块名称:CalcWeek.h
* 摘 要:
* 当前版本:1.0.0
* 作 者:努摆的皮卡皮
* 完成日期:2022年07月23日
* 内 容:
* 注 意:
**********************************************************************************************************************************************************************
* 取代版本:
* 作 者:
* 完成日期:
* 修改内容:
* 修改文件:
*********************************************************************************************************************************************************************/
#ifndef _CALC_WEEK_H_
#define _CALC_WEEK_H_
/*********************************************************************************************************************************************************************
* 包含头文件
*********************************************************************************************************************************************************************/
/*********************************************************************************************************************************************************************
* 宏定义
*********************************************************************************************************************************************************************/
/*********************************************************************************************************************************************************************
* 枚举结构体定义
*********************************************************************************************************************************************************************/
/*********************************************************************************************************************************************************************
* API函数声明
*********************************************************************************************************************************************************************/
void InitCalcWeek(void); //初始化CalcWeek模块
short CalcWeek(int tick); //计算周值
#endif
CalcWeek.c部分
//不变
/*********************************************************************************************************************************************************************
* 模块名称:CalcWeek.c
* 摘 要:
* 当前版本:1.0.0
* 作 者:努摆的皮卡皮
* 完成日期:2022年07月23日
* 内 容:
* 注 意:
**********************************************************************************************************************************************************************
* 取代版本:
* 作 者:
* 完成日期:
* 修改内容:
* 修改文件:
*********************************************************************************************************************************************************************/
/*********************************************************************************************************************************************************************
* 包含头文件
*********************************************************************************************************************************************************************/
#include "CalcWeek.h"
/********************************************************************************************************************************************************************
* 宏定义
*********************************************************************************************************************************************************************/
/*********************************************************************************************************************************************************************
* 枚举结构体定义
*********************************************************************************************************************************************************************/
/*********************************************************************************************************************************************************************
* 内部变量
*********************************************************************************************************************************************************************/
/*********************************************************************************************************************************************************************
* 内部函数声明
*********************************************************************************************************************************************************************/
/********************************************************************************************************************************************************************
/*********************************************************************************************************************************************************************
* 内部函数实现
*********************************************************************************************************************************************************************/
/*********************************************************************************************************************************************************************
* API函数实现
*********************************************************************************************************************************************************************/
/*********************************************************************************************************************************************************************
* 函数名称:
* 函数功能:
* 输入参数:
* 输出参数:
* 返回值:
* 创建日期:
* 注 意:
*********************************************************************************************************************************************************************/
void InitCalcWeek(void)
{
}
/*********************************************************************************************************************************************************************
* 函数名称:
* 函数功能:
* 输入函数:
* 输出函数:
* 返回值:
* 创建日期:
* 注 意:
*********************************************************************************************************************************************************************/
short CalcWeek(int tick)
{
short week;
week = (tick + 3) % 7;
return(week);
}
Tick.h部分
/*********************************************************************************************************************************************************************
* 模块名称:Tick.h
* 摘 要:
* 当前版本:1.0.0
* 作 者:努摆的皮卡皮
* 完成日期:2022年07月23日
* 内 容:
* 注 意:
**********************************************************************************************************************************************************************
* 取代版本:
* 作 者:
* 完成日期:
* 修改内容:
* 修改文件:
*********************************************************************************************************************************************************************/
#ifndef _TICK_H_
#define _TICK_H_
/*********************************************************************************************************************************************************************
* 包含头文件
*********************************************************************************************************************************************************************/
/*********************************************************************************************************************************************************************
* 宏定义
*********************************************************************************************************************************************************************/
/*********************************************************************************************************************************************************************
* 枚举结构体定义
*********************************************************************************************************************************************************************/
/*********************************************************************************************************************************************************************
* API函数声明
*********************************************************************************************************************************************************************/
void InitTick(void);//初始化tick模块
void TickPer2Ms(void);//每2ms执行一次
void SetTickVal(int tick);//设置tick值
int GetTickVal(void);//获取tick值
#endif
Tick.c部分
/*********************************************************************************************************************************************************************
* 模块名称:Tick.c
* 摘 要:
* 当前版本:1.0.0
* 作 者:努摆的皮卡皮
* 完成日期:2022年07月23日
* 内 容:
* 注 意:
**********************************************************************************************************************************************************************
* 取代版本:
* 作 者:
* 完成日期:
* 修改内容:
* 修改文件:
*********************************************************************************************************************************************************************/
/*********************************************************************************************************************************************************************
* 包含头文件
*********************************************************************************************************************************************************************/
#include "Tick.h"
/********************************************************************************************************************************************************************
* 宏定义
*********************************************************************************************************************************************************************/
/*********************************************************************************************************************************************************************
* 枚举结构体定义
*********************************************************************************************************************************************************************/
/*********************************************************************************************************************************************************************
* 内部变量
*********************************************************************************************************************************************************************/
static int d_iTickVal;//函数变量date_iTickVal
static int m_iTickVal;//函数变量month_iTickVal
/*********************************************************************************************************************************************************************
* 内部函数声明
*********************************************************************************************************************************************************************/
/********************************************************************************************************************************************************************
/*********************************************************************************************************************************************************************
* 内部函数实现
*********************************************************************************************************************************************************************/
/*********************************************************************************************************************************************************************
* API函数实现
*********************************************************************************************************************************************************************/
/*********************************************************************************************************************************************************************
* 函数名称:
* 函数功能:初始化tick模块
* 输入参数:
* 输出参数:
* 返回值:
* 创建日期:
* 注 意:
*********************************************************************************************************************************************************************/
void InitTick(void)
{
m_iTickVal = 0;
d_iTickVal = 0;
}
/*********************************************************************************************************************************************************************
* 函数名称:
* 函数功能:每2ms执行一次
* 输入函数:
* 输出函数:
* 返回值:
* 创建日期:
* 注 意:
*********************************************************************************************************************************************************************/
void TickPer2Ms(void)
{
static short s_iCnt = 0;
if (s_iCnt == 1)
{
d_iTickVal++;//按时间执行,自加(没有输值了)
if (d_iTickVal >= 1 && d_iTickVal <= 31)
{
m_iTickVal = 1;
}
else
{
if (d_iTickVal > 31 && d_iTickVal <= 60)
{
m_iTickVal = 2;
}
else
{
if (d_iTickVal > 60 && d_iTickVal <= 91)
{
m_iTickVal = 3;
}
else
{
if (d_iTickVal > 91 && d_iTickVal <= 121)
{
m_iTickVal = 4;
}
else
{
if (d_iTickVal > 121 && d_iTickVal <= 152)
{
m_iTickVal = 5;
}
else
{
if (d_iTickVal > 152 && d_iTickVal <= 182)
{
m_iTickVal = 6;
}
else
{
if (d_iTickVal > 182 && d_iTickVal <= 213)
{
m_iTickVal = 7;
}
else
{
if (d_iTickVal > 213 && d_iTickVal <= 244)
{
m_iTickVal = 8;
}
else
{
if (d_iTickVal > 244 && d_iTickVal <= 274)
{
m_iTickVal = 9;
}
else
{
if (d_iTickVal > 274 && d_iTickVal <= 305)
{
m_iTickVal = 10;
}
else
{
if (d_iTickVal > 305 && d_iTickVal <= 335)
{
m_iTickVal = 11;
}
else
{
if (d_iTickVal > 335 && d_iTickVal <= 366)
{
m_iTickVal = 12;
}
}
}
}
}
}
}
}
}
}
}
}
}
}
/*********************************************************************************************************************************************************************
* 函数名称:
* 函数功能:设置tick值
* 输入函数:
* 输出函数:
* 返回值:
* 创建日期:
* 注 意:
*********************************************************************************************************************************************************************/
void SetTickVal(int tick)
{
d_iTickVal = tick;
}
/*********************************************************************************************************************************************************************
* 函数名称:
* 函数功能:获取tick值
* 输入函数:
* 输出函数:
* 返回值:
* 创建日期:
* 注 意:
*********************************************************************************************************************************************************************/
int GetTickVal(void)
{
return(d_iTickVal);
}
App.c部分
/*********************************************************************************************************************************************************************
* 模块名称:App.c
* 摘 要:
* 当前版本:1.0.0
* 作 者:努摆的皮卡皮
* 完成日期:2022年07月23日
* 内 容:
* 注 意:
**********************************************************************************************************************************************************************
* 取代版本:
* 作 者:
* 完成日期:
* 修改内容:
* 修改文件:
*********************************************************************************************************************************************************************/
/*********************************************************************************************************************************************************************
* 包含头文件
*********************************************************************************************************************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#pragma comment(lib, "winmm.lib")
//以上为格式,规范照搬即可
#include "CalcMonth.h"
#include "CalcDay.h"
#include "CalcWeek.h"
#include "Tick.h"
//自己写的头文件
/*********************************************************************************************************************************************************************
* 宏定义
*********************************************************************************************************************************************************************/
/*********************************************************************************************************************************************************************
* 枚举结构体定义
*********************************************************************************************************************************************************************/
/*********************************************************************************************************************************************************************
* 内部变量
*********************************************************************************************************************************************************************/
/*********************************************************************************************************************************************************************
* 内部函数声明
*********************************************************************************************************************************************************************/
static void InitSoftware(void);//初始化Software
static void __stdcall TimeProc(unsigned int uTimerID, unsigned int uMsg, unsigned long dwUser, unsigned long dw1, unsigned long dw2); //定时器回调函数
static void Proc2msTask(void);//声明一个2ms执行一次的函数
static void Pro1SecTask(void);//声明一个1s执行一次的函数
//以上为格式,规范照搬即可
/*********************************************************************************************************************************************************************
* 内部函数实现
*********************************************************************************************************************************************************************/
/*********************************************************************************************************************************************************************
* 函数名称:InitSoftware
* 函数功能:所有的软件初始化函数都放在此函数中
* 输入参数:void
* 输出参数:void
* 返回值:void
* 创建日期:2022年07月23日
* 注 意:
*********************************************************************************************************************************************************************/
static void InitSoftware(void)
{
InitCalcDay();
InitCalcMonth();
InitCalcWeek();//所写的所有函数的初始化
SetTickVal(0);//设置初始化时间,格式规范
}
/*********************************************************************************************************************************************************************
* 函数名称:TimeProc
* 函数功能:定时器回调函数
* 输入参数:uTimerID, uMsg, dwUser, dw1, dw2
* 输出参数:void
* 返回值:void
* 创建日期:2022年07月22日
* 注 意:
*********************************************************************************************************************************************************************/
static void __stdcall TimeProc(unsigned int uTimerID, unsigned int uMsg, unsigned long dwUser, unsigned long dw1, unsigned long dw2)
{
Proc2msTask();//定时器回调函数里放了一个2ms执行一次的函数
}
/*********************************************************************************************************************************************************************
* 函数名称:Proc2msTask
* 函数功能:处理2ms任务
* 输入参数:void
* 输出参数:void
* 返回值:void
* 创建日期:2022年07月22日
* 注 意:
*********************************************************************************************************************************************************************/
static void Proc2msTask(void)//要进行以下跳转任务的每2ms执行一次的函数
{
static short s_iCnt500 = 0;//s_iCnt是计数变量的前缀,后面跟几就是执行几次后跳出
TickPer2Ms();//调用了tick.c里每2ms执行一次的具体函数
if (s_iCnt500 >= 499)
{
Pro1SecTask();//当计数到499次的时候(2ms*500=1s)调用处理处理1s的任务函数
s_iCnt500 = 0;//然后归零从头开始
}
else
{
s_iCnt500++;//进行累加,至次数够499
}
}
/*********************************************************************************************************************************************************************
* 函数名称:Proc1SecTask
* 函数功能:处理1s任务(相当于原来功能函数里的主函数最后管着显示)
* 输入参数:void
* 输出参数:void
* 返回值:void
* 创建日期:2022年07月22日
* 注 意:
*********************************************************************************************************************************************************************/
static void Pro1SecTask(void)
{
int tickVal;
short day, month, week;
tickVal = GetTickVal();//通过tick.c中获取tick的函数得到的值赋给tickVal
day = CalcDay(tickVal);
month = CalcMonth(tickVal);
week = CalcWeek(tickVal);
printf("2020年%02d月%02d日—星期%d\n", month, day, week);
}
/*********************************************************************************************************************************************************************
* API函数实现
*********************************************************************************************************************************************************************/
/*********************************************************************************************************************************************************************
* 函数名称:main
* 函数功能:主函数(时钟用的函数)
* 输入参数:void
* 输出参数:void
* 返回值:void
* 创建日期:2022年07月22日
* 注 意:
*********************************************************************************************************************************************************************/
void main(void)
{
InitSoftware();//初始化软件
// 用户定时器设定,每2ms触发一次定时器,精度为1ms, 并执行回调函数TimeProc,TIME_PERIODIC周期性触发,剩下的都是格式
timeSetEvent(2, 1, TimeProc, 0, TIME_PERIODIC);
while (1)
{
}
}