野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 11127|回复: 4

新人求助TFT屏显示汉字

[复制链接]
发表于 2016-5-6 13:29:21 | 显示全部楼层 |阅读模式
file:///C:\Documents and Settings\Administrator\Application Data\Tencent\Users\398924858\QQ\WinTemp\RichOle\ZFWFYL0PYVW$XMIMD39TZHH.png第一个可以显示汉字


但第二个显示不出来  是哪里的问题 研究半天了   新人刚入门  求助  谢谢 各位大神了

可以显示

可以显示

不可以显示

不可以显示
2.JPG
1.JPG
回复

使用道具 举报

发表于 2016-5-6 18:28:38 | 显示全部楼层
这要看你的gui show函数是怎样处理的了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-5-7 08:10:23 | 显示全部楼层
flyleaf 发表于 2016-5-6 18:28
这要看你的gui show函数是怎样处理的了

gui  是这样显示的
void GUI_Show12Char(uint16_t x, uint16_t y, uint8_t *ch,
                    uint16_t wordColor, uint16_t backColor)
{
    uint8_t i, j, color, buf[32];
    uint16_t asc;
    uint32_t wordAddr = 0;

    while(*ch != '\0')
    {
        /*ÏÔê¾×Öĸ */
        if(*ch < 0x80)  //ASCII&#194;&#235;′ó0~127
        {
            /* &#212;ú×&#214;&#191;a&#214;Dμ&#196;ASCII&#194;&#235;ê&#199;′ó&#191;&#213;&#184;&#241;&#191;aê&#188;μ&#196;ò2&#190;íê&#199;32&#191;aê&#188;μ&#196;£&#172;&#203;ùò&#212;&#188;&#245;è¥32 */
                    wordAddr = *ch - 32;
            wordAddr *= 16;
            wordAddr += GUI_FLASH_ASCII_ADDR;
            
            /* &#182;áè&#161;FLASH&#214;D&#184;&#195;×&#214;μ&#196;×&#214;&#196;£ */
            FLASH_ReadData(buf, wordAddr, 16);
            
            /* &#207;&#212;ê&#190;&#184;&#195;&#206;&#196;×&#214; */               
            TFT_SetWindow(x, y, x+7, y+15);           //×&#214;&#191;í*&#184;&#223;&#206;a£o8*16
                    for (j=0; j<16; j++) //&#195;&#191;&#184;&#246;×&#214;&#196;£ò&#187;12óD16&#184;&#246;×&#214;&#189;ú
                    {
                            color = buf[j];
                            for (i=0; i<8; i++)
                            {
                                    if ((color&0x80) == 0x80)
                                    {
                                            TFT_WriteData(wordColor);
                                    }                                                
                                    else
                                    {
                                            TFT_WriteData(backColor);
                                    }        
                                    color <<= 1;
                            }
                    }
   
                    ch++;    //&#214;&#184;&#213;&#235;&#214;&#184;&#207;ò&#207;&#194;ò&#187;&#184;&#246;×&#214;
                   
            /* &#198;á&#196;&#187;×&#248;±ê′|àí */
            x += 8;
            if(x > 233)   //TFT_XMAX -8
            {
                x = 0;
                y += 16;   
            }            
        }
        /* &#207;&#212;ê&#190;oo×&#214; */
        else
        {
            /* &#189;&#171;oo×&#214;±à&#194;&#235;×a&#187;&#187;3é&#212;úFLASH&#214;Dμ&#196;μ&#216;&#214;· */
            asc = *ch - 0x81;     //&#184;&#223;×&#214;&#189;úê&#199;±íê&#190;·&#214;&#199;&#248;£&#172;·&#214;&#199;&#248;ê&#199;′ó0x81μ&#189;0xFE,&#203;ùò&#212;×a&#187;&#187;3éμ&#216;&#214;·-0x80
            wordAddr = asc * 190; //&#195;&#191;&#184;&#246;·&#214;&#199;&#248;ò&#187;12óD190&#184;&#246;×&#214;
   
            asc = *(ch + 1); //μí×&#214;&#189;ú′ú±í&#195;&#191;&#184;&#246;×&#214;&#212;ú&#195;&#191;&#184;&#246;·&#214;&#199;&#248;μ&#196;&#206;&#187;&#214;&#195;£&#172;&#203;üê&#199;′ó0x40μ&#189;0xFF
            if(asc < 0x7F)   //&#212;ú0x7F&#206;&#187;&#214;&#195;óD&#184;&#246;&#191;&#213;&#206;&#187;£&#172;μ&#171;ê&#199;&#206;ò&#195;&#199;è&#161;&#196;£2&#187;á&#244;&#191;&#213;£&#172;&#203;ùò&#212;′óóú0x7F&#214;&#174;oó&#182;à&#188;&#245;ò&#187;
            {
                asc -= 0x40;
            }
            else
            {
                asc -= 0x41;
            }
            
            wordAddr += asc; //&#199;ó3&#246;&#212;úGBK&#214;Dê&#199;μú&#188;&#184;&#184;&#246;×&#214;
            wordAddr *= 32;  //&#189;&#171;×&#214;&#206;&#187;&#214;&#195;×a&#187;&#187;&#206;&#187;FLASHμ&#216;&#214;·
            wordAddr += GUI_FLASH_12CHAR_ADDR; //&#188;óé&#207;ê×μ&#216;&#214;·
   
            /* &#182;áè&#161;FLASH&#214;D&#184;&#195;×&#214;μ&#196;×&#214;&#196;£ */
            FLASH_ReadData(buf, wordAddr, 32);
   
            /* &#212;ú2ê&#198;áé&#207;&#195;&#230;&#207;&#212;ê&#190; */
            TFT_SetWindow(x, y, x+15, y+15);
            for(i=0; i<32; i++)
            {
                 
                color = buf;            
                for(j=0; j<8; j++)
                        {
                                if((color & 0x80) == 0x80)
                                {
                                        TFT_WriteData(wordColor);
                                }                                                
                                else
                                {
                                        TFT_WriteData(backColor);
                                }
                                color <<= 1;
                        }//for(j=0;j<8;j++)&#189;áê&#248;
            }
   
            /* &#198;á&#196;&#187;×&#248;±ê′|àí */
            x += 16;
            if(x > 225)   //TFT_XMAX -15
            {
                x = 0;
                y += 16;   
            }
   
            /* D′&#207;&#194;ò&#187;&#184;&#246;×&#214;£&#172;&#195;&#191;&#184;&#246;oo×&#214;&#213;&#188;á&#189;&#184;&#246;×&#214;&#189;ú&#203;ùò&#212;+2 */
            ch += 2;            
        }
    }   
}
回复 支持 反对

使用道具 举报

发表于 2016-5-7 09:01:06 | 显示全部楼层
你这函数根据 \0 判断结束,你的数组里每个字都是一个字符串,所以就这样了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-5-7 17:47:33 | 显示全部楼层
flyleaf 发表于 2016-5-7 09:01
你这函数根据 \0 判断结束,你的数组里每个字都是一个字符串,所以就这样了

每个汉字有两个字节加上结束符一共3个字节, 我定义的数组里面也是显示3个字节  这种对还是不对呢
或者那应该怎么来处理这个函数  谢谢了
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-27 07:40 , Processed in 0.034523 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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