[讨论] 发几个子程序代码

njlianjian   2007-5-4 14:18 楼主
#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;
}
南京璞晓电子   www.cpx0.com需要 msn:njlianjian@hotmail.com

回复评论 (1)

Re: 发几个子程序代码

单C还没开始学呢 感觉好难!
点赞  2007-5-7 22:56
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复