OpenEdv-开源电子网

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

帮忙看看代码,百思不得其解。

[复制链接]

4

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
57
金钱
57
注册时间
2014-10-5
在线时间
2 小时
发表于 2015-2-24 15:43:51 | 显示全部楼层 |阅读模式
5金钱
//stc15,我没有IAP片子,我用的是1602来显示变量的值,来实现简单调试。
unsigned char s[5];
unsigned char Vref_h=0;
unsigned char Vref_l=0;
int volt=0;
Vout_h=s[0];//s数组已经被赋值过了!
Vout_l=s[1];
lcd_write_char(0,1,0x30+Vout_h%1000/100);
lcd_write_char(1,1,0x30+Vout_h%100/10);
lcd_write_char(2,1,0x30+Vout_h%10);
lcd_write_char(3,1,0x30+Vout_l%1000/100);
lcd_write_char(4,1,0x30+Vout_l%100/10);
lcd_write_char(5,1,0x30+Vout_l%10);
//问题来了
//以上代码Vout_h和Vout_l的值能在1602能够正常显示(不管值是否正确,好歹有数值)
//问题就在下面volt的值始终就是0。不管变换类型和强制转换,都是0。
volt = (int) (Vout_h * 256 + Vout_l)/1024*5;
lcd_write_char(7,1,48+volt/10000);
lcd_write_char(8,1,48+volt%10000/1000);
lcd_write_char(9,1,48+volt%1000/100);
lcd_write_char(10,1,48+volt%100/10);
lcd_write_char(11,1,48+volt%10);
参考:我发现win7自带的计算器如果选择“程序员”模式计算上面的公式也会等于0, (Vout_h * 256 + Vout_l)如果小于1024的话就等于0,这种模式是部显示小数点的。
请熟练C语言的朋友给解释解释,到底应该怎么解决!!!

最佳答案

查看完整内容[请看2#楼]

Vout_h 与Vout_l定义为char,数据类型长度不够,(Vout_h * 256 + Vout_l)结果必然小于256,256/1024=0 ,所以结果为0,应把Vout_h 与Vout_l定义为unsigned int 或unsigned long,
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

30

主题

188

帖子

0

精华

高级会员

Rank: 4

积分
594
金钱
594
注册时间
2014-4-3
在线时间
74 小时
发表于 2015-2-24 15:43:52 | 显示全部楼层
Vout_h 与Vout_l定义为char,数据类型长度不够,(Vout_h * 256 + Vout_l)结果必然小于256,256/1024=0
,所以结果为0,应把Vout_h 与Vout_l定义为unsigned int 或unsigned long,
回复

使用道具 举报

2

主题

102

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
281
金钱
281
注册时间
2014-12-21
在线时间
0 小时
发表于 2015-2-24 17:33:18 | 显示全部楼层

volt = (int) (Vout_h * 256 + Vout_l)/1024*5;
拆开来写:
[mw_shl_code=c,true]volt = Vout_h; volt <<= 8; volt |= Vout_l; volt >>= 0x0a; volt *= 5;[/mw_shl_code]
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-23 08:24

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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