试图让我自己的 printf 函数来处理变量

Trying to get my own printf function to work with variables

我正在对显示器进行编程,我可以使用此功能在显示器上显示字符:

void printChar(char *tekst, uint16_t xPos, uint16_t yPos)
{
    //calculate the position the first byte should be placed on
    uint16_t startPos = yPos * width_disp_byte + (xPos/8);
    int i;

    //put all 16 bytes on the right place on the display based on the users' input
    for(i=0;i<16;i++)
    {
        test_image[startPos]=convertChar(*tekst,i);
        startPos += width_disp_byte;
    }
}

基本上我得到一个角色并在我构建的数组中找到它的位置。比起我取 16 个字节的数据并将其显示在屏幕上。

下一步是在显示器上显示整型变量。我写了一个看起来像这样的代码:

void printVariable(uint16_t integer, uint16_t xPos, uint16_t yPos)
{
    uint16_t value;
    uint16_t remainder;
    char printValue;

    //max value is 9999 that can be displayed, caused by the '4' in the for loop
    for(int i = 0; i < 4;i++)
    {
        value = integer;
        //int_power calculates the divisor. going from 3 to 0. cq 1000,100,10,1.
        value /= int_power(10,(3-i));

        //remove highest number from integer value (for 312, remove the 3 by substracting 300)
        integer -= (value) * (int_power(10,(3-i)));

        // add '0' to value to get the correct ASCII value.
        value += '0';

        // convert uint16_t value into char
        printValue = value;
        printChar(printValue,xPos,yPos);

        xPos += 8;
    }
}

我取一个变量,比方说 3164。第一步是将其除以 1000。答案将是 3,因为它是一个整数。我使用 printChar 函数显示这个字符。

下一步从 3164 中删除 3000,并将该值除以 100,得到 1。再次使用 printf 函数打印该值。然后从 164 中减去 100,然后除以 10,依此类推。

这段代码的用途非常有限,但它非常适合我想要实现的目标。无需在字符串中打印变量。

这里的问题是 printChar 函数不能像我在代码中写的那样工作。通常我会像这样使用 printChar 函数:

printChar("F",0,0);

这将在左上角打印字符 F。如果我想像这样使用 printChar 函数,它不起作用:

printChar(printValue,xPos,yPos);

警告消息说:

incompatible integer to pointer conversion passing 'char' to parameter of type 'char *'; take the address with &

如果我用 & 获取地址,我的显示器上显示的值不正确。

我该如何解决这个问题?

你只想打印一个字符,所以你不需要指针作为参数。您的函数将像这样工作:

void printChar(char tekst, uint16_t xPos, uint16_t yPos){
...
    //depending on the Parameters of your convertChar- function either
    ... = convertChar(tekst,i); // if you can modify this function too

    ... = convertChar(&tekst,i); // if the function is to use as it is

}

区别在于 char tekst 而不是 char * text