OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3618|回复: 2

关于单个汉字显示的问题。

[复制链接]

2

主题

4

帖子

0

精华

新手入门

积分
48
金钱
48
注册时间
2015-6-25
在线时间
10 小时
发表于 2015-6-25 19:10:50 | 显示全部楼层 |阅读模式
5金钱
小弟,菜鸟一枚,今天在做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 0CD_Clear(WHITE);break;
         case 1CD_Clear(BLACK);break;
         case 2CD_Clear(BLUE);break;
         case 3CD_Clear(RED);break;
         case 4CD_Clear(MAGENTA);break;
         case 5CD_Clear(GREEN);break;
         case 6CD_Clear(CYAN);break;

         case 7CD_Clear(YELLOW);break;
         case 8CD_Clear(BRRED);break;
         case 9CD_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);   
   } 
}

最佳答案

查看完整内容[请看2#楼]

这种问题,十分适合仿真,跟踪代码,来解决。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-6-25 19:10:51 | 显示全部楼层
这种问题,十分适合仿真,跟踪代码,来解决。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

2

主题

4

帖子

0

精华

新手入门

积分
48
金钱
48
注册时间
2015-6-25
在线时间
10 小时
 楼主| 发表于 2015-7-12 15:09:51 | 显示全部楼层
问题已经解决,因为字模数组内容变了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-20 05:43

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表