打印

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

[复制链接]
1454|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;

想要精度高就用浮点数

使用特权

评论回复
5
yuanquan12345|  楼主 | 2014-1-15 16:39 | 只看该作者
谢谢,大家。

使用特权

评论回复
6
yuanquan12345|  楼主 | 2014-1-15 16:44 | 只看该作者
其实我什么都不懂,只是靠大家的帮助,喜欢上了单片机。
谢谢。

使用特权

评论回复
7
wolension| | 2014-1-16 09:26 | 只看该作者
有点晕,这跟单片机没关系,应该是数学问题吧?
控制12864才是单片机干的事。

使用特权

评论回复
评论
限量_个性。 2014-1-17 16:24 回复TA
这是算法啊,当然和单片机有关系! 
评分
参与人数 1威望 +1 收起 理由
suzhwt + 1 赞一个!
8
peakerhear| | 2014-1-16 12:04 | 只看该作者
y=kx+b

使用特权

评论回复
9
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('%');

使用特权

评论回复
10
yuanquan12345|  楼主 | 2014-1-17 09:14 | 只看该作者
变量我定义的都是char型。

使用特权

评论回复
11
lurenyi33| | 2014-1-17 11:29 | 只看该作者
char的范围是-128~127,所以if(j>210)永远不会成立,至少要定义成unsigned char

使用特权

评论回复
12
yuanquan12345|  楼主 | 2014-1-17 14:11 | 只看该作者
我定义的就是unsigned char
怎么不显示了?

使用特权

评论回复
13
lurenyi33| | 2014-1-17 15:48 | 只看该作者
ad()是什么类型的?变量b又定义成什么类型?

使用特权

评论回复
14
南宫云明| | 2014-1-17 16:18 | 只看该作者
(j-40)*100/170

你先算(j-40)*100, j如果是210的话,(210-40)*100 = 17000,这个还是unsigned char吗?

使用特权

评论回复
15
南宫云明| | 2014-1-17 16:19 | 只看该作者
需要用到运算的那几个要定义成unsigned int类型的

使用特权

评论回复
16
yuanquan12345|  楼主 | 2014-1-17 21:34 | 只看该作者
ad()是什么类型的?变量b又定义成什么类型?
这些都是uchar类型。
谢谢大家,我明天试试。

使用特权

评论回复
17
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;
改成这样,怎么还不显示?

使用特权

评论回复
18
南宫云明| | 2014-1-19 09:54 | 只看该作者
现在代码上看不出什么问题,可能是其他问题了吧

使用特权

评论回复
19
yuanquan12345|  楼主 | 2014-2-14 22:19 | 只看该作者
问题已解决,还是变量定义,出问题了。
谢谢各位老师。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

75

主题

1155

帖子

3

粉丝