📄 dianzifuzai.txt
字号:
PORTD|=(1<<1);
}
/**控制负载是否工作**/
void kzfz(void)
{
if((jsq&0x01)!=1)
{
PORTD&=~(1<<1);
jsq++;
PORTG&=~(1<<2);
delay_ms(200);
PORTD|=(1<<1);
work=1;
//PORTA&=~(1<<2);
}
else
{
PORTD&=~(1<<1);
jsq++;
PORTG|=(1<<2);
delay_ms(200);
PORTD|=(1<<1);
work=0;
//PORTA|=(1<<2);
WriteWord1 (Digit[4],DisBuffer[18]);
WriteWord1 (Digit[5],DisBuffer[0]);
WriteWord1 (Digit[6],DisBuffer[0]);
WriteWord1 (Digit[7],DisBuffer[0]);
OCR3AH=0x03ff;//0x000设置OC1Apwm波形占空比为100%;3ff时,波形占空比是0%
OCR3AL=0x00;
}
}
/**键值设定子函数**/
void jzsd(void)
{
ling=0;
switch(keys)
{
case 7:
{
s[3]=sd;
WriteWord2 (Digit[7],DisBuffer[s[3]]);
WriteWord2 (Digit[6],DisBuffer[28]);
WriteWord2 (Digit[5],DisBuffer[28]);
WriteWord2 (Digit[4],DisBuffer[28]);
}
break;
case 6:
{
if(sd<=18)
s[2]=s[3];
s[3]=sd;
WriteWord2 (Digit[7],DisBuffer[s[3]]);
WriteWord2 (Digit[6],DisBuffer[s[2]]);
WriteWord2 (Digit[5],DisBuffer[28]);
WriteWord2 (Digit[4],DisBuffer[28]);
}
break;
case 5:
{
if(sd<=18)
{
s[1]=s[2];
s[2]=s[3];
}
s[3]=sd;
WriteWord2 (Digit[7],DisBuffer[s[3]]);
WriteWord2 (Digit[6],DisBuffer[s[2]]);
WriteWord2 (Digit[5],DisBuffer[s[1]]);
WriteWord2 (Digit[4],DisBuffer[28]);
}
break;
case 4:
{
if(sd<=18)
{
s[0]=s[1];
s[1]=s[2];
s[2]=s[3];
}
s[3]=sd;
WriteWord2 (Digit[7],DisBuffer[s[3]]);
WriteWord2 (Digit[6],DisBuffer[s[2]]);
WriteWord2 (Digit[5],DisBuffer[s[1]]);
WriteWord2 (Digit[4],DisBuffer[s[0]]);
}
break;
case 3:
{
WriteWord2 (Digit[7],DisBuffer[29]);
WriteWord2 (Digit[6],DisBuffer[29]);
WriteWord2 (Digit[5],DisBuffer[29]);
WriteWord2 (Digit[4],DisBuffer[29]);
delay_ms(300);
WriteWord2 (Digit[7],DisBuffer[28]);
WriteWord2 (Digit[6],DisBuffer[28]);
WriteWord2 (Digit[5],DisBuffer[28]);
WriteWord2 (Digit[4],DisBuffer[28]);
delay_ms(300);
WriteWord2 (Digit[7],DisBuffer[29]);
WriteWord2 (Digit[6],DisBuffer[29]);
WriteWord2 (Digit[5],DisBuffer[29]);
WriteWord2 (Digit[4],DisBuffer[29]);
delay_ms(300);
WriteWord2 (Digit[7],DisBuffer[28]);
WriteWord2 (Digit[6],DisBuffer[28]);
WriteWord2 (Digit[5],DisBuffer[28]);
WriteWord2 (Digit[4],DisBuffer[28]);
delay_ms(300);
WriteWord2 (Digit[7],DisBuffer[29]);
WriteWord2 (Digit[6],DisBuffer[29]);
WriteWord2 (Digit[5],DisBuffer[29]);
WriteWord2 (Digit[4],DisBuffer[29]);
delay_ms(300);
WriteWord2 (Digit[7],DisBuffer[28]);
WriteWord2 (Digit[6],DisBuffer[28]);
WriteWord2 (Digit[5],DisBuffer[28]);
WriteWord2 (Digit[4],DisBuffer[28]);
WriteWord2 (Digit[4],DisBuffer[18]);
WriteWord2 (Digit[5],DisBuffer[0]);
WriteWord2 (Digit[6],DisBuffer[0]);
WriteWord2 (Digit[7],DisBuffer[0]);
keys=8;
}
break;
}
keys--;
}
/**方向键控制数值设定子函数**/
void fxj(void)
{
uchar i,j,sx;
for(i=0;i<=6;i++)
{
sx=keyscan();
switch(sx)
{
case 0x79:
{
i=0;
fxjd--;
}
break;
case 0x14:
{
i=0;
fxjd++;
}
break;
case 0x44:
{
i=0;
if(fxjd==7)
sx1++;
if(fxjd==6)
sx2++;
if(fxjd==5)
sx3++;
if(fxjd==4)
sx4++;
}
break;
case 0x81:
{
i=0;
if(fxjd==7)
sx1--;
if(fxjd==6)
sx2--;
if(fxjd==5)
sx3--;
if(fxjd==4)
sx4--;
}
break;
}
if(sx1==10)
{
sx1=0;
sx2++;
}
if(sx2==10)
{
sx2=0;
sx3++;
}
if(sx3==10)
{
sx3=0;
sx4++;
}
if(sx1==0xff)
{
sx1=9;
sx2--;
}
if(sx2==0xff)
{
sx2=9;
sx3--;
}
if(sx3==0xff)
{
sx3=9;
sx4--;
}
if(sx1==17)
{
sx1=27;
sx2--;
}
if(sx2==17)
{
sx2=27;
sx3--;
}
if(sx3==17)
{
sx3=27;
sx4--;
}
if(sx1==17&sx2==0)
{
sx1=9;
sx2=sx2+17;
}
if(sx2==17&sx3==0)
{
sx2=9;
sx3=sx3+17;
}
if(sx3==17&sx4==0)
{
sx3=9;
sx4=sx4+17;
}
if(sx2==28)
{
sx3++;
sx2=0;
sx1=sx1+18;
}
if(sx3==28)
{
sx4++;
sx3=0;
sx2=sx2+18;
}
if(sx4==28)
{
sx4=1;
sx1=sx2;
sx2=sx3;
sx3=18;
}
if(sx4==10&sx3>=18)
{
sx4=1;
sx1=sx2;
sx2=18;
sx3=sx3-18;
}
if(sx4==10&sx2>=18)
{
sx4=1;
sx1=18;
sx2=sx2-18;
}
if(sx4==17)
{
sx1=0,sx2=0,sx3=0,sx4=18;
}
if(sx4==0&sx3>=18)
{
sx4=sx3;
sx3=sx2;
sx2=sx1;
sx1=0;
}
if(sx4==0&sx2>=18)
{
sx4=sx3;
sx3=sx2;
sx2=0;
sx1=0;
}
if(sx4==0&sx1>=18)
{
sx4=sx3;
sx3=0;
sx2=0;
sx1=0;
}
if(fxjd>7)
{
fxjd=fxjd-4;
if(fxjd==12)
fxjd=7;
}
if(fxjd<4)
fxjd=7;
WriteWord2 (Digit[fxjd],DisBuffer[28]);
delay_ms(50);
WriteWord2 (Digit[7],DisBuffer[sx1]);
WriteWord2 (Digit[6],DisBuffer[sx2]);
WriteWord2 (Digit[5],DisBuffer[sx3]);
WriteWord2 (Digit[4],DisBuffer[sx4]);
delay_ms(50);
}
}
/*****************************************************************************
ADC转换并取数
******************************************************************************/
uint GetAD(uchar channel)
{
uchar x,y;
uint result;
ADCSRA=0x86; //64分频
ADMUX=channel;
ADCSRA|=BIT(ADSC); //启动一次哑转换
NOP();
ADCSRA|=BIT(ADSC); //启动转换
do
{
;
}
while((ADCSRA&0x10)==0); //等待转换完毕
x=ADCL; //先读取低字节
y=ADCH; //再读取高字节
result=y;
result=x|result<<8; //合并
return(result);
}
uchar deal_ad(uchar chanel)
{
uchar ad_change;
uint ad;
ad=GetAD(chanel);
ad_change=ad;
return ad_change;
}
/*****************************************************************************
***************************************************************************/
/****************************************
实际电流、电压计算
********************************/
void sjdl(uint x)
{
uchar l[6];
uint y,dy;
static float temp=4.05;
y=(x*temp)/1024*1000;
l[5]=y/10000;
l[0]=y/1000;
dy=y%10000;
l[4]=dy/1000;
dy=dy%1000;
l[3]=dy/100;
dy=dy%100;
l[2]=dy/10;
dy=dy%10;
l[1]=dy;
if(l[4]>=3&l[5]==0)
temp=3.99;
if(l[4]<1&l[5]==0)
temp=4.07;
if(l[4]>=1&l[4]<2&l[5]==0)
temp=4.03;
if(l[4]>=2&l[4]<3&l[5]==0)
temp=4.001;
l[4]=l[4]+18;
if(l[0]<10)
{
uchar m;
WriteWord1 (Digit[4],DisBuffer[l[4]]);
WriteWord1 (Digit[5],DisBuffer[l[3]]);
WriteWord1 (Digit[6],DisBuffer[l[2]]);
WriteWord1 (Digit[7],DisBuffer[l[1]]);
for(m=4;m>0;m--)
{
sj_dl[m]=l[m];
if(sj_dl[m]>=18)
sj_dl[m]=sj_dl[m]-18;
}
sj_dlz=sj_dl[4]*1000+sj_dl[3]*100+sj_dl[2]*10+sj_dl[1];
}
if(l[0]>=10)
{
uchar m;
WriteWord1 (Digit[4],DisBuffer[l[5]]);
WriteWord1 (Digit[5],DisBuffer[l[4]]);
WriteWord1 (Digit[6],DisBuffer[l[3]]);
WriteWord1 (Digit[7],DisBuffer[l[2]]);
for(m=5;m>1;m--)
{
sj_dl[m]=l[m];
if(sj_dl[m]>=18)
sj_dl[m]=sj_dl[m]-18;
}
sj_dlz=sj_dl[5]*10000+sj_dl[4]*1000+sj_dl[3]*100+sj_dl[2]*10;
}
}
void sjdy(uint x)
{
uchar l[6];
uint y,dy;
static uint temp=1180;
y=(x*4.1)/1024*temp;
//y=x*5.846;
l[5]=y/10000;
l[0]=y/1000;
dy=y%10000;
l[4]=dy/1000;
dy=dy%1000;
l[3]=dy/100;
dy=dy%100;
l[2]=dy/10;
dy=dy%10;
l[1]=dy;
if(l[4]>=6)
temp=1170;
else
temp=1190;
l[4]=l[4]+18;
if(l[0]<10)
{
uchar m;
WriteWord (Digit[4],DisBuffer[l[4]]);
WriteWord (Digit[5],DisBuffer[l[3]]);
WriteWord (Digit[6],DisBuffer[l[2]]);
WriteWord (Digit[7],DisBuffer[l[1]]);
for(m=4;m>0;m--)
{
sj_dy[m]=l[m];
if(sj_dy[m]>=18)
sj_dy[m]=sj_dy[m]-18;
}
sj_dyz=sj_dy[4]*1000+sj_dy[3]*100+sj_dy[2]*10+sj_dy[1];
}
if(l[0]>=10)
{
uchar m;
WriteWord (Digit[4],DisBuffer[l[5]]);
WriteWord (Digit[5],DisBuffer[l[4]]);
WriteWord (Digit[6],DisBuffer[l[3]]);
WriteWord (Digit[7],DisBuffer[l[2]]);
for(m=5;m>1;m--)
{
sj_dy[m]=l[m];
if(sj_dy[m]>=18)
sj_dy[m]=sj_dy[m]-18;
}
sj_dyz=sj_dy[5]*10000+sj_dy[4]*1000+sj_dy[3]*100+sj_dy[2]*10;
}
}
/*****************************/
/*************************************************************
恒压恒阻比较程序
*************************************************************/
uchar hl()
{
if(enactment>(sj_dlz/10))
{
chazhi=enactment-(sj_dlz/10);
return(1);
}
else if(enactment<(sj_dlz/10))
{
chazhi=(sj_dlz/10)-enactment;
return(2);
}
else
return(3);
}
uchar hz()
{
float dy,dl;
dy=sj_dyz,dl=sj_dlz;
sj_dzz=dy/dl*100;
uart0_tx(0x31);
uart0_tx(0x31);
uart0_tx(0x32);
uart0_tx(0x32);
uart0_tx(0x03);
sj_dzz_fs=sj_dzz;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -