首页 > 解决方案 > 为TFT绘图计算固定点中元素的位置

问题描述

我目前正在为一个小型 uC 项目编写 UI。在计算垂直线的位置时遇到了一些麻烦。这个想法是将红线沿 x 轴移向矩形的末端。

使用无限旋转编码器递增的值,范围为 0 到 800,增量为 1。矩形的左侧是 x 轴的起点,x = 0。范围 0 - 800 表示 0 - Q13.3 定点表示法中的 100.00,数据类型为 uint16_t。

该矩形目前为 300 像素宽,我对此很灵活,但不应小于 240 像素。线宽 1 像素。

问题是,由于性能限制,我只能使用定点数学,根本不应该访问浮点单元。

在此处输入图像描述

我目前正在做的是有一个计数器随着编码器的每次点击而增加。某事 喜欢:

        if(direction) counter++;        //Running forwards
        if(!direction) counter--;       //Running backwards
        if((counter % 8 ) == 0){
            if(direction) line.x += 3;
            if(!direction) line.x -= 3;
        }

这不是最佳的,因为间距是 3 像素。

理想情况下,如果浮点计算是一个选项,我只需将计数器增加 0.375

感谢有关此问题的任何建议。

干杯

标签: cmicrocontrollerfixed-point

解决方案


在非常小的错误上,您需要做一些技巧:

uint8_t result;
static uint8_t counter1 = 0, counter2 = 0;

void handleEncoderTickUp(void)
{   
    if(++counter1 == 2) {result++; counter1 = 0;}
    if(++counter2 == 3) {result +=2; counter2 = 0;}
}

非常类似于倒计时


推荐阅读