试图让我自己的 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
我正在对显示器进行编程,我可以使用此功能在显示器上显示字符:
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