📄 pub_func.c
字号:
#include "pub_func.h"
#include "i2c.h"
void _delay(unsigned short t)
{
while(t--);
}
/* clear watch-dog
*/
void _clr_wdt(void)
{
}
/* judge data
*/
unsigned char is_data(unsigned char *buff,unsigned char data,unsigned char len)
{
unsigned char ii;
for(ii=0;ii<len;ii++)
{
if(buff[ii]!=data)
return ERROR;
}
return OK;
}
/* judge data
*/
unsigned char is_equal(unsigned char *buff1,unsigned char *buff2,unsigned char len)
{
unsigned char ii;
for(ii=0;ii<len;ii++)
{
if(buff1[ii]!=buff2[ii])
return ERROR;
}
return OK;
}
/* check sum
*/
unsigned char sys_do_checksum(unsigned char *ptr, unsigned char len)
{
unsigned char sum = 0,ii;
//length
for(ii=0;ii<len;ii++)
{
sum += *(ptr ++);
}
return sum;
}
/* fine item
*/
unsigned char find_item(const unsigned char *item_table,unsigned char item)
{
unsigned char i=0;
while(*(item_table+i)!=ERROR)
{
if(*(item_table+i)==item)
{
return i;
}
i++;
}
return ERROR;
}
/******************************************
* 十六进制转BCD码(1字节转换)
******************************************/
unsigned char Hex2BcdChar(unsigned char hex)
{
return((hex%10)|(((unsigned char)(hex/10))<<4));
}
/******************************************
* BCD码转十六进制(1字节转换)
******************************************/
unsigned char Bcd2HexChar(unsigned char bcd)
{
return((bcd>>4)*10+(bcd&0x0F));
}
/******************************************
* 十六进制转BCD码
******************************************/
unsigned short Hex2BcdShort(unsigned short hex)
{
unsigned short temp;
unsigned short ret;
unsigned char ii;
ret=0;
for(ii=0;ii<4;ii++)
{
ret>>=4;
temp=hex%10;
temp<<=12;
ret|=temp;
hex=hex/10;
}
return(ret);
}
/******************************************
* BCD码转十六进制
******************************************/
unsigned short Bcd2HexShort(unsigned short bcd)
{
unsigned short temp;
unsigned short ret;
unsigned char ii;
ret=0;
for(ii=0;ii<4;ii++)
{
temp=bcd&0xF000;
temp>>=12;
ret=ret*10+temp;
bcd<<=4;
}
return(ret);
}
/******************************************
* 十六进制转BCD码
******************************************/
unsigned long Hex2BcdLong(unsigned long hex)
{
unsigned long temp;
unsigned long ret;
unsigned char ii;
ret=0;
for(ii=0;ii<8;ii++)
{
ret>>=4;
temp=hex%10;
temp<<=28;
ret|=temp;
hex=hex/10;
}
return(ret);
}
/******************************************
* BCD码转十六进制
******************************************/
unsigned long Bcd2HexLong(unsigned long bcd)
{
unsigned long temp;
unsigned long ret;
unsigned char ii;
ret=0;
for(ii=0;ii<8;ii++)
{
temp=bcd&0xF0000000;
temp>>=28;
ret=ret*10+temp;
bcd<<=4;
}
return(ret);
}
/******************************************
* 读取数据数量信息
*
* 参数说明:
* (1)addr----读取的E2prom地址
* (2)*data----保存读取的值
* (3)dmax----读取的值的最大范围
* (4)defaultval----如果读错了,则取默认值
******************************************/
unsigned char ReadBcdCountInfo(unsigned short addr,unsigned char * data,unsigned char dmax,unsigned char defaultval)
{
FramRead(addr,data,1);
// 由BCD码转为16进制
*data=Bcd2HexChar(*data);
// 如果不在有效范围内,则强制置为1
if((*data==0)||(*data>=dmax))
{
*data=defaultval;
return ERROR;
}
return OK;
}
/******************************************
* 计算校验和(取反)
******************************************/
unsigned long GetChkSumRvrs(unsigned char *data,unsigned char len)
{
unsigned long sum=0;
while(len-->0)
{
sum+=*(data+len);
}
return(~sum);
}
/******************************************
* 判断一个数组中的数据是否等于某个数字
******************************************/
unsigned char IsEqualSpecialData(unsigned char *src,unsigned char data,unsigned char len)
{
do{
if(*src!=data)
{
return(ERROR);
}
src++;
}while(--len);
return(OK);
}
/******************************************
* 比对两个数组中的数据
******************************************/
unsigned char IsEqual(unsigned char *src1,unsigned char * src2,unsigned char len)
{
do{
if(*src1!=*src2)
{
return(ERROR);
}
src1++;
src2++;
}while(--len);
return(OK);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -