请问:怎样将数值(40~210)在12864上转换成百分比0~100%

[复制链接]
1941|18
 楼主| yuanquan12345 发表于 2014-1-15 15:37 | 显示全部楼层 |阅读模式
请大家指点,谢谢。
dongranmengming 发表于 2014-1-15 16:19 来自手机 | 显示全部楼层
数值减40后除170,你应该多想想
南宫云明 发表于 2014-1-15 16:21 | 显示全部楼层
a% = (x - 40)*10/17

x=40~210,

如果要纠结误差的话就算了。。。
ayb_ice 发表于 2014-1-15 16:27 | 显示全部楼层
r = (in - 40) * 100 / 170;

想要精度高就用浮点数
 楼主| yuanquan12345 发表于 2014-1-15 16:39 | 显示全部楼层
谢谢,大家。
 楼主| yuanquan12345 发表于 2014-1-15 16:44 | 显示全部楼层
其实我什么都不懂,只是靠大家的帮助,喜欢上了单片机。
谢谢。
wolension 发表于 2014-1-16 09:26 | 显示全部楼层
有点晕,这跟单片机没关系,应该是数学问题吧?
控制12864才是单片机干的事。

评论

这是算法啊,当然和单片机有关系!  发表于 2014-1-17 16:24

评分

参与人数 1威望 +1 收起 理由
suzhwt + 1 赞一个!

查看全部评分

peakerhear 发表于 2014-1-16 12:04 | 显示全部楼层
 楼主| yuanquan12345 发表于 2014-1-17 09:13 | 显示全部楼层
改成这样后,怎么在12864上只显示000%。不变化了。
                j=ad();                //将A/D的数据付给j
                if(j<40)
                        j=40;
                if(j>210)
                        j=210;
                da(j);
                b=(j-40)*100/170;
                a1=b/100;
                a2=b%100/10;
                a3=b%10;
                delay_1ms(5);
                write_dat(a1+0x30);
                lcd_pos(0,3);
                write_dat(a2+0x30);
                lcd_pos(0,4);
                write_dat(a3+0x30);
               
                lcd_pos(0,5);
                write_dat('%');
 楼主| yuanquan12345 发表于 2014-1-17 09:14 | 显示全部楼层
变量我定义的都是char型。
lurenyi33 发表于 2014-1-17 11:29 | 显示全部楼层
char的范围是-128~127,所以if(j>210)永远不会成立,至少要定义成unsigned char
 楼主| yuanquan12345 发表于 2014-1-17 14:11 | 显示全部楼层
我定义的就是unsigned char
怎么不显示了?
lurenyi33 发表于 2014-1-17 15:48 | 显示全部楼层
ad()是什么类型的?变量b又定义成什么类型?
南宫云明 发表于 2014-1-17 16:18 | 显示全部楼层
(j-40)*100/170

你先算(j-40)*100, j如果是210的话,(210-40)*100 = 17000,这个还是unsigned char吗?
南宫云明 发表于 2014-1-17 16:19 | 显示全部楼层
需要用到运算的那几个要定义成unsigned int类型的
 楼主| yuanquan12345 发表于 2014-1-17 21:34 | 显示全部楼层
ad()是什么类型的?变量b又定义成什么类型?
这些都是uchar类型。
谢谢大家,我明天试试。
 楼主| yuanquan12345 发表于 2014-1-19 09:42 | 显示全部楼层
今天测试了,将
        uchar i,j,a1,a2,a3,a4,a5;
        uint b;
        j=ad();                //将A/D的数据付给j
                if(j<40)
                        j=40;
                if(j>210)
                        j=210;
                da(j);
                b=(j-40)*100/170;
                delay_1ms(30);
                //b=(uchar)x;
                //da(j);
                //delay_1ms(30);
                a1=b/10000;
                a2=b%10000/1000;
                a3=b%1000/100;
                a4=b%100/10;
                a5=b%10;
改成这样,怎么还不显示?
南宫云明 发表于 2014-1-19 09:54 | 显示全部楼层
现在代码上看不出什么问题,可能是其他问题了吧
 楼主| yuanquan12345 发表于 2014-2-14 22:19 | 显示全部楼层
问题已解决,还是变量定义,出问题了。
谢谢各位老师。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

75

主题

1155

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部