#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
Re: 发几个子程序代码
单C还没开始学呢
感觉好难!