⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 time.c

📁 16x2字符型液晶显示器驱动程序C语言原代码 实验过,绝对能用
💻 C
字号:
/*
*********************************************************************************************************
*                                                System(Sys)
*                                          System Management
*
*                        (c) Copyright 2005, Zou Jiahao, , Huizhou, Guangdong
*                                           All Rights Reserved
*
*                                                  V1.0.0
*
*--------------文件信息--------------------------------------------------------------------------------
* 文   件   名: Time.c
* 创   建   人: 邹家浩
* 最后修改日期: 2005年 月 日
* 描        述: 定义延时功能
*
*--------------历史版本信息----------------------------------------------------------------------------
* 创建人: 邹家浩
* 版  本: V1.0.0
* 日 期: 2005年8月31日
* 描 述: 原始版本
*
*------------------------------------------------------------------------------------------------------
* 修改人: 
* 版  本: 
* 日 期: 
* 描 述: 
*
*------------------------------------------------------------------------------------------------------
* 修改人: 
* 版  本: 
* 日 期: 
* 描 述: 
*
*--------------当前版本修订-----------------------------------------------------------------------------
* 修改人: 邹家浩
* 日 期: 2005年8月31日
* 描 述: 原始版本
*
*------------------------------------------------------------------------------------------------------
********************************************************************************************************/

/*
*********************************************************************************************************
*                                         INCLUDE FILES
*********************************************************************************************************
*/
#include "System.h"

/*
*********************************************************************************************************
*                                        GLOBAL VARIABLES
*********************************************************************************************************
*/
//struct CLOCK XDATA TimeClock;		//保存时钟的当前值

/*********************************************************************************************************
* 函数名称: TimeDelay5US
* 功能描述: 延时5us
* 输入参数: 无
*          
* 返 回 值: 无
*           
* 全局变量: 无
* 调用模块: 无
*
* 作 者: 邹家浩
* 日 期: 2005年8月31日
*-------------------------------------------------------------------------------------------------------
* 修改人: 邹家浩
* 日 期: 
*-------------------------------------------------------------------------------------------------------
* 修改人: 邹家浩
* 日 期:
*-------------------------------------------------------------------------------------------------------
********************************************************************************************************/
#if MACH_CYC <= 1				
void TimeDelay5US (void)	//调用函数:2个机器周期
{
#if MACH_CYC == 1			//1个机器周期为1us
	_nop_();				//空操作:1个机器周期
#elif MACH_CYC == 1/2		//1个机器周期为0.5us
	_nop_();
	_nop_();
	_nop_();
	_nop_();
	_nop_();
	_nop_();
#endif
	return;				//RET:2个机器周期
}
#endif

/*********************************************************************************************************
* 函数名称: TimeDelay10US
* 功能描述: 延时10us
* 输入参数: 无
*
* 返 回 值: 无
*           
* 全局变量: 无
* 调用模块: 无
*
* 作 者: 邹家浩
* 日 期: 2005年8月31日
*-------------------------------------------------------------------------------------------------------
* 修改人: 邹家浩
* 日 期: 
*-------------------------------------------------------------------------------------------------------
* 修改人: 邹家浩
* 日 期:
*-------------------------------------------------------------------------------------------------------
********************************************************************************************************/
/*void TimeDelay10US (void)	//调用函数:2个机器周期
{
#if MACH_CYC == 1/2
	INT8U i;
#endif
#if MACH_CYC==1				//1个机器周期为1us
	_nop_();				//空操作:1个机器周期
	_nop_();
	_nop_();
	_nop_();
	_nop_();
	_nop_();
#elif MACH_CYC == 1/2
	i = 6;
	_nop_();
	_nop_();
	_nop_();
	while(--i);
#endif
	return;				//RET:2个机器周期
}

/*********************************************************************************************************
* 函数名称: TimeDelay15US
* 功能描述: 延时15us
* 输入参数: 无
*
* 返 回 值: 无
*           
* 全局变量: 无
* 调用模块: 无
*
* 作 者: 邹家浩
* 日 期: 2005年8月31日
*-------------------------------------------------------------------------------------------------------
* 修改人: 邹家浩
* 日 期: 
*-------------------------------------------------------------------------------------------------------
* 修改人: 邹家浩
* 日 期:
*-------------------------------------------------------------------------------------------------------
********************************************************************************************************/
/*void TimeDelay15US (void)	//调用函数:2个机器周期
{
	INT8U i;
#if MACH_CYC==1				//1个机器周期为1us
	i = 5;					//1个机器周期
	while(--i);				//每一次循环2个机器周期
#elif MACH_CYC == 1/2
	i = 12;
	_nop_();
	while(--i);
#endif
	return;				//RET:2个机器周期
}

/*********************************************************************************************************
* 函数名称: TimeDelayOn5US
* 功能描述: 以5us为单位的延时
* 输入参数: 无
*
* 返 回 值: 无
*           
* 全局变量: 无
* 调用模块: 无
*
* 作 者: 邹家浩
* 日 期: 2005年8月31日
*-------------------------------------------------------------------------------------------------------
* 修改人: 邹家浩
* 日 期: 
*-------------------------------------------------------------------------------------------------------
* 修改人: 邹家浩
* 日 期:
*-------------------------------------------------------------------------------------------------------
********************************************************************************************************/
/*void TimeDelayOn5US (INT8U time)
{
#if MACH_CYC == 1/2
	INT8U i;
#endif
	do
	{
#if MACH_CYC == 1
		_nop_();
		_nop_();
		_nop_();
#elif MACH_CYC == 1/2
		i = 3;
		_nop_();
		while(--i);
#endif
		time--;
	}while(time);

}

/*********************************************************************************************************
* 函数名称: TimeDelayOn10US
* 功能描述: 以10us为单位的延时
* 输入参数: 无
*
* 返 回 值: 无
*           
* 全局变量: 无
* 调用模块: 无
*
* 作 者: 邹家浩
* 日 期: 2005年8月31日
*-------------------------------------------------------------------------------------------------------
* 修改人: 邹家浩
* 日 期: 
*-------------------------------------------------------------------------------------------------------
* 修改人: 邹家浩
* 日 期:
*-------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void TimeDelayOn10US (INT8U time)
{
#if MACH_CYC == 1/2
	INT8U i;
#endif
	do
	{
#if MACH_CYC == 1
		_nop_();
		_nop_();
		_nop_();
		_nop_();
		_nop_();
		_nop_();
		_nop_();
		_nop_();
#elif MACH_CYC == 1/2
		i = 8;
		_nop_();
		while(--i);
#endif
		time--;
	}while(time);
}

/*********************************************************************************************************
* 函数名称: TimeDelayOn15US
* 功能描述: 以15us为单位的延时
* 输入参数: 无
*
* 返 回 值: 无
*           
* 全局变量: 无
* 调用模块: 无
*
* 作 者: 邹家浩
* 日 期: 2005年8月31日
*-------------------------------------------------------------------------------------------------------
* 修改人: 邹家浩
* 日 期: 
*-------------------------------------------------------------------------------------------------------
* 修改人: 邹家浩
* 日 期:
*-------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void TimeDelayOn15US (INT8U time)
{
	INT8U i;
	do
	{
#if MACH_CYC == 1
		i = 6;
		while(--i);
#elif MACH_CYC == 1/2
		i = 12;
		_nop_();
		_nop_();
		_nop_();
		while(--i);
#endif
		time--;
	}while(time);
}

/*********************************************************************************************************
* 函数名称: TimeDelayUS
* 功能描述: 通用微秒级延时函数,此函数不适合50us以下的延时
* 输入参数: time:微秒级延时时间
*          
* 返 回 值: 无
*           
* 全局变量: 无
* 调用模块: 
*
* 作 者: 邹家浩
* 日 期: 2005年8月31日
*-------------------------------------------------------------------------------------------------------
* 修改人: 邹家浩
* 日 期: 
*-------------------------------------------------------------------------------------------------------
* 修改人: 邹家浩
* 日 期:
*-------------------------------------------------------------------------------------------------------
********************************************************************************************************/
/*
说明:
调用函数,返回和赋值操作共38个机器周期,因此计数值先减去38
每执行一次循环需要8个机器周期,因此计数值除以8
*/
/*void TimeDelayUS (INT16U time)				//调用函数:4个机器周期
{
	INT16U t = (INT16U)(((time  - 38) / 8) / MACH_CYC);	//调用除法模块:共25个机器周期,其他赋值操作:共8个机器周期
	do
	{
		t--;						//自减:1个机器周期;
	}while(t);					//跳转:共7个机器周期
}								//返回:1个机器周期

/*********************************************************************************************************
* 函数名称: TimeDelayMS
* 功能描述: 通用毫秒级延时函数
* 输入参数: time:毫秒级延时时间
*          
* 返 回 值: 无
*           
* 全局变量: 无
* 调用模块: 
*
* 作 者: 邹家浩
* 日 期: 2005年8月31日
*-------------------------------------------------------------------------------------------------------
* 修改人: 邹家浩
* 日 期: 
*-------------------------------------------------------------------------------------------------------
* 修改人: 邹家浩
* 日 期:
*-------------------------------------------------------------------------------------------------------
********************************************************************************************************/
/*说明:
在毫秒级延时内,调用函数,返回和赋值操作的几个机器周期可忽略不计
*/
void TimeDelayMS (INT16U time)
{
	INT8U j;
	//if(!time)
	//	return;
	do
	{
#if MACH_CYC==1				//1个机器周期为1us
		j = 250;					//1个机器周期
		while (--j);				//每一次循环2个机器周期
		j = 245;					//1个机器周期;=(1000-(8+1+1))/2-250
		while (--j);				//每一次循环2个机器周期
#elif MACH_CYC == 1/2
		j = 250;					//1个机器周期
		while (--j);				//每一次循环2个机器周期
		j = 250;					//1个机器周期
		while (--j);				//每一次循环2个机器周期
		j = 250;					//1个机器周期
		while (--j);				//每一次循环2个机器周期
		j = 244;					//1个机器周期;=(1000-250-250-250-(8+1+1+1+1)/2)
		while (--j);				//每一次循环2个机器周期
#endif
	}while(--time);					//共8个机器周期
}

/*********************************************************************************************************
* 函数名称: TimeClockIncs
* 功能描述: 时钟向前跳动
* 输入参数: 无
*          
* 返 回 值: 无
*           
* 全局变量: 无
* 调用模块: 
*
* 作 者: 邹家浩
* 日 期: 2005年8月31日
*-------------------------------------------------------------------------------------------------------
* 修改人: 邹家浩
* 日 期: 
*-------------------------------------------------------------------------------------------------------
* 修改人: 邹家浩
* 日 期:
*-------------------------------------------------------------------------------------------------------
********************************************************************************************************/
/*void TimeClockIncs (void)
{
	if (++TimeClock.Second >= 60)
	{
		TimeClock.Second = 0;
		if (++TimeClock.Minute >= 60)
		{
			TimeClock.Minute = 0;
			if (++TimeClock.Hour >= 24)
			{
				TimeClock.Hour = 0;
			}
		}
	}
}

/*********************************************************************************************************
* 函数名称: TimeInit
* 功能描述: 初始化有关时间的信息
* 输入参数: 无
*          
* 返 回 值: 无
*           
* 全局变量: 无
* 调用模块: System
*
* 作 者: 邹家浩
* 日 期: 2005年8月31日
*-------------------------------------------------------------------------------------------------------
* 修改人: 邹家浩
* 日 期: 
*-------------------------------------------------------------------------------------------------------
* 修改人: 邹家浩
* 日 期:
*-------------------------------------------------------------------------------------------------------
********************************************************************************************************/
/*void TimeInit (void)
{
	TimeClock.Hour = 0;
	TimeClock.Minute = 0;
	TimeClock.Second = 0;
}*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -