OpenEdv-开源电子网

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

求助TFT屏幕显示数字不正确

[复制链接]

11

主题

92

帖子

0

精华

初级会员

Rank: 2

积分
131
金钱
131
注册时间
2016-3-27
在线时间
83 小时
发表于 2016-9-6 09:46:44 | 显示全部楼层 |阅读模式
1金钱
我单纯的给一个浮点型的变量,然后按ADC例子里改了一个显示多位小数的函数,结果显示出来的数字跟我给的数字竟然不一样。。请教下问题出在哪,代码如下[mw_shl_code=c,true]         float m;
         int k;
extern float Unit_Price;
         Unit_Price = 12.53;

                LCD_Show_Font(30,70,9);
                LCD_Show_Font(65,70,10);
                LCD_Show_Font(102,70,8);
                LCD_ShowString(120,70,200,40,40,"000.00");
                LCD_Show_Font(240,70,11);
                LCD_ShowString(275,70,200,24,24,"/KG");

       
                m = Unit_Price;
                k = m;
                LCD_ShowxNum(120,70,k,3,40,0);
          m -= k;
                m *= 1000;
                LCD_ShowxNum(200,70,m,2,40,0X80);[/mw_shl_code]


我自己取膜取了一个40*40的ASCII码的字库
[mw_shl_code=c,true]void LCD_ShowxNum(u16 x,u16 y,u32 num,u8 len,u8 size,u8 mode)
{  
        u8 t,temp;
        u8 enshow=0;                                                  
        for(t=0;t<len;t++)
        {
                temp=(num/LCD_Pow(10,len-t-1))%10;
                if(enshow==0&&t<(len-1))
                {
                        if(temp==0)
                        {
                                if(mode&0X80)LCD_ShowChar(x+(size/2)*t,y,'0',size,mode&0X01);  
                                else LCD_ShowChar(x+(size/2)*t,y,' ',size,mode&0X01);  
                                continue;
                        }else enshow=1;
                          
                }
                 LCD_ShowChar(x+(size/2)*t,y,temp+'0',size,mode&0X01);
        }
} [/mw_shl_code]

这是显示数字的函数


[mw_shl_code=c,true]void LCD_ShowChar(u16 x,u16 y,u8 num,u8 size,u8 mode)
{                                                            
    u8 temp,t1,t;
        u16 y0=y;
        u8 csize=(size/8+((size%8)?1:0))*(size/2);
        num=num-' ';
        for(t=0;t<csize;t++)
        {   
                if(size==12)temp=asc2_1206[num][t];
                else if(size==16)temp=asc2_1608[num][t];
                else if(size==24)temp=asc2_2412[num][t];
                else if(size==40)temp=asc2_4040[num][t];
                else return;
                for(t1=0;t1<8;t1++)
                {                            
                        if(temp&0x80)LCD_Fast_DrawPoint(x,y,POINT_COLOR);
                        else if(mode==0)LCD_Fast_DrawPoint(x,y,BACK_COLOR);
                        temp<<=1;
                        y++;
                        if(y>=lcddev.height)return;
                        if((y-y0)==size)
                        {
                                y=y0;
                                x++;
                                if(x>=lcddev.width)return;
                                break;
                        }
                }           
        }                                            
}   [/mw_shl_code]

showchar函数,我只加了一句选择我的那个字库

我也试过用例程里的字库,显示也是错的,比如说我现在写的变量是12.53,显示出来的就是12.29,一头雾水啊。。

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

7

主题

41

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
244
金钱
244
注册时间
2016-7-12
在线时间
38 小时
发表于 2016-9-6 09:55:49 | 显示全部楼层
回复

使用道具 举报

11

主题

92

帖子

0

精华

初级会员

Rank: 2

积分
131
金钱
131
注册时间
2016-3-27
在线时间
83 小时
 楼主| 发表于 2016-9-6 10:05:51 | 显示全部楼层
串口打印数据看了一下,整数部分是对的,小数部分m=529.998779.。。。显示为29.。。
回复

使用道具 举报

11

主题

92

帖子

0

精华

初级会员

Rank: 2

积分
131
金钱
131
注册时间
2016-3-27
在线时间
83 小时
 楼主| 发表于 2016-9-6 10:13:50 | 显示全部楼层
cccsssc 发表于 2016-9-6 09:55
转换关系有问题!

哪一部分?减去整数乘1000那部分?应该怎么弄
回复

使用道具 举报

11

主题

92

帖子

0

精华

初级会员

Rank: 2

积分
131
金钱
131
注册时间
2016-3-27
在线时间
83 小时
 楼主| 发表于 2016-9-6 10:44:40 | 显示全部楼层
将float型的定义改为double型,计算正确,串口打印数据正确,但是小数显示依然不正确,12.53显示为12.52
回复

使用道具 举报

11

主题

92

帖子

0

精华

初级会员

Rank: 2

积分
131
金钱
131
注册时间
2016-3-27
在线时间
83 小时
 楼主| 发表于 2016-9-6 11:32:37 | 显示全部楼层
显示一直差一位数字,这个显示函数的问题吗?
回复

使用道具 举报

11

主题

92

帖子

0

精华

初级会员

Rank: 2

积分
131
金钱
131
注册时间
2016-3-27
在线时间
83 小时
 楼主| 发表于 2016-9-7 09:39:20 | 显示全部楼层
原因找到了,两个floa型变量互相赋值,值就已经改变了
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-25 21:07

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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