📄 global_function.h
字号:
// global_function wei gong yong han shu ku(公用函数库)iiiiiiiiiii
// BCD 判断,返回1,是BCD 返回0 不是BCD
unsigned char one_byte_hex_to_bcd(unsigned char a)
{
unsigned char l;
l=((a/10)<<4)+(a%10);
return l;
}
unsigned char testbcd(unsigned char a)
{
if(((a>>4)<=9)&&((a&0xf)<=9))
return 1;
else
return 0;
}
unsigned char testbcdnum(point,num)
unsigned char *point,num;
{unsigned char l,value;
value=0;
if(num==0) value=0;
else
for(l=0;l<num;l++)
value=value+testbcd(*(point+l));
return value;
}
unsigned char testZeronum(point,num)
unsigned char *point,num;
{
unsigned char l,value;
value=0;
if(num==0)
{
value=0;
}
else
{
for(l=0;l<num;l++)
{
if(0==*(point+l))
value=value+1;
// value=value+testbcd(*(point+l));
}
}
return value;
}
// pan duan year de he fa xing判断年的合法性iiiiiiii
// 1 true 0 false
unsigned char testyear(unsigned char a)
{
if((testbcd(a)==1)&&(a<=0x35)) // dao 2035 year
return 1;
else
return 0;
}
// pan duan month de he fa xing 判断月的合法性iiiiiiii
// 1 true 0 false
unsigned char testmonth(unsigned char a)
{
if((testbcd(a)==1)&&(0!=a)&&(a<=0x12))
return 1;
else
return 0;
}
// pan duan date de he fa xing 判断日的合法性iiiiiiiiiii
// 1 true 0 false
unsigned char testday(unsigned char a)
{
if((testbcd(a)==1)&&(0!=a)&&(a<=0x31))
return 1;
else
return 0;
}
// pan duan week de he fa xing 判断周的合法性iiiiiiiiiiiiii
// 1 true 0 false INSIDE RUN (0---6) 0---SUNDAY
unsigned char testweek(unsigned char a)
{
if(a<7)
return 1;
else
return 0;
}
// pan duan hour de he fa xing 判断小时的合法性iiiiiiiiiiiiiiii
// 1 true 0 false
unsigned char testhour(unsigned char a)
{
if((testbcd(a)==1)&&(a<=0x23))
return 1;
else
return 0;
}
// pan duan minute de he fa xing 判断分钟的合法性iiiiiiiiiiiiiiiii
// 1 true 0 false
unsigned char testminute(unsigned char a)
{
if((testbcd(a)==1)&&(a<=0x59))
return 1;
else
return 0;
}
// pan duan second de he fa xing 判断秒的合法性iiiiiiiiiiiiiiiiiii
// 1 true 0 false
unsigned char testsecond(unsigned char a)
{
if((testbcd(a)==1)&&(a<=0x59))
return 1;
else
return 0;
}
unsigned char testcuofengshiduan(unsigned char *point)
{
unsigned char l;
unsigned char *fp;
for(l=0;l<8;l++)
{
fp=point+2*l;
if(2!=(testminute(*fp)+testhour(*(fp+1))))
return 0;
}
return 1;
}
unsigned char value_hex_from_bcd(unsigned char a)
{unsigned char value;
value=10*(a>>4)+(0xf&a);
return value;
}
//yi xia tian jia yin yong 以下添加应用函数iiiiiiiiiiiiii
// test year month day week hour minute second de he fa xing
// test 年月日时分秒的合法性用于校时iiiiiiiiiiiiiiiiiiiiiii
// changed &second &day
unsigned char testsecond_minute_hour_day_month_year(second,day)
unsigned char *second,*day;
{unsigned char a7;
a7=0;
a7=testsecond(*second)+testminute(*(second+1))+testhour(*(second+2))+testday(*day)
+testmonth(*(day+1))+testyear(*(day+2));
if(a7!=6)
return 0;
else
{
switch(*(day+1))// month
{
case 0x1:
case 0x3:
case 0x5:
case 0x7:
case 0x8:
case 0x10:
case 0x12:
a7=1;
break;
case 0x4:
case 0x6:
case 0x9:
case 0x11:
if((0!=*day)&&(*day<0x31))
a7=1;
else
a7=0;
break;
default:
if((value_hex_from_bcd(*(day+2))%4)==0)
{
if((0!=*day)&&(*day<0x30))
a7=1;
else a7=0;
}
else
{
if((0!=*day)&&(*day<0x29))
a7=1;
else
a7=0;
}
break;
}
return a7;
}
}
unsigned char testminutehour(unsigned char *point)
{
if(2==testminute(*point)+testhour(*(point+1)))
return 1;
else
return 0;
}
unsigned char testdaymonth(unsigned char *point)
{
unsigned char time[6],l;
for(l=0;l<6;l++)
time[l]=0;
time[3]=*point;
time[4]=*(point+1);
return testsecond_minute_hour_day_month_year(&time[0],&time[3]);
}
// ram [] 2 byte----->hex
unsigned int value_hex_from_2bcd(unsigned int addr)
{unsigned int l;
l=value_hex_from_bcd(RAM[addr]);
l=l+100*value_hex_from_bcd(RAM[addr+1]);
return l;
}
// ji suan zhou ci 根据年月日 计算周次ppppppp
// 2000-2035 1_1 zhou ci
const unsigned char table_week_year[]=// week of 2000----2005
{6,1,2,3,4,6,0,1,2,4,5,6,0,2,3,4,5,0,1,2,3,5,6,0,1,3,4,5,6,1,2,3,4,6,0,1};
const unsigned int table_month28[]={0,31,59,90,120,151,181,212,243,273,304,334};
const unsigned int table_month29[]={0,31,60,91,121,152,182,213,244,274,305,335};
unsigned char week_from_day_month_year(day)
unsigned char *day;
{unsigned int l;
unsigned char l1,l2,l3;
l2=value_hex_from_bcd(*(day+1));
if((value_hex_from_bcd(*(day+2))%4)==0)
l=table_month29[l2-1];
else
l=table_month28[l2-1];
l=value_hex_from_bcd(*day)-1+table_week_year[value_hex_from_bcd(*(day+2))]+l;
l1=l%7;
return l1;
}
// return 1 true
unsigned char test_week_day_month_year(lweek,day)// point
unsigned char lweek,*day;
{if(testweek(lweek)+testday(*day)+testmonth(*(day+1))+testyear(*(day+2))==4)
if(week_from_day_month_year(day)==lweek)
if(1==testsecond_minute_hour_day_month_year(&RSOFT_RTC_SECOND,day))
return 1;
else
return 0;
else
return 0;
else
return 0;
}
// jiao shi yong 比较时间是否在误差范围内,参数允许误差(秒), 秒分时日月年pppp
// return 1 true 0 false
// NOTE 10 MINUTE
unsigned char compare_date_time(l1,second,day)
unsigned int l1;
unsigned char *second,*day;
{unsigned int j1,j2;
unsigned long j3,j4,j5,j6;
if(((value_hex_from_bcd(RSOFT_RTC_YEAR)-value_hex_from_bcd(*(day+2)))<2)||((value_hex_from_bcd(*(day+2))-value_hex_from_bcd(RSOFT_RTC_YEAR))<2))
{
j1=value_hex_from_bcd(RSOFT_RTC_YEAR);
j1=j1*365+(j1+3)/4;
if(((value_hex_from_bcd(RSOFT_RTC_YEAR))%4)==0)
j1=j1+table_month29[value_hex_from_bcd(RSOFT_RTC_MONTH)-1];
else
j1=j1+table_month28[value_hex_from_bcd(RSOFT_RTC_MONTH)-1];
j1=j1+value_hex_from_bcd(RSOFT_RTC_DAY)-1;
j2=value_hex_from_bcd(*(day+2));
j2=j2*365+(j2+3)/4;// num day
if((value_hex_from_bcd(*(day+2))%4)==0)
j2=j2+table_month29[value_hex_from_bcd(*(day+1))-1];
else
j2=j2+table_month28[value_hex_from_bcd(*(day+1))-1];
j2=j2+value_hex_from_bcd(*day)-1;// num day
j3=value_hex_from_bcd(RSOFT_RTC_SECOND);
j6=(value_hex_from_bcd(RSOFT_RTC_HOUR));
j3=(value_hex_from_bcd(RSOFT_RTC_MINUTE))*60+j6*3600+j3;
// num second
j4=value_hex_from_bcd(*second);
j6=(value_hex_from_bcd(*(second+2)));
j4=(value_hex_from_bcd(*(second+1)))*60+j6*3600+j4;
if(j1>j2)
{
j5=j1-j2;// day
j3=j3+j5*24*3600;// second
}
else
{
j5=j2-j1;//day
j4=j4+j5*24*3600;// second
}
if(j3>j4)
j5=j3-j4;
else
j5=j4-j3;
if(j5<=l1)
return 1;
else
return 0;
}
else
return 0;
}
// AA将RAM中的内容备份到铁电AAAAAAA
// RAM[I]----->FM I, NUM,
void copy_ram_to_fm(i,num,addr)
unsigned int i,addr;
unsigned char num;
{
unsigned char l;
if(num!=0)
{
data_addr.addri=addr;
for(l=0;l<num;l++)
{
wr_data[l]=RAM[i];
i++;
}
write(FM,num);
}
}
// AA将RAM中的内容备份到铁电,铁电1AAAAAAA
// RAM[I]----->FM I, NUM, fm1=0x33+
void copy_ram_to_fm_fm1(i,num,addr)
unsigned int i,addr;
unsigned char num;
{
unsigned char l;
data_addr.addri=addr;
for(l=0;l<num;l++)
{
wr_data[l]=RAM[i];
i++;
}
write(FM,num);
data_addr.addri=addr+FM_YONGHUHAO_L_BAK-FM_YONGHUHAO_L;
for(l=0;l<num;l++)
wr_data[l]=wr_data[l]+0x33;
write(FM,num);
}
// if jing wei return 1 else return 0
unsigned char byte_1_bcd_add(unsigned int i)
{
if(RAM[i]>=0x99) // ==99 -->jin wei
{
RAM[i]=0;
return 1;
}
else
{
if((RAM[i]&0xf)>=9)
RAM[i]=(RAM[i]&0xf0)+0x10; // n9 --->(n+1) 0
else
RAM[i]=RAM[i]+1;
return 0;
}
}
void byte_5_bcd_add(unsigned int i)
{unsigned char l,value;
if(byte_1_bcd_add(i)==1)
if(byte_1_bcd_add(i+1)==1)
if(byte_1_bcd_add(i+2)==1)
byte_1_bcd_add(i+3);
// bcd
if(4!=testbcdnum(&RAM[i],4))
for(l=0;l<4;l++)
{
value=value_hex_from_bcd(RAM[i+l])%100;
RAM[i+l]=one_byte_hex_to_bcd(value);//((value/10)<<4)+(value%10);
}
}
void set_addr_by_twobiao(unsigned char twobiao_type)
{
data_addr.addri=TABLE_TWO1[twobiao_type].blockaddr;
}
unsigned int current_twobiaofm_block_addr(twobiao_type,num)
unsigned char twobiao_type,num;
{union k1
{
unsigned char s[2];
unsigned int w;
}d5;
unsigned char g1;
unsigned int g3;
data_addr.addri=FM_POINT_TWOTABLE+twobiao_type;
if(0==read(FM,1))
g3=0xffff;
else
{
g1=wr_data[0];
set_addr_by_twobiao(twobiao_type);
g1=(g1+num)%TABLE_TWO1[twobiao_type].numofsubblock;// SHANG SHANG YUE
d5.w=TABLE_TWO1[twobiao_type].lensubblock;
g3=1+g1*d5.w+data_addr.addri; //kuai di zhi
}
return g3;
}
void byte_2_bcd_add(unsigned int i)
{unsigned char l,value;
if(1==byte_1_bcd_add(i))
byte_1_bcd_add(i+1);
// bcd
if(2!=testbcdnum(&RAM[i],2))
for(l=0;l<2;l++)
{
value=value_hex_from_bcd(RAM[i+l])%100;
RAM[i+l]=one_byte_hex_to_bcd(value);//((value/10)<<4)+(value%10);
}
}
void byte_3_bcd_add(unsigned int i)
{unsigned char l,value;
if(1==byte_1_bcd_add(i))
if(1==byte_1_bcd_add(i+1))
byte_1_bcd_add(i+2);
// bcd
if(3!=testbcdnum(&RAM[i],3))
for(l=0;l<3;l++)
{
value=value_hex_from_bcd(RAM[i+l])%100;
RAM[i+l]=one_byte_hex_to_bcd(value);//((value/10)<<4)+(value%10);
}
}
// if 2,== 1 >,,0<
unsigned char compare_1_byte(i,j)
unsigned int i,j;
{
if(RAM[i]==RAM[j])
return 2;
else
{
if(RAM[i]>RAM[j])
return 1;
else
return 0;
}
}
// bcd compare
/*
unsigned char compare_2_byte(i,j)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -