天嵌 ARM开发社区

 找回密码
 注册
查看: 4941|回复: 9

问下LCD显示字符的问题。

[复制链接]
xjt010 发表于 2009-12-2 23:23:55 | 显示全部楼层 |阅读模式
在uc/os2 里面的lcd函数,我把其中的Lcd_PutHZ( )移到TQ2440_Test的main了面,头文件也加了,在LCD屏幕上指定坐标点写ASCII码Lcd_PutASCII()  可以显示字母,
可用Lcd_PutHZ( )  就显示 乱符 .搞不懂unsigned short int QW, 高手有空解答下.

/**************************************************************
在LCD屏幕上指定坐标点写汉字
**************************************************************/
void Lcd_PutHZ(unsigned int x,unsigned int y,unsigned short int QW,unsigned int c,unsigned int bk_c,unsigned int st)
{
       unsigned short int i,j;
       unsigned char *pZK,mask,buf;

       pZK = &__CHS[ (  ( (QW >> 8) - 1 )*94 + (QW & 0x00FF)- 1 )*32 ];
       for( i = 0 ; i < 16 ; i++ )
       {
              //左
              mask = 0x80;
              buf = pZK[i*2];
              for( j = 0 ; j < 8 ; j++ )
              {
                     if( buf & mask )
                     {
                            PutPixel(x+j,y+i,c);
                     }
                     else
                     {
                            if( !st )
                            {
                                   PutPixel(x+j,y+i,bk_c);
                            }
                     }
                     mask = mask >> 1;
              }
        
              //右
              mask = 0x80;
              buf = pZK[i*2 + 1];
              for( j = 0 ; j < 8 ; j++ )
              {
                     if( buf & mask )
                     {
                            PutPixel(x+j + 8,y+i,c);
                     }
                     else
                     {
                            if( !st )
                            {
                                   PutPixel(x+j + 8,y+i,bk_c);
                            }
                     }
                     mask = mask >> 1;
              }                 
       }
}
 楼主| xjt010 发表于 2009-12-3 22:27:56 | 显示全部楼层
本帖最后由 xjt010 于 2009-12-3 22:34 编辑

研究了好久,终于把问题解决了。是程序里面的公式错了。根据汉字字库计算公式:机内码高位=区码+A0H 机内码低位=位码+A0H
汉字库结构:GB2312规定字库分为94个区,每区94个汉字;1-9区为图形字符,10-15区没有使用,16区以后为汉字。
“啊”字的区位码1601(16区第1个)内码是B0A1。
字库(HZK16)中汉字的点阵第一个字节在字库文件中的偏移(长整型)=((机内码/256-161)*94+机内码%256-161)*32
通过偏移算出在字库中地址,就可以依次取出点阵数据.

在配套光盘上的H:\TQ2440_CD\uCOS-II\S3C2440\source\lcd.c里面的公式是错误的(    pZK = &__CHS[ (  ( (QW >> 8) - 1 )*94 + (QW & 0x00FF)- 1 )*32 ];)

没做过uc/os2 不知是不是那边特定的,直接移到TQ2440_Test是错误的。

之后我编了个显示字符串的函数 , 有兴趣的朋友看下,经调试能正常显示中文字符串。


void PrintfS(unsigned int x,unsigned int y,char* str,unsigned int c,unsigned int bk_c,unsigned int st)

{
  while(*str)
  {
   if(*str>0xa0)
   {
    Lcd_PutHZ(x,y,*(str+1)+*(str)*256,c,bk_c,st);
    str +=2;
    x +=16;
   }
   else
   {
     Lcd_PutASCII(x,y,*str, c,bk_c, st);
     str++;
     x +=8;

   }
  }

}


Lcd_PutHZ()   Lcd_PutASCII()在TQ2440_CD\uCOS-II\S3C2440\source\lcd.c里面
回复

使用道具 举报

susicguns 发表于 2009-12-9 15:05:59 | 显示全部楼层
請問一下~我也嘗試移植lcd顯示,可是我找不到extern unsigned char __CHS[];
這是在哪個file定義的??
回复

使用道具 举报

 楼主| xjt010 发表于 2009-12-9 21:36:44 | 显示全部楼层
2# xjt010
extern unsigned char __CHS[];
char __CHS[]是字库,在光盘里的x:\TQ2440_CD\uCOS-II\S3C2440\source\Font_Libs.c里,把Font_Libs.c 加入工程
回复

使用道具 举报

susicguns 发表于 2009-12-9 23:46:31 | 显示全部楼层
已找到了~還有個問題想請教一下,我怎麼使用
void PrintfS(unsigned int x,unsigned int y,char* str,unsigned int c,unsigned int bk_c,unsigned int st)
這函式
如果我想在LCD上秀幾個字,要怎寫~
回复

使用道具 举报

 楼主| xjt010 发表于 2009-12-12 12:07:17 | 显示全部楼层
本帖最后由 xjt010 于 2009-12-12 12:08 编辑

5# susicguns

用 PrintfS(0,0,"字符串",11,11,0) 就可以了。
,"字符串", 中的“ ”  好像是单引号:)
回复

使用道具 举报

susicguns 发表于 2009-12-12 13:30:50 | 显示全部楼层
可以了~真是感謝
回复

使用道具 举报

susicguns 发表于 2009-12-12 14:04:26 | 显示全部楼层
能否在請教一下~
我如果想由PrintfS(0,0,"字符串",11,11,0)
字符串改成變數(如%d),不知道要怎改
回复

使用道具 举报

huajiji 发表于 2010-2-2 19:40:20 | 显示全部楼层
本帖最后由 huajiji 于 2010-2-2 19:41 编辑

今天我也做了LCD显示字符的实验,我直接用ucos里的字库可以正常显示。
但是我是直接烧程序进去才可以,用AXD调试,英文,中文都是乱码……
回复

使用道具 举报

亚瑟王 发表于 2010-2-3 18:40:55 | 显示全部楼层
检测一下你输入到源码中的中文和英文的编码是否正确。
回复

使用道具 举报

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

本版积分规则

关闭

i.MX8系列ARM cortex A53 M4 工控板上一条 /1 下一条

Archiver|手机版|小黑屋|天嵌 嵌入式开发社区 ( 粤ICP备11094220号-2 )

GMT+8, 2025-6-19 21:07 , Processed in 2.038949 second(s), 20 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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