第九届国赛编程时遇到的玄学问题
void Display_HC()
{
SegBuffer[0] = 0x89;
SegBuffer[1] = SegCode[12];
SegBuffer[2] = 0xff;
SegBuffer[3] = 0xff;
SegBuffer[4] = SegCode[(WriteBuf[0]*100+WriteBuf[1])/1000];
SegBuffer[5] = SegCode[((WriteBuf[0]*100+WriteBuf[1])/100)%10]&0x7f;
SegBuffer[6] = SegCode[((WriteBuf[0]*100+WriteBuf[1])/10)%10];
SegBuffer[7] = SegCode[(WriteBuf[0]*100+WriteBuf[1])%10];
}
这一部分是温度的回显,(WriteBuf[0]*100+WriteBuf[1])是从AT24C02中读取的最近一次保存的数据。但是如果按以上这种写法显示到数码管上,会出现 显示的数值 比 想得到的数值 大40的情况。
但是如果改写为:
void Display_HC()
{
temp = WriteBuf[0]*100+WriteBuf[1];
SegBuffer[0] = 0x89;
SegBuffer[1] = SegCode[12];
SegBuffer[2] = 0xff;
SegBuffer[3] = 0xff;
SegBuffer[4] = SegCode[temp/1000];
SegBuffer[5] = SegCode[(temp/100)%10]&0x7f;
SegBuffer[6] = SegCode[(temp/10)%10];
SegBuffer[7] = SegCode[temp%10];
}
就可以解决这个问题,使得显示的数值就是预期的值。
但这是为什么呢?????????????????????