📄 common.c
字号:
#define COMMON_GLOBALS
#include "includes.h"
void DelayXms(INT16U time)
{
unsigned char j,k;
unsigned int i;
for(i=0;i<time;i++)
for(j=0;j<0x0e;j++)
for(k=0;k<0x3a;k++);
}
void DelayXus(INT16U time)//延时
{
INT16U i;
for(i=0;i<time;i++);
}
INT8U AddCRC(INT8U *pnt,INT8U length) //产生校验和
{
INT8U crc=0;
while(length--)
{
crc+=*pnt;
pnt++;
}
return crc;
}
INT8U CalculateXOR(INT8U *Pnt,INT8U Length)
{
INT8U i,XOR;
XOR=0;
for(i=0;i<Length;i++)
{
XOR^=*Pnt;
Pnt++;
}
return XOR;
}
INT8U CheckBCD(INT8U *Pnt,INT8U Lenth)
{
INT8U i;
for(i=0;i<Lenth;i++)
{
if(((*Pnt&0x0f)>0x09)||((*Pnt&0xf0)>0x90))
return 0;
Pnt++;
}
return 1;
}
void BcdToDigital(INT8U *Pnt1,INT8U *Pnt2,INT8U Length,INT8U Direction)
{
INT8U i;
if(Direction>0)
{
Pnt1=Pnt1+Length-1;
for(i=0;i<Length;i++)
{
*Pnt2=*Pnt1&0x0f;
Pnt2++;
*Pnt2=*Pnt1>>4;
Pnt2++;
Pnt1--;
}
}
else
{
for(i=0;i<Length;i++)
{
*Pnt2=*Pnt1&0x0f;
Pnt2++;
*Pnt2=*Pnt1>>4;
Pnt2++;
Pnt1++;
}
}
}
/*void DigitalToBcd(INT8U *Pnt1,INT8U *Pnt2,INT8U Cnt)
{
INT8U i;
for(i=0;i<Cnt;i++)
{
*Pnt2=*Pnt1&0x0f;
Pnt1++;
*Pnt2+=(*Pnt1<<4);
Pnt1++;
Pnt2++;
}
}*/
/*INT8U IncBcd(INT8U *pnt,INT8U length)
{
INT8U i;
INT8U sign;
for(i=0;i<length;i++)
{
*pnt=*pnt+1;
if((*pnt&0x0f)>0x09)
*pnt+=6;
if((*pnt&0xf0)>0x90)
{
*pnt+=0x60;
sign=1;
pnt++;
}
else
{
sign=0;
break;
}
}
return sign;
}*/
INT8U IncBcd(INT8U *Pnt,INT8U Length)
{
INT8U i;
INT8U Sign=0;
for(i=0;i<Length;i++)
{
*Pnt=*Pnt+1;
if((*Pnt&0x0f)>0x09)
{
*Pnt+=6;
Sign++;
}
else
return Sign;
if((*Pnt&0xf0)>0x90)
{
*Pnt+=0x60;
Sign++;
Pnt++;
}
else
return Sign;
}
return Sign;
}
/*void INT32ToBcd(INT32U Data,INT8U *Pnt)
{
Pnt+=3;
*Pnt=Data/10000000L;
*Pnt<<=4;
Data=Data%10000000L;
*Pnt+=Data/1000000L;
Pnt--;
Data=Data%1000000L;
*Pnt=Data/100000L;
*Pnt<<=4;
Data=Data%100000L;
*Pnt+=Data/10000L;
Pnt--;
Data=Data%10000L;
*Pnt=Data/1000L;
*Pnt<<=4;
Data=Data%1000L;
*Pnt+=Data/100L;
Pnt--;
Data=Data%100L;
*Pnt=Data/10L;
*Pnt<<=4;
*Pnt+=Data%10L;
}
INT32U BcdToINT32(INT8U *Pnt)
{
INT32U TempData;
TempData=0;
TempData+=*Pnt&0x0f;
TempData+=(*Pnt>>4)*10;
Pnt++;
TempData+=(*Pnt&0x0f)*100;
TempData+=(*Pnt>>4)*1000;
Pnt++;
TempData+=(*Pnt&0x0f)*10000;
TempData+=(*Pnt>>4)*100000;
Pnt++;
TempData+=(*Pnt&0x0f)*1000000;
TempData+=(*Pnt>>4)*10000000;
return TempData;
}*/
/*本程序能输出2000.1.1~2099.12.31年之间的日期所对应的星期数*/
INT8U GetWeekDay(INT8U Month,INT8U Day, INT8U Year)
{
INT16U DayNumber;
INT8U Temp;
Year=(Year>>4)*10+(Year&0x0f);
Month=(Month>>4)*10+(Month&0x0f);
Day=(Day>>4)*10+(Day&0x0f);
if(Year)
{
DayNumber=365*(INT16U)Year;
Temp=Year-1;
Temp>>=2;
DayNumber+=Temp+1;
}
else
DayNumber=0;
if(Year%4==0)
{
switch(Month)
{
case 1:
break;
case 2:
DayNumber+=31;
break;
case 3:
DayNumber+=60;
break;
case 4:
DayNumber+=91;
break;
case 5:
DayNumber+=121;
break;
case 6:
DayNumber+=152;
break;
case 7:
DayNumber+=182 ;
break;
case 8:
DayNumber+=213;
break;
case 9:
DayNumber+=244;
break;
case 10:
DayNumber+=274;
break;
case 11:
DayNumber+=305;
break;
case 12:
DayNumber+=335;
break;
default :
break;
}
}
else
{
switch(Month)
{
case 1:
break;
case 2:
DayNumber+=31;
break;
case 3:
DayNumber+=59;
break;
case 4:
DayNumber+=90;
break;
case 5:
DayNumber+=120;
break;
case 6:
DayNumber+=151;
break;
case 7:
DayNumber+=181 ;
break;
case 8:
DayNumber+=212;
break;
case 9:
DayNumber+=243;
break;
case 10:
DayNumber+=273;
break;
case 11:
DayNumber+=304;
break;
case 12:
DayNumber+=334;
break;
default :
break;
}
}
DayNumber+=Day;
DayNumber+=5;
DayNumber%=7;
return DayNumber;
}
/*本程序能输出2000.1.1~2099.12.31年之间的任意日期离2000.1.1的天数*/
INT16U CalDayNumOfDate(INT8U Month,INT8U Day, INT8U Year)
{
INT16U DayNumber;
INT8U Temp;
Year=(Year>>4)*10+(Year&0x0f);
Month=(Month>>4)*10+(Month&0x0f);
Day=(Day>>4)*10+(Day&0x0f);
if(Year)
{
DayNumber=365*(INT16U)Year;
Temp=Year-1;
Temp>>=2;
DayNumber+=Temp+1;
}
else
DayNumber=0;
if(Year%4==0)
{
switch(Month)
{
case 1:
break;
case 2:
DayNumber+=31;
break;
case 3:
DayNumber+=60;
break;
case 4:
DayNumber+=91;
break;
case 5:
DayNumber+=121;
break;
case 6:
DayNumber+=152;
break;
case 7:
DayNumber+=182 ;
break;
case 8:
DayNumber+=213;
break;
case 9:
DayNumber+=244;
break;
case 10:
DayNumber+=274;
break;
case 11:
DayNumber+=305;
break;
case 12:
DayNumber+=335;
break;
default :
break;
}
}
else
{
switch(Month)
{
case 1:
break;
case 2:
DayNumber+=31;
break;
case 3:
DayNumber+=59;
break;
case 4:
DayNumber+=90;
break;
case 5:
DayNumber+=120;
break;
case 6:
DayNumber+=151;
break;
case 7:
DayNumber+=181 ;
break;
case 8:
DayNumber+=212;
break;
case 9:
DayNumber+=243;
break;
case 10:
DayNumber+=273;
break;
case 11:
DayNumber+=304;
break;
case 12:
DayNumber+=334;
break;
default :
break;
}
}
DayNumber+=Day;
return DayNumber;
}
INT8U BcdAdd(INT8U *AddendPnt,INT8U *AugendPnt,INT8U *SumPnt,INT8U Length)
{
INT8U i;
INT8U Sign=0;
INT8U TempVar;
for(i=0;i<Length;i++)
{
//处理低位
*SumPnt=Sign;
*SumPnt+=(*AddendPnt&0x0f);
*SumPnt+=(*AugendPnt&0x0f);
if(*SumPnt>0x09)
{
*SumPnt+=0x06;
*SumPnt&=0x0f;
TempVar=1;
}
else
TempVar=0;
//处理高位
TempVar+=(*AddendPnt>>4);
TempVar+=(*AugendPnt>>4);
if(TempVar>0x09)
{
TempVar+=0x06;
Sign=1;
}
else
Sign=0;
*SumPnt+=(TempVar<<4);
SumPnt++;
AddendPnt++;
AugendPnt++;
}
return Sign;
}
INT8U CheckDate(INT8U *Pnt)//年月日
{
if(!CheckBCD(Pnt,3))
return 0;
if(*Pnt>0x31)
return 0;
Pnt++;
if(*Pnt>0x12)
return 0;
Pnt++;
if(*Pnt>0x30)
return 0;
return 1;
}
INT8U CheckTime(INT8U *Pnt)//时分秒
{
if(!CheckBCD(Pnt,3))
return 0;
if(*Pnt>0x59)
return 0;
Pnt++;
if(*Pnt>0x59)
return 0;
Pnt++;
if(*Pnt>0x23)
return 0;
return 1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -