第十二届省赛题出现的问题
问题1:数码管显示与要求不相符
问题的原因:浮点数计算精度导致显示不准确
解决方案 : 强制显示 , 电压输出不与显示绑定,避免浮点数计算精度导致显示不准确扣分
switch(Seg_Disp_Mode)
{
case 0://温度显示界面
Seg_Buf[0] = 11;//C
Seg_Buf[4] = (unsigned char)(Degree / 10.0);
Seg_Buf[5] = (unsigned char)Degree % 10;
Seg_Point[5] = 1;
Seg_Buf[6] = (unsigned char)(Degree * 10) % 10;
Seg_Buf[7] = (unsigned char)(Degree * 100) % 10;
break;
case 1://参数设置界面
Seg_Buf[0] = 12;//P
Seg_Buf[4] = 10;//熄灭,4,5位数码管
Seg_Buf[5] = 10;
Seg_Point[5] = 0;//熄灭小数点
Seg_Buf[6] = (unsigned char)(Degree_Standard / 10) % 10;
Seg_Buf[7] = Degree_Standard % 10;
break;
case 2://DAC输出界面
if(Voltage_Mode == 0)//模式1
{
if(Degree < Degree_Standard)
{
Voltage_Output = 0.00;
Seg_Buf[0] = 13;//A
Seg_Buf[4] = 10;//熄灭第4位数码管
Seg_Point[5] = 1;//点亮小数点
Seg_Buf[5] = 0;
Seg_Buf[6] = 0;
Seg_Buf[7] = 0;
}
else
{
Voltage_Output = 5.00;
Seg_Buf[0] = 13;//A
Seg_Buf[4] = 10;//熄灭第4位数码管
Seg_Point[5] = 1;//点亮小数点
Seg_Buf[5] = 5;
Seg_Buf[6] = 0;
Seg_Buf[7] = 0;
}
}
else //模式2
{
if(Degree < 20.0)
{
Voltage_Output = 1.00;
Seg_Buf[0] = 13;//A
Seg_Buf[4] = 10;//熄灭第4位数码管
Seg_Point[5] = 1;//点亮小数点
Seg_Buf[5] = 1;
Seg_Buf[6] = 0;
Seg_Buf[7] = 0;
}
else if(Degree > 40.0)
{
Voltage_Output = 4.00;
Seg_Buf[0] = 13;//A
Seg_Buf[4] = 10;//熄灭第4位数码管
Seg_Point[5] = 1;//点亮小数点
Seg_Buf[5] = 4;
Seg_Buf[6] = 0;
Seg_Buf[7] = 0;
}
else
{
Voltage_Output = (Degree-20)* 0.15 + 1.00;
Seg_Buf[0] = 13;//A
Seg_Buf[4] = 10;//熄灭第4位数码管
Seg_Point[5] = 1;//点亮小数点
Seg_Buf[5] = (unsigned char)Voltage_Output;
Seg_Buf[6] = (unsigned char)(Voltage_Output * 10) % 10;
Seg_Buf[7] = (unsigned char)(Voltage_Output *100) % 10;
}
}
break;
}
每一次情况都单独显示,不全都使用voltage_output作为变量控制
问题2:DAC输出结果全都是0.00
函数中的代码部分
Voltage = AD_Read(0x43) / 51.0;//实时读取电压
Voltage_DA = Voltage;
DA_Write((unsigned char)(Voltage_DA*51.0));//实时输出电压值
尝试过的解决方法:
1.把DA通道改成0x40,结果无影响.
2:加入 t*= 12;,*结果反而直接显示错乱了(onewire.c中) ps:看12省赛讲解视频的时候有网友指出24年之后官方给的底层改动了不需要加入t*=12,加了会乱.
3.不管加没加unsigned char 强制转换voltage_DA都输出为0.00
(今天没有免费次数了明天更新)
______________________分割线___________________________

