OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 8031|回复: 2

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

[复制链接]

1

主题

1

帖子

0

精华

新手入门

积分
25
金钱
25
注册时间
2015-8-7
在线时间
0 小时
发表于 2015-8-7 11:10:01 | 显示全部楼层 |阅读模式
5金钱
[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#楼]

if((angle>=-150)&&(angle<=-177)) 这句话是(angle大于等于-150)并且(小于等于-177)的时候才会执行。这句话错了吧。 你是不是想说大于-150或小于-177   还是在这两个数之间? 你可以看一下LCD_ShowxNum的代码,这个函数的第三个参数是无符号的 也就是只能显示正数,负数都是用的补码形式,所以显示出来肯定就是那么大的正数了。 你可以加个判断如果小于0先取绝对值,然后先显示一个负号,后边再跟数字,如 ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

42

主题

358

帖子

0

精华

高级会员

Rank: 4

积分
890
金钱
890
注册时间
2014-8-16
在线时间
193 小时
发表于 2015-8-7 11:10:02 | 显示全部楼层
if((angle>=-150)&&(angle<=-177))
这句话是(angle大于等于-150)并且(小于等于-177)的时候才会执行。这句话错了吧。
你是不是想说大于-150或小于-177   还是在这两个数之间?

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

使用道具 举报

58

主题

6293

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11511
金钱
11511
注册时间
2014-4-1
在线时间
1306 小时
发表于 2015-8-7 18:00:41 | 显示全部楼层
负值就是一种协议而已。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-4-20 17:34

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表