天嵌 ARM开发社区

 找回密码
 注册
查看: 5801|回复: 16

发几个裸机的lcd字符和汉字与数值的显示函数,很实用。

[复制链接]
xjt010 发表于 2010-3-2 22:52:34 | 显示全部楼层 |阅读模式
本帖最后由 xjt010 于 2010-3-2 23:05 编辑

发几个裸机的lcd显示函数,很实用。先把字库文件(Font_Libs.c)复制到\TQ2440_Test\src . 字库在配套光盘里的uCOS-II\S3C2440\source 里能找到.把下面的函数添加LCD_TFT.c.再调用就可以了.



extern unsigned char __CHS[];
extern unsigned char __VGA[];


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

       pZK = &__VGA[ch*16];
       for( i = 0 ; i < 16 ; i++ )
       {
              mask = 0x80;
              buf = pZK;
              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;
              }
       }
}

/**************************************************************
在LCD屏幕上指定坐标(x,y)点写汉字(QW)
**************************************************************/

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) - 161 )*94 + (QW & 0x00FF)- 161 )*32 ];
      
     //  pZK = &__CHS[0xB6a1];
       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;
              }                 
       }
}
///显示字符串
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;

   }
  }

}



///显示数值

void Lcd_PutNum(unsigned int x,unsigned int y,unsigned long fig,unsigned int c,unsigned int bk_c,unsigned int st)

//输出数值  最大位数unsigned long fig 决定。由注意溢出
{ unsigned  long  pow=1;       
  unsigned long  temp;
  unsigned char Putfig=0;

  
   temp=fig;
   while(temp!=0)
      {
        temp=temp/10;
        Putfig++;          
      }
   for(;Putfig>1;Putfig--)          //下面要%,Putfig不到零
   pow=pow*10;
   while(pow!=0)
      {
        Putfig=fig/pow;
         Lcd_PutHZ( x, y, ('0'+Putfig) , c, bk_c, st);
        fig=fig%pow;
        pow=pow/10;
        x +=10;
      }

}
xiao_menghan 发表于 2010-3-15 16:02:05 | 显示全部楼层
找这些代码找了好久了,谢了
xiao_menghan 发表于 2010-3-18 16:58:17 | 显示全部楼层
楼主代码中写ASII码的部分有一句buf = pZK;应该是buf = pZK[i];吧:lol
非常小强娴 发表于 2010-3-31 20:32:42 | 显示全部楼层
好帖子 一定要顶的
cwd502 发表于 2010-3-31 21:43:02 | 显示全部楼层
unsigned int c,unsigned int bk_c,unsigned int st  这三个参数代表什么????不懂!@!
markwwx 发表于 2010-4-3 00:15:53 | 显示全部楼层
好贴,顶一下。unsigned int c 应该是字体颜色,unsigned int bk_c 应该是字体显示区域的背景颜色,unsigned int st决定是否要用bk_c填充字体显示区域没有用来显示字体的像素吧。
1060604020 发表于 2010-8-4 14:44:51 | 显示全部楼层
收藏学习了哈!!!!!
wuyangang 发表于 2010-8-31 17:23:59 | 显示全部楼层
自已再研究一下吧
pengweihe 发表于 2010-12-6 11:22:12 | 显示全部楼层
kankan自已再研究一下吧
天嵌_support1 发表于 2010-12-6 11:52:48 | 显示全部楼层
:)
yanpeihua 发表于 2010-12-21 21:20:36 | 显示全部楼层
:):):):):):):):):):)
cexowginui 发表于 2011-2-13 10:41:15 | 显示全部楼层
:):):):):):):):):):):):):):):):):):)
wang5620079 发表于 2011-3-7 19:34:18 | 显示全部楼层
非常感谢,学习了!
liuxin07zdhld 发表于 2011-8-27 16:41:14 | 显示全部楼层
一定要红绿灯住
translucent 发表于 2014-1-13 10:20:19 | 显示全部楼层
你好,请问以下两个数组的作用,它们是在哪里定义的呢,里面的内容又是什么,不懂,请指教,谢谢
extern unsigned char __CHS[];
extern unsigned char __VGA[];
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

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

GMT+8, 2024-4-27 21:17 , Processed in 1.062500 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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