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

📄 tool.c

📁 ucos_ii在mini2440上的移植KEIL编译环境
💻 C
字号:
#include "tool.h"
#include <stdio.h> 
#include <stdlib.h>
#include <string.h>

void delay(int times)//延时函数
{
    int i;

    for(;times>0;times--)
      for(i=0;i<400;i++);
}

/********************************************************************** 

  *  函数名称: UART_HextoDec 
  
	*  功能描述:
	*	  将十六进制的字符串转成十进制数整形 
	*  参数说明:
	*	   hex 十六进制字符串
	*  返回值 
	*     转化后的十进制整形数  
******************************************************************/
unsigned long UART_HextoDec(const char *hex) 
{ 
    int i, j = 0;
//	char ch;
	unsigned long val = 0;
	unsigned long tempval;
	unsigned char length = strlen(hex);
	for(i = 0; i < length; i++)
	{
		if( !( (hex[i] >= '0' && hex[i] <= '9' ) || ((hex[i] >= 'a' && hex[i] <= 'f' )) \
			|| (hex[i] >= 'A' && hex[i] <= 'F' ) || (hex[i] == 'x' || hex[i] == 'X')))
		return 0;
	}

	for(i = length - 1; i > 1; i--, j++)
	{
		if ( (hex[i] >= 'a' && hex[i] <= 'f')  \
			|| (hex[i] >= 'A' && hex[i] <= 'F') )
		{
			switch(hex[i])
			{
				case 'a':
				case 'A': tempval = 10; break;
				case 'b':
				case 'B': tempval = 11; break;
				case 'c':
				case 'C': tempval = 12; break;
				case 'd':
				case 'D': tempval = 13; break;
				case 'e':
				case 'E': tempval = 14; break;
				case 'f':
				case 'F': tempval = 15; break;
				default:break; 
			}
		}
		else if (hex[i] >= '0' && hex[i] <= '9')
		{
			switch(hex[i])
			{
				case '0': tempval = 0; break;
				case '1': tempval = 1; break;
				case '2': tempval = 2; break;
				case '3': tempval = 3; break;
				case '4': tempval = 4; break;
				case '5': tempval = 5; break;
				case '6': tempval = 6; break;
				case '7': tempval = 7; break;
				case '8': tempval = 8; break;
				case '9': tempval = 9; break;
				default:break; 
			}
		}
		//	tempval = my_atoi(&hex[i]);
		val += tempval * pow(16, j);		
	}
	return val;
}

/********************************************************************** 

  *  函数名称: my_atoi 
  
	*  功能描述:
	*	  字符串转成int型 
	*  参数说明:
	*	   hex 字符串
	*  返回值 
	*     转化后的十进制整形数  
******************************************************************/
unsigned int my_atoi(const char *hex) 
{ 
    int i, j = 0;

	unsigned int val = 0;
	unsigned int tempval;
	unsigned char length = strlen(hex);
	for(i = 0; i < length; i++)
	{
		if( !((hex[i] >= '0' && hex[i] <= '9')))
			return 0;
	}

	for(i = length - 1; i >= 0; i--, j++)
	{
		if (hex[i] >= '0' && hex[i] <= '9')
		{
			switch(hex[i])
			{
				case '0': tempval = 0; break;
				case '1': tempval = 1; break;
				case '2': tempval = 2; break;
				case '3': tempval = 3; break;
				case '4': tempval = 4; break;
				case '5': tempval = 5; break;
				case '6': tempval = 6; break;
				case '7': tempval = 7; break;
				case '8': tempval = 8; break;
				case '9': tempval = 9; break;
				default:break; 
			}
		}
		//	tempval = atoi(&hex[i]);
		val += tempval * pow(10, j);		
	}
	return val;
} 

/********************************************************************** 

  *  函数名称: UART_DectoHex 
  
	*  功能描述:
	*	  将(0-255)十进制的整形转成十六进制字符串 
	*  参数说明:
	*	    decimal 待转化的十进制数
	*		hex		存放十六进制字符串
	*  返回值 
	*     1 成功 0 失败  
******************************************************************/
int UART_DectoHex(unsigned char decimal,  char *hex)
{
	int ret = 0;
	ret = sprintf(hex, "0x%02x", decimal);

	if(ret == 4)
	{
		return 1;
	}
	else
	{
		return 0;
	}

}

/********************************************************************** 

  *  函数名称: UART_DecaddrtoHexaddr 
  
	*  功能描述:
	*	  将十进制整形地址转成十六进制地址字符串 
	*  参数说明:
	*	    decimaladdr 待转化的十进制整形地址
	*		hexaddr		存放十六进制地址字符串
	*  返回值 
	*     1 成功 0 失败  
******************************************************************/
int UART_DecaddrtoHexaddr(unsigned int decimaladdr,  char *hexaddr)
{	
	int ret = 0;
	ret = sprintf(hexaddr, "0x%08x", decimaladdr);

	if(ret == 10)
	{
		return 1;
	}
	else
	{
		return 0;
	}	
}



/*****************************************************
函数名称: int VALIDATION_isLeapYear(int year)
功	  能: 判断是否闰年
参    数: year 年
返 回 值: 1-通过 0-不通过
*****************************************************/
int VALIDATION_isLeapYear(int year)
{
	return (year%4 == 0 && year%100 != 0 || year%400 == 0);
}

/*****************************************************
函数名称:int VALIDATION_isDate(char *pDate,TIME_T * pSysDate)
功    能:日期格式校验
参    数:pDate		日期
返 回 值:1-有效 0-不合法
创建时间: 2012-09-24
*****************************************************/
int VALIDATION_isDate(char *pDate)
{
	char cYear[10] = {0};
	char cMonth[10] = {0};
	char cDay[10] = {0};
	int i = 0,nYear,nMonth,nDay;
	if(pDate[10] != '\0')
		return 0;
	for(i = 0; i < 10; i++)		//判断数据是否合法
	{
		if(i == 4 || i == 7)
		{
			if(pDate[i] != '-')
				return 0;
		}else if(pDate[i] >= '0' && pDate[i] <= '9')
		{
			if(i < 4)
				cYear[i] = pDate[i];
			else if(i>4 && i<7)
				cMonth[i-5] = pDate[i];
			else
				cDay[i-8] = pDate[i];	
		}else
			return 0;
	}
	i = 0;
	nYear = my_atoi(cYear);
	nMonth = my_atoi(cMonth);
	nDay = my_atoi(cDay);
	switch(nMonth)
	{
		case 1:
		case 3:
		case 5:
		case 7:
		case 8:
		case 10:
		case 12:
			if(nDay > 31 || nDay < 0)
				return 0;
			break;
		case 4:
		case 6:
		case 9:
		case 11:
			if(nDay > 30 || nDay < 0)
				return 0;
			break;
		case 2:
			{
				if(VALIDATION_isLeapYear(nYear)) //判断闰年2月份的天数是否合法
				{
					if(nDay > 29 || nDay < 0)
						return 0;
				}else  							 //判断非闰年2月份的天数是否合法
					if(nDay > 28 || nDay < 0)
						return 0;
			}
			break;
		default:
			return 0;
	}
	return 1;
}

/*****************************************************************
函数名称:int VALIDATION_isTime(char *pTime,TIME_T * pSysTime)
功    能:时间格式校验
参    数:pTime		时间
返 回 值:1-有效 0-不合法
创建时间: 2012-09-24
*****************************************************************/
int VALIDATION_isTime(char *pTime)
{
	char cHour[3] = {0};
	char cMin[3] = {0};
	char cSec[3] = {0};
	int i = 0,nHour,nMin,nSec;

	if(pTime[8] != '\0')
		return 0;
	for(i = 0; i < 8; i++)		//判断数据是否合法
	{
		if(i == 2 || i == 5)
		{
			if(pTime[i] != ':')
				return 0;
		}else if(pTime[i] >= '0' && pTime[i] <= '9')
		{
			if(i < 2)
				cHour[i] = pTime[i];
			else if(i>2 && i<5)
				cMin[i-3] = pTime[i];
			else
				cSec[i-6] = pTime[i];	
		}else
			return 0;
	}
	i = 0;
	nHour = my_atoi(cHour);
	nMin = my_atoi(cMin);
	nSec = my_atoi(cSec);

	if(nHour>23 || nHour<0 || nMin>59 || nMin<0 || nSec>59 || nSec<0)
		return 0;
	else
	{
		return 1;
	}
}

/*****************************************************************
函数名称:int select_num(char *temp)
功    能:数字校验
参    数:temp	
返 回 值:1-有效 0-不合法
创建时间: 2012-09-24
*****************************************************************/
int select_num(char *temp)
{
	int n;

	for(n = 0;n < strlen(temp);n++)
	{
		if(!((temp[n] >= 48 && temp[n] <= 57) ))
			return 0;
	}

	return 1;
}

/*****************************************************************
函数名称:int select_0x(char *temp)
功    能:数字校验
参    数:temp	
返 回 值:1-有效 0-不合法
创建时间: 2012-09-24
*****************************************************************/
int select_0x(char *temp)
{
	int n;

	for(n = 0;n < strlen(temp);n++)
	{
		if(!((temp[n] >= 48 && temp[n] <= 57) || (temp[n] >= 65 && temp[n] <= 70) || (temp[n] >= 97 && temp[n] <= 102 ) || temp[n] == 120 || temp[n] == 88))
			return 0;
	}

	return 1;
}



⌨️ 快捷键说明

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