打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
公用子函数
#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[i] = 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[i] > 9) {
temp[i] += 0x37;
}
else {
temp[i] += 0x30;
}
Dest[i] = temp[i];
}

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[i],&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[i],&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;
}



本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
汉诺塔问题
2005年华为招聘--C语言笔试试题(答案自己写的,仅供参考)
URL encode 与 URL decode 的C语言实现(转)
使用arduino直接驱动1602液晶显示文字
Android中EditText的输入字数限制
迅雷二笔试题
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服