|
#include "..\includes.h"
/* ******************************************************************************** ************************ ** 函数名称: CalculateWeekDay ** 功能描述: 根据年月日计算星期,从公元元年到5535年,不管星期制从何时开始,何时结束 ** 输 入: Year,Month,Day ** 输 出: Week ** 全局变量: 无 ******************************************************************************** *********************** */ #ifndef EN_CALCULATEWEEK #define EN_CALCULATEWEEK 0 #endif
#if EN_CALCULATEWEEK > 0 INT8U code week_tab[] = {0,1,4,4,0,2,5,0,3,6,1,4,6}; INT8U CalculateWeekDay(INT16U Year,INT8U Month,INT8U Date) { INT8U err; //无错误检查 if((Month<3) && (!(Year&0x03) && (Year%1000) || (!(Year%400)))) { Date--; } err = (Date + Year + Year/4 + Year/400 - Year/100 + week_tab[Month]- 2)%7;
return err; }
#endif
/* ******************************************************************************** ************************ ** 函数名称: DelayUs ** 功能描述: 微秒级延时 ** 输 入: 延时时间 ** 输 出: 无 ** 全局变量: 无 ******************************************************************************** *********************** */ #ifndef EN_DELAYUS #define EN_DELAYUS 0 #endif
#if EN_DELAYUS > 0
void DelayUs(INT16U i) { for(i; i>0; i--) { ; }
return; }
#endif
/* ******************************************************************************** ************************ ** 函数名称: DelayMs ** 功能描述: 毫秒级延时 ** 输 入: 延时时间 ** 输 出: 无 ** 全局变量: 无 ******************************************************************************** *********************** */ #ifndef EN_DELAYMS #define EN_DELAYMS 0 #endif
#if EN_DELAYMS > 0 void DelayMs(INT16U i) { INT8U p;
for(i; i>0; i--) { for(p=0; p<200; p++) { ; } }
return; }
#endif
/* ******************************************************************************** ************************ ** 函数名称: SwapHL ** 功能描述: 数据高低字节颠倒 ** 输 入: 需要颠倒的一个数据 ** 输 出: 颠倒后的数据 ** 全局变量: 无 ******************************************************************************** *********************** */ #ifndef EN_SWAP #define EN_SWAP 0 #endif
#if EN_SWAP > 0
INT8U SwapHL(INT8U Data) { INT8U i; INT8U High=0,Low=0,Result; INT8U HBit=0x10,LBit=0x08;
for(i=1; i<8; i+=2) { High = ((Data<<i) & HBit)|High; Low = ((Data>>i) & LBit)|Low; HBit = HBit<<1; LBit = LBit>>1; } Result = High|Low;
return Result; }
#endif
/* ******************************************************************************** ************************ ** 函数名称: SubStr ** 功能描述: 从源字符串中取出子串 ** 输 入: 源串指针首址,目的串指针首址,开始字节,长度 ** 输 出: 取到的数据目的指针 ** 全局变量: 无 ******************************************************************************** *********************** */ #ifndef EN_SUBSTR #define EN_SUBSTR 0 #endif
#if EN_SUBSTR > 0
void SubStr(INT8U *Source,INT8U *Dest,INT8U Start,INT8U Len) { INT8U i ;
for(i=0; i<Len; i++) { Dest = Source[i+Start] ; } Dest[Len] = 0;
return; }
#endif
#ifndef EN_DATASTRING #define EN_DATASTRING 0 #endif
#if EN_DATASTRING > 0
/* ******************************************************************************** ************************ ** 函数名称: CharToStr ** 功能描述: char转字符串 ** 输 入: char形数据,目的串指针首址 ** 输 出: 取到的数据目的指针 ** 全局变量: 无 ******************************************************************************** *********************** */ void CharToStr(INT8U Source,INT8U *Dest) { INT8U i,temp[2];
temp[0] = (Source>>4)&0x0F; temp[1] = (Source)&0x0F; for(i=0; i<2; i++) { if(temp > 9) { temp += 0x37; } else { temp += 0x30; } Dest = temp; }
return; } /* ******************************************************************************** ************************ ** 函数名称: IntToStr ** 功能描述: INT16U转字符串 ** 输 入: INT16U形数据,目的串指针首址 ** 输 出: 取到的数据目的指针 ** 全局变量: 无 ******************************************************************************** *********************** */ void IntToStr(INT16U Source,INT8U *Dest) { INT8U i; union { INT8U temp_char[2]; INT16U temp_int; }temp;
temp.temp_int = Source; for(i=0; i<2; i++) { CharToStr(temp.temp_char,&Dest[i*2]); }
return; } /* ******************************************************************************** ************************ ** 函数名称: LongToStr ** 功能描述: INT32U转字符串 ** 输 入: INT32U形数据,目的串指针首址 ** 输 出: 取到的数据目的指针 ** 全局变量: 无 ******************************************************************************** *********************** */ void LongToStr(INT32U Source,INT8U *Dest) { INT8U i; union { INT8U temp_char[4]; INT32U temp_long; }temp;
temp.temp_long = Source; for(i=0; i<4; i++) { CharToStr(temp.temp_char,&Dest[i*2]); }
return; }
#endif
#ifndef EN_STRINGDATA #define EN_STRINGDATA 0 #endif
#if EN_STRINGDATA > 0
/* ******************************************************************************** ************************ ** 函数名称: StrToChar ** 功能描述: 字符串转INT8U ** 输 入: 源串指针首址,目的串指针首址 ** 输 出: 取到的数据目的指针 ** 全局变量: 无 ******************************************************************************** *********************** */ void StrToChar(INT8U *Source,INT8U *Dest) { INT8U temp,err;
temp = 0; if((Source[0] >= '0') && (Source[0] <= '9')) { temp |= Source[0] - 0x30; temp <<= 4; err = err; } else if((Source[0] >= 'A') && (Source[0] <= 'F')) { temp |= Source[0] - 0x37; temp <<= 4; err = err; } else if((Source[0] >= 'a') && (Source[0] <= 'f')) { temp |= Source[0] - 0x57; temp <<= 4; err = err; } else { err = err; }
if((Source[1] >= '0') && (Source[1] <= '9')) { temp |= Source[1] - 0x30; err = err; } else if((Source[1] >= 'A') && (Source[1] <= 'F')) { temp |= Source[1] - 0x37; err = err; } else if((Source[1] >= 'a') && (Source[1] <= 'f')) { temp |= Source[1] - 0x57; err = err; } else { err = err; } *Dest = temp;
return; } /* ******************************************************************************** ************************ ** 函数名称: StrToInt ** 功能描述: 字符串转INT16U ** 输 入: 源串指针首址,目的串指针首址 ** 输 出: 取到的数据目的指针 ** 全局变量: 无 ******************************************************************************** *********************** */ void StrToInt(INT8U *Source,INT16U *Dest) { union { INT8U temp_char[2]; INT16U temp_int; }temp;
StrToChar(&Source[0],&temp.temp_char[0]); StrToChar(&Source[2],&temp.temp_char[1]); *Dest = temp.temp_int;
return; } /* ******************************************************************************** ************************ ** 函数名称: StrToLong ** 功能描述: 字符串转INT32U ** 输 入: 源串指针首址,目的串指针首址 ** 输 出: 取到的数据目的指针 ** 全局变量: 无 ******************************************************************************** *********************** */ void StrToLong(INT8U *Source,INT32U *Dest) { union { INT8U temp_char[4]; INT32U temp_long; }temp; StrToChar(&Source[0],&temp.temp_char[0]); StrToChar(&Source[2],&temp.temp_char[1]); StrToChar(&Source[4],&temp.temp_char[2]); StrToChar(&Source[6],&temp.temp_char[3]); *Dest = temp.temp_long;
return; }
#endif
void SelectedDevice(INT8U Device) { // ucPortBack = P1;
switch(Device) { case LED: INT1 = 1; P3_4 = 1; P3_5 = 0; P2_0 = 1; break; case KEY: INT1 = 1; P3_4 = 0; P3_5 = 1; P2_0 = 1; break; case ISD4004: INT1 = 1; P3_4 = 1; P3_5 = 1; P2_0 = 1; break; case LED0: P2_0 = 0; P3_4 = 0; P3_5 = 0; INT1 = 0; break; case LED1: P2_0 = 0; P3_4 = 1; P3_5 = 0; INT1 = 0; break; case LED2: P2_0 = 0; P3_4 = 0; P3_5 = 1; INT1 = 0; break; case LED3: P2_0 = 0; P3_4 = 1; P3_5 = 1; INT1 = 0; break; default: break; }
return; }
void UnSelectDevice(INT8U Device) { Device = Device; P2_0 = 0; INT1 = 1;
return; }
|
|