#include "..\includes.h"
/* ******************************************************************************** ************************ ** 函數(shù)名稱: CalculateWeekDay ** 功能描述: 根據(jù)年月日計算星期,從公元元年到5535年,不管星期制從何時開始,何時結(jié)束 ** 輸 入: 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 /* ******************************************************************************** ************************ ** 函數(shù)名稱: DelayUs ** 功能描述: 微秒級延時 ** 輸 入: 延時時間 ** 輸 出: 無 ** 全局變量: 無 ******************************************************************************** *********************** */ #ifndef EN_DELAYUS #define EN_DELAYUS 0 #endif #if EN_DELAYUS > 0 void DelayUs(INT16U i) { for(i; i>0; i--) { ; } return; } #endif /* ******************************************************************************** ************************ ** 函數(shù)名稱: 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 /* ******************************************************************************** ************************ ** 函數(shù)名稱: SwapHL ** 功能描述: 數(shù)據(jù)高低字節(jié)顛倒 ** 輸 入: 需要顛倒的一個數(shù)據(jù) ** 輸 出: 顛倒后的數(shù)據(jù) ** 全局變量: 無 ******************************************************************************** *********************** */ #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 /* ******************************************************************************** ************************ ** 函數(shù)名稱: SubStr ** 功能描述: 從源字符串中取出子串 ** 輸 入: 源串指針首址,目的串指針首址,開始字節(jié),,長度 ** 輸 出: 取到的數(shù)據(jù)目的指針 ** 全局變量: 無 ******************************************************************************** *********************** */ #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[i] = Source[i+Start] ; } Dest[Len] = 0; return; } #endif #ifndef EN_DATASTRING #define EN_DATASTRING 0 #endif #if EN_DATASTRING > 0 /* ******************************************************************************** ************************ ** 函數(shù)名稱: CharToStr ** 功能描述: char轉(zhuǎn)字符串 ** 輸 入: char形數(shù)據(jù),,目的串指針首址 ** 輸 出: 取到的數(shù)據(jù)目的指針 ** 全局變量: 無 ******************************************************************************** *********************** */ 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[i] > 9) { temp[i] += 0x37; } else { temp[i] += 0x30; } Dest[i] = temp[i]; } return; } /* ******************************************************************************** ************************ ** 函數(shù)名稱: IntToStr ** 功能描述: INT16U轉(zhuǎn)字符串 ** 輸 入: INT16U形數(shù)據(jù),,目的串指針首址 ** 輸 出: 取到的數(shù)據(jù)目的指針 ** 全局變量: 無 ******************************************************************************** *********************** */ 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[i],&Dest[i*2]); } return; } /* ******************************************************************************** ************************ ** 函數(shù)名稱: LongToStr ** 功能描述: INT32U轉(zhuǎn)字符串 ** 輸 入: INT32U形數(shù)據(jù),,目的串指針首址 ** 輸 出: 取到的數(shù)據(jù)目的指針 ** 全局變量: 無 ******************************************************************************** *********************** */ 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[i],&Dest[i*2]); } return; } #endif #ifndef EN_STRINGDATA #define EN_STRINGDATA 0 #endif #if EN_STRINGDATA > 0 /* ******************************************************************************** ************************ ** 函數(shù)名稱: StrToChar ** 功能描述: 字符串轉(zhuǎn)INT8U ** 輸 入: 源串指針首址,,目的串指針首址 ** 輸 出: 取到的數(shù)據(jù)目的指針 ** 全局變量: 無 ******************************************************************************** *********************** */ 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; } /* ******************************************************************************** ************************ ** 函數(shù)名稱: StrToInt ** 功能描述: 字符串轉(zhuǎn)INT16U ** 輸 入: 源串指針首址,,目的串指針首址 ** 輸 出: 取到的數(shù)據(jù)目的指針 ** 全局變量: 無 ******************************************************************************** *********************** */ 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; } /* ******************************************************************************** ************************ ** 函數(shù)名稱: StrToLong ** 功能描述: 字符串轉(zhuǎn)INT32U ** 輸 入: 源串指針首址,,目的串指針首址 ** 輸 出: 取到的數(shù)據(jù)目的指針 ** 全局變量: 無 ******************************************************************************** *********************** */ 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; } |
|