LCD_ShowString(x,y,lcddev.width,24,24,(u8*)MenuPoint[J].DisStr)无法显示(u8*)MenuPoint[J].DisStr而只能用“ ”中间填字符串
时间: 2024-04-19 08:29:26 浏览: 7
您好!对于您提到的问题,如果您无法在LCD上显示`(u8*)MenuPoint[J].DisStr`的内容,而只能使用空格填充字符串,可能有以下几种情况导致:
1. 字符编码问题:请确保`(u8*)MenuPoint[J].DisStr`的内容是以正确的字符编码方式存储的,常见的字符编码方式包括UTF-8、GB2312等。如果编码方式不匹配,可能会导致LCD无法正确显示字符串。
2. 字符串长度问题:请确保`(u8*)MenuPoint[J].DisStr`的字符串长度不超过LCD屏幕的宽度。如果字符串长度超过了LCD屏幕的宽度,LCD可能无法完整显示字符串。
3. LCD驱动设置问题:请检查LCD驱动程序的设置,确保在调用`LCD_ShowString`函数之前,已经正确初始化了LCD设备,并且设置了正确的显示参数,如显示起始位置、字体大小等。
如果以上解决方法无效,建议您提供更多关于您的LCD设备、驱动程序和具体代码的信息,以便我们更好地帮助您解决问题。
相关问题
LCD_ShowString(x,y,lcddev.width,24,24,(u8*)MenuPoint[j].DisStr);
你的代码段是用于在LCD显示屏上显示字符串。根据代码,它使用了一个叫做`LCD_ShowString`的函数,并传入了一些参数来指定字符串的位置、大小和内容。
`x`和`y`是字符串在LCD上的起始坐标位置。
`lcddev.width`是LCD显示屏的宽度。
`24`是要显示的字符串的字体大小。
`(u8*)MenuPoint[j].DisStr`是要显示的字符串内容。
通过调用这个函数,LCD显示屏上将会显示指定位置、指定大小的指定字符串内容。
void display(struct MenuItem * MenuPoint,short Line) { int j; uint16_t x =30; uint16_t y =30; LCD_Fill(0, y+Line*24-24,lcddev.width,y+Line*24,BLUE); for (j=0;j<MenuPoint->MenuCout;j++) { // LCD_ShowString(x,y,lcddev.width,24,24,(u8*)MenuPoint[j].DisStr); // LCD_ShowString(x,y,lcddev.width,24,24,"MenuPoint[j].DisStr"); LCD_ShowMenuItem(x,y,lcddev.width,24,24,(char*)MenuPoint[j].DisStr); y+=24; } } button_value=get_button_value(); if(button_value!=(u16)0) printf("button value=0x%3x\r\n",button_value); delay_ms(100); //150ms检测一次,防止连续读取重复值(人按下按钮会持续一段时间才松开)。 key = get_k(button_value); if(key!=0) { switch(key) { case 1: //上 { if (Line==1) { Line =MenuPoint->MenuCout;//如果第一行的话则转到最底下那行 printf("success!"); } else { printf("fail"); Line--; } }; break; LCD_Clear(WHITE); printf("clear\r\n"); delay_ms(1000); display(MenuPoint,Line); printf("%d\r\n",Line); delay_ms(1000); printf("display\r\n"); } 中display函数无法显示
根据你提供的代码,我看到你调用了`LCD_ShowMenuItem`函数来显示菜单项,但是你注释掉了这行代码,所以导致无法显示菜单项。
你可以尝试取消注释这行代码,即将注释符号`//`去掉,这样就可以正常显示菜单项了。修改后的代码如下所示:
```c
void display(struct MenuItem * MenuPoint, short Line)
{
int j;
uint16_t x = 30;
uint16_t y = 30;
LCD_Fill(0, y + Line * 24 - 24, lcddev.width, y + Line * 24, BLUE);
for (j = 0; j < MenuPoint->MenuCout; j++)
{
LCD_ShowMenuItem(x, y, lcddev.width, 24, 24, (char *)MenuPoint[j].DisStr);
y += 24;
}
}
```
另外,你在`switch`语句中有一段代码似乎放错位置了,应该将它放在`case 1`的`break`语句之前,如下所示:
```c
switch (key)
{
case 1: //上
{
if (Line == 1)
{
Line = MenuPoint->MenuCout; //如果第一行的话则转到最底下那行
printf("success!");
}
else
{
printf("fail");
Line--;
}
LCD_Clear(WHITE);
printf("clear\r\n");
delay_ms(1000);
display(MenuPoint, Line);
printf("%d\r\n", Line);
delay_ms(1000);
printf("display\r\n");
};
break;
}
```
这样修改后,你应该可以正常显示菜单项了。如果还有其他问题,请随时提问。