单片机学习小组
直播中

费晨

7年用户 159经验值
私信 关注

volt的值始终就是0

//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语言的朋友给解释解释,到底应该怎么解决!!!

回帖(3)

李海必

2019-7-9 10:30:30
Vout_h 与Vout_l定义为char,数据类型长度不够,(Vout_h * 256 + Vout_l)结果必然小于256,256/1024=0
,所以结果为0,应把Vout_h 与Vout_l定义为unsigned int 或unsigned long,
举报

李玉英

2019-7-9 10:47:43

volt = (int) (Vout_h * 256 + Vout_l)/1024*5;
拆开来写:
[C] 纯文本查看 复制代码
volt = Vout_h; volt <<= 8; volt |= Vout_l; volt >>= 0x0a; volt *= 5;
举报

阿信509

2019-7-9 15:57:35
一看就是没好好学习C语言
举报

更多回帖

发帖
×
20
完善资料,
赚取积分