我正在编程显示器,我可以使用此功能在显示器上显示字符:
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函数打印此值。然后将100从164中移除,然后除以10等等
此代码的使用非常有限,但它完全符合我想要实现的目标。无需在字符串中打印变量。
这里的问题是printChar函数不像我在代码中编写的那样工作。通常我会像这样使用printChar函数:
printChar("F",0,0);
这将在topleft角中打印字符F.如果我想使用这样的printChar函数,它不起作用:
printChar(printValue,xPos,yPos);
警告信息显示:
incompatible integer to pointer conversion passing 'char' to parameter of type 'char *'; take the address with &
如果我带的地址是&amp;我没有在显示屏上显示正确的值。
我该如何解决这个问题?
答案 0 :(得分:0)
您只想打印一个字符,因此您不需要指针作为参数。你的功能会像这样工作:
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