野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 24527|回复: 4

有时间回答下吧

[复制链接]
发表于 2013-5-18 10:25:34 | 显示全部楼层 |阅读模式
在学LCD时,遇到的问题,资料里面自带的字模是16*16的,感觉字太小了,自己想改成大点的字体,
比如48*62的,字模通过字模软件生成了,可下面这两个函数,怎么改都显示不出啦,希望火哥帮忙改下下面两个函数,
使其能够实现比如48*62大小的字。
/********************************************************************
* 函数名:LCD_Char_CH
* 描述  :显示单个汉字字符
* 输入  :         x: 0~(319-16)
*                 y: 0~(239-16)
*                        str: 中文字符串首址
*                        Color: 字符颜色   
*                        bkColor: 背景颜色
* 输出  :无
* 举例  :        LCD_Char_CH(200,100,"好",0,0);
* 注意         :如果输入大于1的汉字字符串,显示将会截断,只显示最前面一个汉字
************************************************************************/   
void LCD_Char_CH(u16 x,u16 y,const u8 *str,u16 Color,u16 bkColor)
{

#ifndef NO_CHNISEST_DISPLAY         /*如果汉字显示功能没有关闭*/
    u8 i,j;
    u8 buffer[32];
    u16 tmp_char=0;


   GetGBKCode_from_sd(buffer,str);  /* 取字模数据 */

    for (i=0;i<16;i++)
    {
        tmp_char=buffer[i*2];
        tmp_char=(tmp_char<<8);
        tmp_char|=buffer[2*i+1];
        for (j=0;j<16;j++)
        {
            if ( (tmp_char >> 15-j) & 0x01 == 0x01)
            {
                LCD_ColorPoint(x+j,y+i,Color);
            }
            else
            {
                LCD_ColorPoint(x+j,y+i,bkColor);
            }
        }
    }

#endif
}
/*************************************************************************** * 函数名:LCD_Str_CH * 描述  :在指定坐标处显示16*16大小的指定颜色汉字字符串 * 输入  :         - x: 显示位置横向坐标          *                 - y: 显示位置纵向坐标  *                        - str: 显示的中文字符串 *                        - Color: 字符颜色    *                        - bkColor: 背景颜色 * 输出  :无 * 举例  :        LCD_Str_CH(0,0,"阿莫论坛野火专区",0,0xffff);                    LCD_Str_CH(50,100,"阿莫论坛野火专区",0,0xffff);                    LCD_Str_CH(320-16*8,240-16,"阿莫论坛野火专区",0,0xffff);                  * 注意  :        字符串显示方向为横向 已测试******************************************************************************/
void LCD_Str_CH(u16 x,u16 y,const u8 *str,u16 Color,u16 bkColor)  
{

    Set_direction(0);
    while(*str != '\0')
    {
                        if(x>(320-16))
                        {         
                                 /*换行*/
                                x =0;
                                y +=16;
                                       
                        }
                        if(y >(240-16))
                        {
                                 /*重新归零*/
                                 y =0;
                                 x =0;
                        }
             LCD_Char_CH(x,y,str,Color,bkColor);      
       str += 2 ;
       x += 16 ;        
    }
}







相关帖子


分享到:
收藏0

回复 编辑




linyeazhe


1
主题
0
好友
2
积分


火花20火币0精华0
沙发
发表于 3 天前 |只看该作者


对了,还有这个函数
int GetGBKCode_from_sd(unsigned char* pBuffer,const unsigned char * c)
{
    unsigned char High8bit,Low8bit;
    unsigned int pos;
    High8bit=*c;     /* 取高8位数据 */
    Low8bit=*(c+1);  /* 取低8位数据 */
   
    pos = ((High8bit-0xb0)*94+Low8bit-0xa1)*2*16 ;        
    f_mount(0, &myfs[0]);
    myres = f_open(&myfsrc , "0:/HZLIB.bin", FA_OPEN_EXISTING | FA_READ);
   
    if ( myres == FR_OK )
    {
        f_lseek (&myfsrc, pos);                                                                                                                 //指针偏移
        myres = f_read( &myfsrc, pBuffer, 32, &mybr );                 //16*16大小的汉字 其字模 占用16*2个字节
        
        f_close(&myfsrc);
        
        return 0;  
    }
   
    else
        return -1;   
}






回复

使用道具 举报

发表于 2013-5-18 10:38:06 | 显示全部楼层
后面会出一个大字体显示的例子。
回复 支持 反对

使用道具 举报

发表于 2013-5-18 10:46:06 | 显示全部楼层
这帖子,二楼歪了的
回复 支持 反对

使用道具 举报

发表于 2013-7-4 09:04:57 | 显示全部楼层
火神,大字体显示很有必要啊!出个吧?
回复 支持 反对

使用道具 举报

发表于 2013-7-4 09:21:53 | 显示全部楼层
不就是 生成字库嘛,然后刷图片

回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-25 06:00 , Processed in 0.065435 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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