char Tk=0,Tkm=12,fa=0;
void timerInter1(void) interrupt 3 {//T1中断
fa++;
}
void timerInter0(void) interrupt 1 {//T0中断
uchar a,b,c;
if(++Tk>=Tkm){ //读取计数值
Tk = 0;
TR1 = 0; //暂停计数
a = fa, b = TH1, c = TL1;
fa = TH1 = TL1 = 0;
TR1 = 1;
feq = (a*256L*256L + b*256L+c) * (24/Tkm);
if(feq<=5) feq = 0;; //去除本频率(通常有1Hz)
if(feq<300&&feq>10) Tkm = 24; //低频(小于10视为不起振)
else Tkm = 12; //频率较高时,闸门时间减小一些,加快测量速度
}
}
void putLx(float L){
if(L<1e-4) { L*=1e6; lcd_putf(L,2,4); lcd_puts(" uH"); return; }
if(L<1e-3) { L*=1e6; lcd_putf(L,1,4); lcd_puts(" uH"); return; }
if(L<1e-2) { L*=1e3; lcd_putf(L,3,4); lcd_puts(" mH"); return; }
if(L<1e-1) { L*=1e3; lcd_putf(L,2,4); lcd_puts(" mH"); return; }
if(L<1e+0) { L*=1e3; lcd_putf(L,1,4); lcd_puts(" mH"); return; }
if(L<1e+1) { lcd_putf(L,3,4); lcd_puts(" H"); return; }
if(L<1e+2) { lcd_putf(L,1,4); lcd_puts(" H"); return; }
if(L<1e+5) { lcd_puti(L,5); lcd_puts(" H"); return; }
lcd_puts("Overflow.");
}
float c2c(float f){ //针对涤纶电容修正
code float a[5]={100, 1000, 10000, 100000, 150000 }; //频率
code float b[5]={1.004, 1.000, 0.992, 0.960, 0.950 }; //修正量(综合修正表)
//code float a[5]={100, 1000, 10000, 100000, 200000 }; //频率
//code float b[5]={1.004, 1.000, 0.992, 0.975, 0.973 }; //修正量(涤纶原真修正表)
char i;
if(f<a[0]) return b[0];
if(f>a[4]) return b[4];
for(i=0;i<4;i++){
if( f>=a[i] && f<a[i+1]) return b[i] + (b[i+1]-b[i]) * (f-a[i]) / (a[i+1]-a[i]);
}
}
float Lx=0;
void calcL(){ //电感计算
float f,w,c0;
f = feq/1.024;
c0 = 3.12e-9 * c2c(f);
w = 2*3.1415926*f;
if(w) Lx = 1/(w*w*c0);
else Lx = 1e20;
lcd_goto1(0); putLx(Lx-cs.L0);
lcd_goto2(0); lcd_puts("F="); lcd_puti(f,6); lcd_puts("Hz");
}
main(){
uchar kn=0;
eepEn = 12345;
//端口初始化
P3M0 = 0x00; //00000000
P3M1 = 0x20; //00100000 P3.5置为高阻口
delay2(5); //等待升压电源电压上升
lcd_init(); //初始化LCD
lcd_cur0(); lcd_puts("LC 1.0"); //隐藏光标并显示片本 (责任编辑:admin) |