Task08 基于多媒体定时器的电子钟设计

具体任务:

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)
	{
	}
}

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值