完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
//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个回答
|
|
Vout_h 与Vout_l定义为char,数据类型长度不够,(Vout_h * 256 + Vout_l)结果必然小于256,256/1024=0
,所以结果为0,应把Vout_h 与Vout_l定义为unsigned int 或unsigned long, |
|
|
|
把
volt = (int) (Vout_h * 256 + Vout_l)/1024*5; 拆开来写: [C] 纯文本查看 复制代码 volt = Vout_h; volt <<= 8; volt |= Vout_l; volt >>= 0x0a; volt *= 5; |
|
|
|
一看就是没好好学习C语言
|
|
|
|
只有小组成员才能发言,加入小组>>
3284 浏览 9 评论
2960 浏览 16 评论
3464 浏览 1 评论
9008 浏览 16 评论
4054 浏览 18 评论
1126浏览 3评论
579浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
572浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2306浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1864浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-29 00:58 , Processed in 1.140368 second(s), Total 83, Slave 63 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号