1.DAAD运算中数据处理之 “/51.0”
正确代码
Voltage = Ad_Read(0x03)/51;//错误代码
错误代码会出现整数 //????
2.逻辑关系描述错误: ||和&&的用法
题目
正确代码
错误代码
if((Voltage < 1.5)||(Voltage >= 2.5)||(Voltage < 3.5)) ucLed[2] = 0; //??
if((Voltage >= 1.5)||(Voltage < 2.5)||(Voltage >= 3.5)) ucLed[2] = 1;
3.(存疑)关闭数码管和LED指令需要从中断函数处操作
正确代码
错误代码
直接在Led_Proc()函数里通过标志位的方式无法熄灭所有LED,因为??(不知道为啥,存疑)
4.三目运算符用法 “?:”
5.最高位如果为0则数码管这一位熄灭代码逻辑
正确代码:注意,位数高低是从右往左,但是数码管的存储数组是从左往右排序的,可以利用。
unsigned char i = 3;//高位熄灭专用变量
/* 数据显示区域 */
Seg_Point[5] = Seg_Disp_Mode;//小数点使能
if(Seg_Disp_Mode == 0) //处于频率显示界面
{
Seg_Buf[0] = 11;//标识符F
Seg_Buf[3] = Freq / 10000 % 10;
Seg_Buf[4] = Freq / 1000 % 10;
Seg_Buf[5] = Freq / 100 % 10;
Seg_Buf[6] = Freq / 10 % 10;
Seg_Buf[7] = Freq % 10;
while(Seg_Buf[i] == 0) //数码管高位熄灭
{
Seg_Buf[i] = 10;
if(++i == 7) break; //保证最低位不熄灭 避免程序卡死
}
}
错误代码1:把每一位为0的数码管都熄灭了,而不是只有最高位熄灭
if(Seg_Disp_Mode == 0) //频率显示界面
{
Seg_Buf[0] = 11;
Seg_Buf[3] = (Freq / 10000 % 10)?(Freq / 10000 % 10):10;
Seg_Buf[4] = (Freq / 1000 % 10)?(Freq / 1000 % 10):10;
Seg_Buf[5] = (Freq / 100 % 10)?(Freq / 100 % 10):10;
Seg_Buf[6] = (Freq /10 % 10)?(Freq /10 % 10):10;
Seg_Buf[7] = (Freq % 10)?(Freq /10 % 10):10;
}
错误代码2:i会溢出,致使程序卡死,数码管不显示任何数值,按键无法使用。因为程序启动的时候,频率输出功能有一定的滞后性,会致使刚开始输出频率为0,则i会马上++到7,然后溢出,程序在最开始就卡死
unsigned char i = 3;//高位熄灭专用变量
/* 数据显示区域 */
Seg_Point[5] = Seg_Disp_Mode;//小数点使能
if(Seg_Disp_Mode == 0) //处于频率显示界面
{
Seg_Buf[0] = 11;//标识符F
Seg_Buf[3] = Freq / 10000 % 10;
Seg_Buf[4] = Freq / 1000 % 10;
Seg_Buf[5] = Freq / 100 % 10;
Seg_Buf[6] = Freq / 10 % 10;
Seg_Buf[7] = Freq % 10;
while(Seg_Buf[i] == 0) //数码管高位熄灭
{
Seg_Buf[i] = 10;
i ++;
}
}