小弟,菜鸟一枚,今天在做LCD显示实验的时候,自己写了一个汉字显示函数,编译正确,下载到战舰STM32开发板上时,出了问题,汉字只能显示一次,不能一直显示。但是,字符串可以一直显示。下面请高手帮我分析一下,是什么原因?
//汉字显示函数
//,XY为起始坐标,HZ为中文字符的字模数组
void LCD_ShowHZ(u16 x, u16 y, u8 *HZ)
{
u8 i = 0, j = 0;
u16 y0=y;
u16 tempcolor ;
for (j = 0; j < 16; j++) //列
{
for (i = 0; i < 8; i++) // 列的前8行
{
if(*HZ & 0x80)
{
LCD_DrawPoint(x,y);
}
else
{
tempcolor=POINT_COLOR;
  OINT_COLOR=BACK_COLOR;
LCD_DrawPoint(x,y);
  OINT_COLOR=tempcolor;
}
*HZ <<= 1;
y++;
}
HZ++; //对下一个字模数组元素进行操作
for (i = 0; i < 8; i++) // 列的后8行
{
if(*HZ & 0x80)
{
LCD_DrawPoint(x,y);
}
else
{
tempcolor=POINT_COLOR;
  OINT_COLOR=BACK_COLOR;
LCD_DrawPoint(x,y);
  OINT_COLOR=tempcolor;
}
*HZ <<= 1;
y++;
if((y-y0)== 16)
{
y=y0;
x++;
break;
}
}
HZ++;
}
}
// “字” 的取模数组
u8 zi[32]={0x08,0x40,0x30,0x40,0x20,0x40,0x24,0x40,
0x24,0x40,0x24,0x42,0xA4,0x41,0x64,0xFE,
0x25,0x40,0x26,0x40,0x24,0x40,0x20,0x40,
0x20,0x40,0x28,0x40,0x30,0x40,0x00,0x00}; ////16X16------“字”
主函数
int main(void)
{
u8 x=0;
u8 lcd_id[12]; //存放LCD ID字符串
SystemInit(); //系统初始化
delay_init(72); //延时初始化
LED_Init(); //初始化与LED连接的硬件接口
LCD_Init();
  OINT_COLOR=RED;
sprintf((char*)lcd_id,"LCD ID:%04X",lcddev.id); //将LCD ID打印到LCD_id数组中
while(1)
{
switch(x)
{
case 0 CD_Clear(WHITE);break;
case 1 CD_Clear(BLACK);break;
case 2 CD_Clear(BLUE);break;
case 3 CD_Clear(RED);break;
case 4 CD_Clear(MAGENTA);break;
case 5 CD_Clear(GREEN);break;
case 6 CD_Clear(CYAN);break;
case 7 CD_Clear(YELLOW);break;
case 8 CD_Clear(BRRED);break;
case 9 CD_Clear(GRAY);break;
case 10:LCD_Clear(LGRAY);break;
case 11:LCD_Clear(BROWN);break;
}
  OINT_COLOR=RED;
LCD_ShowString(30,50,200,16,16,"WarShip STM32");
LCD_ShowString(30,70,200,16,16,"TFTLCD TEST");
LCD_ShowString(30,90,200,16,16,"ATOM@ALIENTEK");
LCD_ShowString(30,110,200,16,16,lcd_id); //显示LCD ID
LCD_ShowString(30,130,200,16,16,"2014/2/18");
LCD_ShowHZ(30, 170, zi) ;
x++;
if(x==12)x=0;
LED0=!LED0;
delay_ms(1000);
}
}
|