stm32负数存在形式是什么?求原子大哥

2019-07-21 02:04发布

[mw_shl_code=c,true]int angle;[/mw_shl_code] [mw_shl_code=c,true]double volatge[/mw_shl_code] [mw_shl_code=c,true]adcx=Get_Adc_Average(ADC_Channel_5,20); volatge=adcx*(3.32/4096); angle=(int)((volatge-0.633)/0.00081055/11.37777778); if (angle>180) angle=angle-360; if (angle<-180) angle=angle + 360; LCD_ShowxNum(160,170,angle,3,16,0);[/mw_shl_code]
我在做adc角度测量LCD显示实验的时候,显示的angle值,当angle为正数的时候显示正确,当angle为负时,则不对,我将LCD_ShowxNum(160,170,angle,3,16,0);改为LCD_ShowxNum(160,170,angle,35,16,0);显示35位时,发现angle为负数时显示的是一串32位的数字,并当angle=-1时,lcd显示13151131111211221531334294967295;我查过stm32的int型是32位的,并当为负1,时寄存器储存为0XFFFFFFFF;但是我在程序调用angle值的时候,if((angle>=-150)&&(angle<=-177)),发现angle满足该条件的时候并不会执行if后的指令,所以我就不懂了,怎样调用负的angle值呢???adc和lcd程序都是实验配套程序;
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
2条回答
Theone
2019-07-21 07:49
if((angle>=-150)&&(angle<=-177))
这句话是(angle大于等于-150)并且(小于等于-177)的时候才会执行。这句话错了吧。
你是不是想说大于-150或小于-177   还是在这两个数之间?

你可以看一下LCD_ShowxNum的代码,这个函数的第三个参数是无符号的 也就是只能显示正数,负数都是用的补码形式,所以显示出来肯定就是那么大的正数了。
你可以加个判断如果小于0先取绝对值,然后先显示一个负号,后边再跟数字,如果是正数就直接显示数字。

一周热门 更多>