OpenEdv-开源电子网

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

STM32F103ZE 控制TFT-LCD 显示64*64或更大数字字体你们都怎么办的?

[复制链接]

1

主题

7

帖子

0

精华

新手上路

积分
39
金钱
39
注册时间
2018-7-16
在线时间
11 小时
发表于 2018-8-17 15:29:09 | 显示全部楼层 |阅读模式
1金钱
根据正点教程更改32*32 的可以显示 ,说一般不能超过32 字体 ,但在实际工作中有用到更大字体,如工业显示大号数字 字体  64*64 或128*128 等,使用图片吗?还是取模,过大放入片外FLASH,否则无法实现呢!!!

取模样式

取模样式
本人取模样式   ,想实现64*64的试试,只显示0到9 ,不过不能显示,有高手实现了的吗?以下为本人程序修改 ,原子哥教程修改的!
--------------------------------------------------------------------------------------------//FONTUPD.h------------------------------------------------------------------------
#ifndef __FONTUPD_H__
#define __FONTUPD_H__         
#include <stm32f10x.h>

//字体信息保存地址,占33个字节,第1个字节用于标记字库是否存在.后续每8个字节一组,分别保存起始地址和文件大小                                                                                                                  
extern u32 FONTINFOADDR;       
//字库信息结构体定义
//用来保存字库基本信息,地址,大小等
__packed typedef struct
{
        u8 fontok;                        //字库存在标志,0XAA,字库正常;其他,字库不存在

        u32 ugbkaddr;                 //unigbk的地址
        u32 ugbksize;                //unigbk的大小         
        u32 f64addr;                //gbk64地址        //---------------------------------------修改了
        u32 gbk64size;                //gbk64的大小        //---------------------------------------修改了
       
//u32 f12addr;                        //gbk12地址       
//u32 gbk12size;                       //gbk12的大小         

        u32 f16addr;                        //gbk16地址
        u32 gbk16size;                //gbk16的大小                 
       
        u32 f24addr;                        //gbk24地址
        u32 gkb24size;                //gbk24的大小        
}_font_info;


extern _font_info ftinfo;        //字库信息结构体

u32 fupd_prog(u16 x,u16 y,u8 size,u32 fsize,u32 pos);          //显示更新进度
u8 updata_fontx(u16 x,u16 y,u8 size,u8 *fxpath,u8 fx);        //更新指定字库
u8 update_font(u16 x,u16 y,u8 size,u8* src);                              //更新全部字库
u8 font_init(void);                                                                                //初始化字库
#endif

--------------------------------------------------------------------------------------------//FONTUPD.c------------------------------------------------------------------------
#define FONTSECSIZE         791//1340//791//1399   /*386*/        //791
//字库存放起始地址
#define FONTINFOADDR         1024*1024*12                                         //WarShip STM32F103 V3是从12M地址以后开始存放字库
                                                                                                                //前面12M被fatfs占用了.
                                                                                                                //12M以后紧跟3个字库+UNIGBK.BIN,总大小3.09M,被字库占用了,不能动!
                                                                                                                //15.10M以后,用户可以自由使用.建议用最后的100K字节比较好.
                                                                                                               
//用来保存字库基本信息,地址,大小等
_font_info ftinfo;

//字库存放在磁盘中的路径
#include "stm32f10x.h"                  // Device header
u8*const GBK24_PATH="/SYSTEM/FONT/GBK24.FON";                //GBK24的存放位置
u8*const GBK16_PATH="/SYSTEM/FONT/GBK16.FON";                //GBK16的存放位置
//u8*const GBK12_PATH="/SYSTEM/FONT/GBK12.FON";                //GBK12的存放位置
u8*const GBK64_PATH="/SYSTEM/FONT/GBK64.FON";                //GBK64的存放位置   //---------------------------------------修改了
u8*const UNIGBK_PATH="/SYSTEM/FONT/UNIGBK.BIN";                //UNIGBK.BIN的存放位置

//显示当前字体更新进度
//x,y:坐标
//size:字体大小
//fsize:整个文件大小
//pos:当前文件指针位置
u32 fupd_prog(u16 x,u16 y,u8 size,u32 fsize,u32 pos)
{
        float prog;
        u8 t=0XFF;
        prog=(float)pos/fsize;
        prog*=100;
        if(t!=prog)
        {
                LCD_ShowString(x+3*size/2,y,240,320,size,"%");               
                t=prog;
                if(t>100)t=100;
                LCD_ShowNum(x,y,t,3,size);//显示数值
        }
        return 0;                                            
}
//更新某一个
//x,y:坐标
//size:字体大小
//fxpath:路径
//fx:更新的内容 0,ungbk;1,gbk12;2,gbk16;3,gbk24;
//返回值:0,成功;其他,失败.
u8 updata_fontx(u16 x,u16 y,u8 size,u8 *fxpath,u8 fx)
{
        u32 flashaddr=0;                                                                    
        FIL * fftemp;
        u8 *tempbuf;
        u8 res;       
        u16 bread;
        u32 offx=0;
        u8 rval=0;             
        fftemp=(FIL*)mymalloc(SRAMIN,sizeof(FIL));        //分配内存       
        if(fftemp==NULL)rval=1;
        tempbuf=mymalloc(SRAMIN,4096);                                //分配4096个字节空间
        if(tempbuf==NULL)rval=1;
        res=f_open(fftemp,(const TCHAR*)fxpath,FA_READ);
        if(res)rval=2;//打开文件失败  
        if(rval==0)         
        {
                switch(fx)
                {
                        case 0:                                                                                                //更新UNIGBK.BIN
                                ftinfo.ugbkaddr=FONTINFOADDR+sizeof(ftinfo);        //信息头之后,紧跟UNIGBK转换码表
                                ftinfo.ugbksize=fftemp->fsize;                                        //UNIGBK大小
                                flashaddr=ftinfo.ugbkaddr;
                                break;

                                case 1:
                                ftinfo.f64addr=ftinfo.ugbkaddr+ftinfo.ugbksize;        //UNIGBK之后,紧跟GBK12字库
                                ftinfo.gbk64size=fftemp->fsize;                                        //GBK12字库大小
                                flashaddr=ftinfo.f64addr;                                                //GBK12的起始地址
                          break;
                        //                        case 1:
//                                ftinfo.f12addr=ftinfo.ugbkaddr+ftinfo.ugbksize;        //UNIGBK之后,紧跟GBK12字库
//                                ftinfo.gbk12size=fftemp->fsize;                                        //GBK12字库大小
//                                flashaddr=ftinfo.f12addr;                                                //GBK12的起始地址
//                                break;
                        case 2:
                                ftinfo.f16addr=ftinfo.f64addr+ftinfo.gbk64size;        //GBK12之后,紧跟GBK16字库
                                ftinfo.gbk16size=fftemp->fsize;                                        //GBK16字库大小
                                flashaddr=ftinfo.f16addr;                                                //GBK16的起始地址
                                break;
                        case 3:
                                ftinfo.f24addr=ftinfo.f16addr+ftinfo.gbk16size;        //GBK16之后,紧跟GBK24字库
                                ftinfo.gkb24size=fftemp->fsize;                                        //GBK24字库大小
                                flashaddr=ftinfo.f24addr;                                                //GBK24的起始地址
                                break;
                }
                       
                while(res==FR_OK)//死循环执行
                {
                         res=f_read(fftemp,tempbuf,4096,(UINT *)&bread);                //读取数据         
                        if(res!=FR_OK)break;                                                                //执行错误
                        W25QXX_Write(tempbuf,offx+flashaddr,4096);                //从0开始写入4096个数据  
                          offx+=bread;          
                        fupd_prog(x,y,size,fftemp->fsize,offx);                                 //进度显示
                        if(bread!=4096)break;                                                                //读完了.
                 }        
                f_close(fftemp);               
        }                         
        myfree(SRAMIN,fftemp);        //释放内存
        myfree(SRAMIN,tempbuf);        //释放内存
        return res;
}
//更新字体文件,UNIGBK,GBK12,GBK16,GBK24一起更新
//x,y:提示信息的显示地址
//size:字体大小
//src:字库来源磁盘."0:",SD卡;"1:",FLASH盘,"2:",U盘.
//提示信息字体大小                                                                                  
//返回值:0,更新成功;
//                 其他,错误代码.          
u8 update_font(u16 x,u16 y,u8 size,u8* src)
{       
        u8 *pname;
        u32 *buf;
        u8 res=0;                  
        u16 i,j;
        FIL *fftemp;
        u8 rval=0;
        res=0XFF;               
        ftinfo.fontok=0XFF;
        pname=mymalloc(SRAMIN,100);        //申请100字节内存  
        buf=mymalloc(SRAMIN,4096);        //申请4K字节内存  
        fftemp=(FIL*)mymalloc(SRAMIN,sizeof(FIL));        //分配内存       
        if(buf==NULL||pname==NULL||fftemp==NULL)
        {
                myfree(SRAMIN,fftemp);
                myfree(SRAMIN,pname);
                myfree(SRAMIN,buf);
                return 5;        //内存申请失败
        }
        //先查找文件是否正常
        strcpy((char*)pname,(char*)src);        //copy src内容到pname
        strcat((char*)pname,(char*)UNIGBK_PATH);
        res=f_open(fftemp,(const TCHAR*)pname,FA_READ);
        if(res)rval|=1<<4;//打开文件失败  
        strcpy((char*)pname,(char*)src);        //copy src内容到pname
        strcat((char*)pname,(char*)GBK64_PATH);  //----------------------------此处修改了
        res=f_open(fftemp,(const TCHAR*)pname,FA_READ);
        if(res)rval|=1<<5;//打开文件失败  
        strcpy((char*)pname,(char*)src);        //copy src内容到pname
        strcat((char*)pname,(char*)GBK16_PATH);
        res=f_open(fftemp,(const TCHAR*)pname,FA_READ);
        if(res)rval|=1<<6;//打开文件失败  
        strcpy((char*)pname,(char*)src);        //copy src内容到pname
        strcat((char*)pname,(char*)GBK24_PATH);
        res=f_open(fftemp,(const TCHAR*)pname,FA_READ);
        if(res)rval|=1<<7;//打开文件失败   
        myfree(SRAMIN,fftemp);//释放内存
        if(rval==0)//字库文件都存在.
        {  
                //LCD_ShowString(x,y,240,320,size,"Erasing sectors... ");//提示正在擦除扇区       
                for(i=0;i<FONTSECSIZE;i++)        //先擦除字库区域,提高写入速度
                {
        fupd_prog(x+20*size/2,y,size,FONTSECSIZE,i);//进度显示
                        W25QXX_Read((u8*)buf,((FONTINFOADDR/4096)+i)*4096,4096);//读出整个扇区的内容
                        for(j=0;j<1024;j++)//校验数据
                        {
                                if(buf[j]!=0XFFFFFFFF)break;//需要擦除            
                        }
                        if(j!=1024)W25QXX_Erase_Sector((FONTINFOADDR/4096)+i);        //需要擦除的扇区
                }
                myfree(SRAMIN,buf);
                //LCD_ShowString(x,y,240,320,size,"Updating UNIGBK.BIN");               
                strcpy((char*)pname,(char*)src);                                //copy src内容到pname
                strcat((char*)pname,(char*)UNIGBK_PATH);
                res=updata_fontx(x+20*size/2,y,size,pname,0);        //更新UNIGBK.BIN
                if(res){myfree(SRAMIN,pname);return 1;}
                LCD_ShowString(x,y,240,320,size,"Updating GBK64.BIN ");//---------------------------------------修改了
                strcpy((char*)pname,(char*)src);                                //copy src内容到pname
                strcat((char*)pname,(char*)GBK64_PATH);                  //---------------------------------------修改了
                res=updata_fontx(x+20*size/2,y,size,pname,1);        //更新GBK12.FON
                if(res){myfree(SRAMIN,pname);return 2;}
                LCD_ShowString(x,y,240,320,size,"Updating GBK16.BIN  ");
                strcpy((char*)pname,(char*)src);                                //copy src内容到pname
                strcat((char*)pname,(char*)GBK16_PATH);
                res=updata_fontx(x+20*size/2,y,size,pname,2);        //更新GBK16.FON
                if(res){myfree(SRAMIN,pname);return 3;}
                LCD_ShowString(x,y,240,320,size,"Updating GBK24.BIN  ");
                strcpy((char*)pname,(char*)src);                                //copy src内容到pname
                strcat((char*)pname,(char*)GBK24_PATH);
                res=updata_fontx(x+20*size/2,y,size,pname,3);        //更新GBK24.FON
                if(res){myfree(SRAMIN,pname);return 4;}/*yuan4*/
                //全部更新好了
                ftinfo.fontok=0XAA;
                W25QXX_Write((u8*)&ftinfo,FONTINFOADDR,sizeof(ftinfo));        //保存字库信息
        }
        myfree(SRAMIN,pname);//释放内存
        myfree(SRAMIN,buf);
        return rval;//无错误.                         
}
//初始化字体
//返回值:0,字库完好.
//                 其他,字库丢失
u8 font_init(void)
{               
        u8 t=0;
        W25QXX_Init();  
        while(t<10)//连续读取10次,都是错误,说明确实是有问题,得更新字库了
        {
                t++;
                W25QXX_Read((u8*)&ftinfo,FONTINFOADDR,sizeof(ftinfo));//读出ftinfo结构体数据
                if(ftinfo.fontok==0XAA)break;
                delay_ms(20);
        }
        if(ftinfo.fontok!=0XAA)return 1;
        return 0;                    
}

--------------------------------------------------------------------------------------------//text.c------------------------------------------------------------------------
#include "sys.h"
#include "fontupd.h"
#include "w25qxx.h"
#include "lcd.h"
#include "text.h"       
#include "string.h"                                                                                                    
#include "usart.h"                                                                                                    
//////////////////////////////////////////////////////////////////////////////////         
//本程序只供学习使用,未经作者许可,不得用于其它任何用途
//code 字符指针开始
//从字库中查找出字模
//code 字符串的开始地址,GBK码
//mat  数据存放地址 (size/8+((size%8)?1:0))*(size) bytes大小       
//size:字体大小
void Get_HzMat(unsigned char *code,unsigned char *mat,u8 size)
{                    
        unsigned char qh,ql;
        unsigned char i;                                          
        unsigned long foffset;
        u8 csize=(size/8+((size%8)?1:0))*(size);//得到字体一个字符对应点阵集所占的字节数         
        qh=*code;
        ql=*(++code);
        if(qh<0x81||ql<0x40||ql==0xff||qh==0xff)//非常用汉字
        {                       
            for(i=0;i<csize;i++)*mat++=0x00;//填充满格
            return; //结束访问
        }         
        if(ql<0x7f)ql-=0x40;//注意!
        else ql-=0x41;
        qh-=0x81;   
        foffset=((unsigned long)190*qh+ql)*csize;        //得到字库中的字节偏移量                    
        switch(size)
        {
                case 64:
                        W25QXX_Read(mat,foffset+ftinfo.f64addr,csize);//数据存储区、地址、字节数
                        break;

//                case 12:
//                        W25QXX_Read(mat,foffset+ftinfo.f12addr,csize);
//                        break;
                case 16:
                        W25QXX_Read(mat,foffset+ftinfo.f16addr,csize);
                        break;
                case 24:
                        W25QXX_Read(mat,foffset+ftinfo.f24addr,csize);
                        break;
                       
        }                                                                                                         
}  
//显示一个指定大小的汉字
//x,y :汉字的坐标
//font:汉字GBK码
//size:字体大小
//mode:0,正常显示,1,叠加显示          
void Show_Font(u16 x,u16 y,u8 *font,u8 size,u8 mode)
{
        u8 temp,t,t1;
        u16 y0=y;
        u8 dzk[256];   
        u8 csize=(size/8+((size%8)?1:0))*(size);//得到字体一个字符对应点阵集所占的字节数         
        if(size!=12&&size!=16&&size!=24&&size!=64)return;        //不支持的size
        Get_HzMat(font,dzk,size);        //得到相应大小的点阵数据
        for(t=0;t<csize;t++)
        {                                                                                                     
                temp=dzk[t];                        //得到点阵数据                          
                for(t1=0;t1<8;t1++)
                {
                        if(temp&0x80)LCD_Fast_DrawPoint(x,y,POINT_COLOR);
                        else if(mode==0)LCD_Fast_DrawPoint(x,y,BACK_COLOR);
                        temp<<=1;
                        y++;
                        if((y-y0)==size)
                        {
                                y=y0;
                                x++;
                                break;
                        }
                }           
        }  
}
//在指定位置开始显示一个字符串            
//支持自动换行
//(x,y):起始坐标
//width,height:区域
//str  :字符串
//size :字体大小
//mode:0,非叠加方式;1,叠加方式                                 
void Show_Str(u16 x,u16 y,u16 width,u16 height,u8*str,u8 size,u8 mode)
{                                       
        u16 x0=x;
        u16 y0=y;                                                                    
    u8 bHz=0;     //字符或者中文                                                                                              
    while(*str!=0)//数据未结束
    {
        if(!bHz)
        {
                if(*str>0x80)bHz=1;//中文
                else              //字符
                {      
                if(x>(x0+width-size/2))//换行
                                {                                  
                                        y+=size;
                                        x=x0;          
                                }                                                            
                        if(y>(y0+height-size))break;//越界返回      
                        if(*str==13)//换行符号
                        {         
                            y+=size;
                                        x=x0;
                            str++;
                        }  
                        else LCD_ShowChar(x,y,*str,size,mode);//有效部分写入
                                str++;
                        x+=size/2; //字符,为全字的一半
                }
        }else//中文
        {     
            bHz=0;//有汉字库   
            if(x>(x0+width-size))//换行
                        {            
                                y+=size;
                                x=x0;                  
                        }
                if(y>(y0+height-size))break;//越界返回                                                       
                Show_Font(x,y,str,size,mode); //显示这个汉字,空心显示
                str+=2;
                x+=size;//下一个汉字偏移            
        }                                                 
    }   
}                                            
//在指定宽度的中间显示字符串
//如果字符长度超过了len,则用Show_Str显示
//len:指定要显示的宽度                          
void Show_Str_Mid(u16 x,u16 y,u8*str,u8 size,u8 len)
{
        u16 strlenth=0;
           strlenth=strlen((const char*)str);
        strlenth*=size/2;
        if(strlenth>len)Show_Str(x,y,lcddev.width,lcddev.height,str,size,1);
        else
        {
                  strlenth=(len-strlenth)/2;
            Show_Str(strlenth+x,y,lcddev.width,lcddev.height,str,size,1);
        }
}   

--------------------------------------------------------------------------------------------//test.c------------------------------------------------------------------------
#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"                           
#include "lcd.h"  
#include "key.h"     
#include "usmart.h"
#include "sram.h"
#include "malloc.h"
#include "sdio_sdcard.h"  
#include "w25qxx.h"   
#include "ff.h"  
#include "exfuns.h"   
#include "text.h"         
//ALIENTEK战舰STM32开发板 实验40
//汉字显示 实验
//技术支持:www.openedv.com
//广州市星翼电子科技有限公司
int main(void)
{               
//        u32 fontcnt;                  
//        u8 i,j;
//        u8 fontx[2];//gbk码
        u8 key,t;
        Stm32_Clock_Init(9);                //系统时钟设置
        uart_init(72,115200);                //串口初始化为115200
        delay_init(72);                                    //延时初始化  
        usmart_dev.init(72);                //初始化USMART               
        LED_Init();                                            //初始化与LED连接的硬件接口
        KEY_Init();                                            //初始化按键
        LCD_Init();                                             //初始化LCD   
        W25QXX_Init();                                  //初始化W25Q128
        my_mem_init(SRAMIN);                //初始化内部内存池
        exfuns_init();                                  //为fatfs相关变量申请内存  
        f_mount(fs[0],"0:",1);         //挂载SD卡
        f_mount(fs[1],"1:",1);         //挂载FLASH.
        while(font_init())                         //检查字库
        {
UPD:   
                LCD_Clear(WHITE);                           //清屏
                POINT_COLOR=RED;                        //设置字体为红色                                
                LCD_ShowString(30,50,200,16,16,"WarShip STM32");
                while(SD_Init())                        //检测SD卡
                {
                        LCD_ShowString(30,70,200,16,16,"SD Card Failed!");
                        delay_ms(200);
                        LCD_Fill(30,70,200+30,70+16,WHITE);
                        delay_ms(200);                    
                }                                                                                                                     
                LCD_ShowString(30,70,200,16,16,"SD Card OK");
                LCD_ShowString(30,90,200,16,16,"Font Updating...");
                key=update_font(20,110,16,"0:");//更新字库
                while(key)//更新失败               
                {                                           
                        LCD_ShowString(30,110,200,16,16,"Font Update Failed!");
                        delay_ms(200);
                        LCD_Fill(20,110,200+20,110+16,WHITE);
                        delay_ms(200);                       
                }                   
                LCD_ShowString(30,110,200,16,16,"Font Update Success!   ");
                delay_ms(1500);       
                LCD_Clear(WHITE);//清屏               
        }  
        POINT_COLOR=RED;      
//        Show_Str(30,50,200,16,"战舰STM32F103开发板",16,0);                                             
//        Show_Str(30,70,200,16,"GBK字库测试程序",16,0);                                             
//        Show_Str(30,90,200,16,"正点原子@ALIENTEK",16,0);                                             
//        Show_Str(30,110,200,16,"2015年1月20日",16,0);
//        Show_Str(30,130,200,16,"按KEY0,更新字库",16,0);
//         POINT_COLOR=BLUE;  
//        Show_Str(30,150,200,16,"内码高字节:",16,0);                                             
//        Show_Str(30,170,200,16,"内码低字节:",16,0);                                             
//        Show_Str(30,190,200,16,"汉字计数器:",16,0);

//        Show_Str(30,220,200,24,"对应汉字为:",24,0);
//        Show_Str(30,244,200,16,"对应汉字(16*16)为:",16,0);                         
//        Show_Str(30,260,200,12,"对应汉字(12*12)为:",12,0);                         
        while(1)
        {
        //Show_Str(30,260,62,32,"0",32,1);          //想要显示的32*32字体       
       
Show_Str(30,50,200,16,"战舰STM32F103开发板",16,0);       
                       
       
               Show_Str(30,260,156,24,"这回能行吗",24,0);       
               Show_Str(30,190,156,24,"这回就可以了",24,0);       
               Show_Font(80,80,"中",24,0);
                Show_Font(80,112,"华",24,0);
                Show_Font(80,150,"0",64,0);    //想显示64号字体0的,不显示----------------------哭....
               

                                while(t--)//延时,同时扫描按键
                                {
                                        delay_ms(1);
                                        key=KEY_Scan(0);
                                        if(key==KEY0_PRES)goto UPD;
                                }
                                LED0=!LED0;
                        }   
                //}       
//        }
}




实验40 汉字显示实验2.rar

3.49 MB, 下载次数: 63

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

109

主题

5564

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
10576
金钱
10576
注册时间
2017-2-18
在线时间
1915 小时
发表于 2018-8-17 17:11:28 | 显示全部楼层
128*128汉字显示这种字库估计不能放在原子板SPI FLASH中了。占用的SPI FLASH 太大了 ,而且原子这边汉字例程用到了汉字显示例程,原例程12M字节后的空间给字库使用 。用其他字体的话要更改字库占用SPI FLASH大小
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2018-8-18 01:37:38 | 显示全部楼层
一般超过32*32的字体就会很大了。 但是如果你只需要几个汉字,可以考虑用PC2LCD2002这个软件。
回复

使用道具 举报

1

主题

7

帖子

0

精华

新手上路

积分
39
金钱
39
注册时间
2018-7-16
在线时间
11 小时
 楼主| 发表于 2018-8-18 10:37:58 | 显示全部楼层
peng1554 发表于 2018-8-17 17:11
128*128汉字显示这种字库估计不能放在原子板SPI FLASH中了。占用的SPI FLASH 太大了 ,而且原子这边汉字例 ...

我只做0-9几个大数字,用不了那么大
回复

使用道具 举报

1

主题

7

帖子

0

精华

新手上路

积分
39
金钱
39
注册时间
2018-7-16
在线时间
11 小时
 楼主| 发表于 2018-8-18 10:40:16 | 显示全部楼层
正点原子 发表于 2018-8-18 01:37
一般超过32*32的字体就会很大了。 但是如果你只需要几个汉字,可以考虑用PC2LCD2002这个软件。

嗯嗯 ,我再琢磨琢磨  ,生成的要这种格式吗?const unsigned int asc2_6464[95][36]={          }
回复

使用道具 举报

1

主题

7

帖子

0

精华

新手上路

积分
39
金钱
39
注册时间
2018-7-16
在线时间
11 小时
 楼主| 发表于 2018-8-21 10:19:22 | 显示全部楼层
我先试验在不加外部FLASH的情况下实现一个64*64 试试 成功了 ,给大家个参考 ,这个还研究很久。。。。。好笨啊!以下为程序
/*----------------------自定义64*64  0-9  阴码、顺向、逐列------------------------*/
const unsigned int GBK6464[10][256]={
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xFF,0x00,0x00,0x00,
0x00,0x00,0x07,0xFF,0xFF,0xF0,0x00,0x00,0x00,0x00,0x3F,0xFF,0xFF,0xFE,0x00,0x00,
0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x80,0x00,0x00,0x01,0xFF,0xFF,0xFF,0xFF,0xC0,0x00,
0x00,0x03,0xFF,0x80,0x00,0xFF,0xE0,0x00,0x00,0x07,0xF0,0x00,0x00,0x07,0xF0,0x00,
0x00,0x0F,0x80,0x00,0x00,0x00,0xF8,0x00,0x00,0x1E,0x00,0x00,0x00,0x00,0x3C,0x00,
0x00,0x1C,0x00,0x00,0x00,0x00,0x1C,0x00,0x00,0x38,0x00,0x00,0x00,0x00,0x0E,0x00,
0x00,0x30,0x00,0x00,0x00,0x00,0x06,0x00,0x00,0x30,0x00,0x00,0x00,0x00,0x06,0x00,
0x00,0x30,0x00,0x00,0x00,0x00,0x06,0x00,0x00,0x30,0x00,0x00,0x00,0x00,0x06,0x00,
0x00,0x38,0x00,0x00,0x00,0x00,0x0E,0x00,0x00,0x18,0x00,0x00,0x00,0x00,0x0C,0x00,
0x00,0x1C,0x00,0x00,0x00,0x00,0x3C,0x00,0x00,0x0F,0x00,0x00,0x00,0x00,0x78,0x00,
0x00,0x0F,0xE0,0x00,0x00,0x03,0xF0,0x00,0x00,0x07,0xFF,0x00,0x00,0x7F,0xE0,0x00,
0x00,0x01,0xFF,0xFF,0xFF,0xFF,0xC0,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x80,0x00,
0x00,0x00,0x3F,0xFF,0xFF,0xFE,0x00,0x00,0x00,0x00,0x07,0xFF,0xFF,0xF0,0x00,0x00,
0x00,0x00,0x00,0x7F,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,},/*"0",0*/

{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x0C,0x00,
0x00,0x03,0x00,0x00,0x00,0x00,0x0C,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x0C,0x00,
0x00,0x03,0x00,0x00,0x00,0x00,0x0C,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x0C,0x00,
0x00,0x03,0x00,0x00,0x00,0x00,0x1C,0x00,0x00,0x07,0x80,0x00,0x00,0x00,0x3C,0x00,
0x00,0x07,0xFF,0xFF,0xFF,0xFF,0xFC,0x00,0x00,0x0F,0xFF,0xFF,0xFF,0xFF,0xFC,0x00,
0x00,0x1F,0xFF,0xFF,0xFF,0xFF,0xFC,0x00,0x00,0x3F,0xFF,0xFF,0xFF,0xFF,0xFC,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,},/*"1",1*/

{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x00,
0x00,0x00,0x7F,0x00,0x00,0x00,0xFC,0x00,0x00,0x01,0xFF,0x80,0x00,0x01,0xFC,0x00,
0x00,0x03,0xFF,0x80,0x00,0x07,0xBC,0x00,0x00,0x07,0xFF,0x80,0x00,0x0F,0x3C,0x00,
0x00,0x0F,0x1F,0x80,0x00,0x1C,0x3C,0x00,0x00,0x0C,0x07,0x00,0x00,0x38,0x3C,0x00,
0x00,0x18,0x00,0x00,0x00,0x70,0x3C,0x00,0x00,0x18,0x00,0x00,0x00,0xE0,0x3C,0x00,
0x00,0x30,0x00,0x00,0x01,0xC0,0x3C,0x00,0x00,0x30,0x00,0x00,0x03,0x80,0x3C,0x00,
0x00,0x30,0x00,0x00,0x07,0x00,0x3C,0x00,0x00,0x30,0x00,0x00,0x1E,0x00,0x3C,0x00,
0x00,0x30,0x00,0x00,0x3C,0x00,0x3C,0x00,0x00,0x30,0x00,0x00,0x78,0x00,0x3C,0x00,
0x00,0x38,0x00,0x01,0xE0,0x00,0x3C,0x00,0x00,0x3C,0x00,0x03,0xC0,0x00,0x3C,0x00,
0x00,0x1E,0x00,0x0F,0x80,0x00,0x3C,0x00,0x00,0x1F,0x80,0x7F,0x00,0x00,0x3C,0x00,
0x00,0x0F,0xFF,0xFE,0x00,0x00,0x3C,0x00,0x00,0x0F,0xFF,0xFC,0x00,0x00,0x7C,0x00,
0x00,0x07,0xFF,0xF8,0x00,0x00,0xFC,0x00,0x00,0x01,0xFF,0xE0,0x00,0x01,0xFC,0x00,
0x00,0x00,0x7F,0x00,0x00,0x1F,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,},/*"2",2*/

{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x07,0x80,0x00,0x00,0x00,0xF8,0x00,0x00,0x0F,0xE0,0x00,
0x00,0x03,0xFC,0x00,0x00,0x1F,0xF0,0x00,0x00,0x07,0xFC,0x00,0x00,0x1F,0xF8,0x00,
0x00,0x0F,0xFC,0x00,0x00,0x1F,0xF8,0x00,0x00,0x1C,0x38,0x00,0x00,0x0F,0x1C,0x00,
0x00,0x18,0x00,0x00,0x00,0x00,0x0C,0x00,0x00,0x18,0x00,0x00,0x00,0x00,0x0E,0x00,
0x00,0x30,0x00,0x03,0x00,0x00,0x06,0x00,0x00,0x30,0x00,0x03,0x00,0x00,0x06,0x00,
0x00,0x30,0x00,0x03,0x00,0x00,0x06,0x00,0x00,0x30,0x00,0x03,0x00,0x00,0x06,0x00,
0x00,0x30,0x00,0x07,0x00,0x00,0x06,0x00,0x00,0x38,0x00,0x07,0x80,0x00,0x06,0x00,
0x00,0x3C,0x00,0x0F,0x80,0x00,0x0E,0x00,0x00,0x1E,0x00,0x1D,0xC0,0x00,0x0C,0x00,
0x00,0x1F,0x80,0x7D,0xE0,0x00,0x1C,0x00,0x00,0x0F,0xFF,0xF8,0xF0,0x00,0x7C,0x00,
0x00,0x07,0xFF,0xF0,0x7C,0x01,0xF8,0x00,0x00,0x03,0xFF,0xE0,0x7F,0xFF,0xF0,0x00,
0x00,0x01,0xFF,0xC0,0x3F,0xFF,0xE0,0x00,0x00,0x00,0x7F,0x00,0x1F,0xFF,0xC0,0x00,
0x00,0x00,0x00,0x00,0x07,0xFF,0x80,0x00,0x00,0x00,0x00,0x00,0x01,0xFC,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,},/*"3",3*/

{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x01,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x80,0x00,0x00,
0x00,0x00,0x00,0x00,0x0F,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x1D,0x80,0x00,0x00,
0x00,0x00,0x00,0x00,0x71,0x80,0x00,0x00,0x00,0x00,0x00,0x01,0xE1,0x80,0x00,0x00,
0x00,0x00,0x00,0x03,0x81,0x80,0x00,0x00,0x00,0x00,0x00,0x0F,0x01,0x80,0x00,0x00,
0x00,0x00,0x00,0x1C,0x01,0x80,0x00,0x00,0x00,0x00,0x00,0x70,0x01,0x80,0x00,0x00,
0x00,0x00,0x01,0xE0,0x01,0x80,0x0C,0x00,0x00,0x00,0x03,0x80,0x01,0x80,0x0C,0x00,
0x00,0x00,0x0F,0x00,0x01,0x80,0x0C,0x00,0x00,0x00,0x1C,0x00,0x01,0x80,0x0C,0x00,
0x00,0x00,0x78,0x00,0x01,0x80,0x0C,0x00,0x00,0x00,0xE0,0x00,0x01,0x80,0x0C,0x00,
0x00,0x03,0x80,0x00,0x01,0x80,0x1C,0x00,0x00,0x0F,0xFF,0xFF,0xFF,0xFF,0xFC,0x00,
0x00,0x1F,0xFF,0xFF,0xFF,0xFF,0xFC,0x00,0x00,0x1F,0xFF,0xFF,0xFF,0xFF,0xFC,0x00,
0x00,0x1F,0xFF,0xFF,0xFF,0xFF,0xFC,0x00,0x00,0x00,0x00,0x00,0x01,0x80,0x1C,0x00,
0x00,0x00,0x00,0x00,0x01,0x80,0x0C,0x00,0x00,0x00,0x00,0x00,0x01,0x80,0x0C,0x00,
0x00,0x00,0x00,0x00,0x01,0x80,0x0C,0x00,0x00,0x00,0x00,0x00,0x01,0x80,0x0C,0x00,
0x00,0x00,0x00,0x00,0x01,0x80,0x0C,0x00,0x00,0x00,0x00,0x00,0x01,0x80,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,},/*"4",4*/

{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x0F,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xC0,0x00,
0x00,0x00,0x01,0xFF,0xE0,0x3F,0xE0,0x00,0x00,0x1F,0xFF,0xFF,0xE0,0x3F,0xF0,0x00,
0x00,0x1F,0xFE,0x01,0xC0,0x3F,0xF8,0x00,0x00,0x1E,0x00,0x03,0x80,0x1E,0x1C,0x00,
0x00,0x1E,0x00,0x07,0x00,0x00,0x0C,0x00,0x00,0x1E,0x00,0x0E,0x00,0x00,0x0C,0x00,
0x00,0x1E,0x00,0x0E,0x00,0x00,0x06,0x00,0x00,0x1E,0x00,0x0C,0x00,0x00,0x06,0x00,
0x00,0x1E,0x00,0x1C,0x00,0x00,0x06,0x00,0x00,0x1E,0x00,0x1C,0x00,0x00,0x06,0x00,
0x00,0x1E,0x00,0x1C,0x00,0x00,0x06,0x00,0x00,0x1E,0x00,0x1C,0x00,0x00,0x06,0x00,
0x00,0x1E,0x00,0x1C,0x00,0x00,0x0E,0x00,0x00,0x1E,0x00,0x1E,0x00,0x00,0x0E,0x00,
0x00,0x1E,0x00,0x1F,0x00,0x00,0x1C,0x00,0x00,0x1E,0x00,0x0F,0x80,0x00,0x7C,0x00,
0x00,0x1E,0x00,0x0F,0xF0,0x03,0xF8,0x00,0x00,0x1E,0x00,0x07,0xFF,0xFF,0xF0,0x00,
0x00,0x1E,0x00,0x03,0xFF,0xFF,0xE0,0x00,0x00,0x1E,0x00,0x01,0xFF,0xFF,0xC0,0x00,
0x00,0x1C,0x00,0x00,0x7F,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xF8,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,},/*"5",5*/

{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xFF,0x80,0x00,0x00,
0x00,0x00,0x03,0xFF,0xFF,0xF8,0x00,0x00,0x00,0x00,0x0F,0xFF,0xFF,0xFF,0x00,0x00,
0x00,0x00,0x3F,0xFF,0xFF,0xFF,0xC0,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xE0,0x00,
0x00,0x01,0xFF,0x00,0xF0,0x1F,0xF0,0x00,0x00,0x03,0xE0,0x03,0xC0,0x03,0xF8,0x00,
0x00,0x07,0x80,0x07,0x00,0x00,0xF8,0x00,0x00,0x0E,0x00,0x0E,0x00,0x00,0x3C,0x00,
0x00,0x0C,0x00,0x1E,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00,0x1C,0x00,0x00,0x0E,0x00,
0x00,0x18,0x00,0x1C,0x00,0x00,0x0E,0x00,0x00,0x38,0x00,0x38,0x00,0x00,0x06,0x00,
0x00,0x30,0x00,0x38,0x00,0x00,0x06,0x00,0x00,0x30,0x00,0x38,0x00,0x00,0x06,0x00,
0x00,0x30,0x00,0x38,0x00,0x00,0x06,0x00,0x00,0x30,0x00,0x38,0x00,0x00,0x06,0x00,
0x00,0x30,0x00,0x3C,0x00,0x00,0x0C,0x00,0x00,0x38,0x00,0x1C,0x00,0x00,0x0C,0x00,
0x00,0x1F,0xC0,0x1E,0x00,0x00,0x18,0x00,0x00,0x1F,0xE0,0x1F,0x80,0x00,0x78,0x00,
0x00,0x0F,0xE0,0x0F,0xE0,0x03,0xF0,0x00,0x00,0x07,0xE0,0x07,0xFF,0xFF,0xE0,0x00,
0x00,0x03,0xC0,0x03,0xFF,0xFF,0xC0,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,
0x00,0x00,0x00,0x00,0x1F,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,},/*"6",6*/

{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xFC,0x00,0x00,0x00,0x00,0x00,
0x00,0x1F,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x80,0x00,0x00,0x00,0x00,0x00,
0x00,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x1E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x00,0x00,0x00,0x03,0xFC,0x00,
0x00,0x1E,0x00,0x00,0x00,0x7F,0xFE,0x00,0x00,0x1E,0x00,0x00,0x03,0xFF,0xFE,0x00,
0x00,0x1E,0x00,0x00,0x1F,0xFF,0xFE,0x00,0x00,0x1E,0x00,0x00,0x7F,0xFF,0xFE,0x00,
0x00,0x1E,0x00,0x01,0xFF,0xFF,0xFC,0x00,0x00,0x1E,0x00,0x07,0xF8,0x00,0x00,0x00,
0x00,0x1E,0x00,0x3F,0xC0,0x00,0x00,0x00,0x00,0x1E,0x00,0xFE,0x00,0x00,0x00,0x00,
0x00,0x1E,0x01,0xF0,0x00,0x00,0x00,0x00,0x00,0x1E,0x07,0x80,0x00,0x00,0x00,0x00,
0x00,0x1E,0x1E,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x78,0x00,0x00,0x00,0x00,0x00,
0x00,0x1F,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x80,0x00,0x00,0x00,0x00,0x00,
0x00,0x1E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,},/*"7",7*/

{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x00,0x00,
0x00,0x00,0x7F,0x00,0x03,0xFF,0x80,0x00,0x00,0x01,0xFF,0xC0,0x0F,0xFF,0xC0,0x00,
0x00,0x03,0xFF,0xE0,0x1F,0xFF,0xE0,0x00,0x00,0x07,0xFF,0xF0,0x3F,0x01,0xF0,0x00,
0x00,0x0F,0x83,0xF8,0x78,0x00,0x78,0x00,0x00,0x1E,0x00,0xFC,0xF0,0x00,0x38,0x00,
0x00,0x1C,0x00,0x7E,0xC0,0x00,0x1C,0x00,0x00,0x18,0x00,0x3F,0x80,0x00,0x0C,0x00,
0x00,0x38,0x00,0x1F,0x00,0x00,0x0E,0x00,0x00,0x30,0x00,0x1F,0x00,0x00,0x06,0x00,
0x00,0x30,0x00,0x0F,0x80,0x00,0x06,0x00,0x00,0x30,0x00,0x07,0x80,0x00,0x06,0x00,
0x00,0x30,0x00,0x07,0xC0,0x00,0x06,0x00,0x00,0x30,0x00,0x07,0xC0,0x00,0x06,0x00,
0x00,0x30,0x00,0x03,0xE0,0x00,0x06,0x00,0x00,0x38,0x00,0x03,0xF0,0x00,0x06,0x00,
0x00,0x18,0x00,0x07,0xF0,0x00,0x0C,0x00,0x00,0x1C,0x00,0x0E,0xF8,0x00,0x0C,0x00,
0x00,0x1E,0x00,0x1C,0xFC,0x00,0x1C,0x00,0x00,0x0F,0x80,0xF8,0x7F,0x00,0x38,0x00,
0x00,0x07,0xFF,0xF0,0x3F,0x80,0xF0,0x00,0x00,0x03,0xFF,0xE0,0x1F,0xFF,0xF0,0x00,
0x00,0x01,0xFF,0xC0,0x0F,0xFF,0xE0,0x00,0x00,0x00,0x7F,0x00,0x03,0xFF,0x80,0x00,
0x00,0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,},/*"8",8*/

{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xFC,0x00,0x00,0x00,0x00,
0x00,0x00,0x7F,0xFF,0x80,0x00,0x00,0x00,0x00,0x01,0xFF,0xFF,0xC0,0x01,0xE0,0x00,
0x00,0x03,0xFF,0xFF,0xE0,0x03,0xF8,0x00,0x00,0x07,0xE0,0x07,0xF0,0x03,0xF8,0x00,
0x00,0x0F,0x00,0x01,0xF8,0x03,0xFC,0x00,0x00,0x1E,0x00,0x00,0x78,0x01,0xFC,0x00,
0x00,0x1C,0x00,0x00,0x3C,0x00,0x0E,0x00,0x00,0x18,0x00,0x00,0x3C,0x00,0x06,0x00,
0x00,0x30,0x00,0x00,0x1C,0x00,0x06,0x00,0x00,0x30,0x00,0x00,0x1C,0x00,0x06,0x00,
0x00,0x30,0x00,0x00,0x1C,0x00,0x06,0x00,0x00,0x30,0x00,0x00,0x1C,0x00,0x06,0x00,
0x00,0x30,0x00,0x00,0x1C,0x00,0x0E,0x00,0x00,0x30,0x00,0x00,0x38,0x00,0x0C,0x00,
0x00,0x38,0x00,0x00,0x38,0x00,0x1C,0x00,0x00,0x18,0x00,0x00,0x70,0x00,0x38,0x00,
0x00,0x1C,0x00,0x00,0xF0,0x00,0xF8,0x00,0x00,0x1E,0x00,0x01,0xE0,0x03,0xF0,0x00,
0x00,0x0F,0x80,0x03,0xC0,0x1F,0xE0,0x00,0x00,0x07,0xF0,0x0F,0x07,0xFF,0xC0,0x00,
0x00,0x03,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x01,0xFF,0xFF,0xFF,0xFE,0x00,0x00,
0x00,0x00,0x7F,0xFF,0xFF,0xF0,0x00,0x00,0x00,0x00,0x1F,0xFF,0xFF,0xC0,0x00,0x00,
0x00,0x00,0x01,0xFF,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,},/*"9",9*/       
};
/*------------------------------------------------lcd.c---------------------------------------------*/
//在指定位置显示一个字符
//x,y:起始坐标
//num:要显示的字符:" "--->"~"
//size:字体大小 12/16/24
//mode:叠加方式(1)还是非叠加方式(0)
/*----------------------------自定义---------------------------------*/
void LCD_ShowChar1(u16 x,u16 y,u8 num,u8 size,u8 mode)
{                                                            
   u16 temp,t1/*t*/;u16 t;                                            ///原U8---------------------------------------------                                       
        u16 y0=y;//u8 num;//自定义
//        u8 csize;//=(size/8+((size%8)?1:0))*(size/2);                //得到字体一个字符对应点阵集所占的字节数         因为我定义的数组计算有256个所以去掉此函数
// num=3;//对应数组num 0-9 ,可自定义改变数值
        //        num=num-' ';//得到偏移后的值(ASCII字库是从空格开始取模,所以-' '就是对应字符的字库)自定义字库无偏移,去掉此行
        for(t=0;t<256;t++)//总共256个数据
        {   
                     if(size==12)temp=asc2_1206[num][t];         //调用1206字体
                else if(size==16)temp=asc2_1608[num][t];        //调用1608字体
                else if(size==24)temp=asc2_2412[num][t];        //调用2412字体
                else if(size==64)temp=GBK6464[num][t];          //调用64*64字体  /*----------------*************/64*64字体***********
                else return;                                                                //没有的字库
                for(t1=0;t1<8;t1++)//yuan 8
                {                            
                        if(temp&0x80)LCD_Fast_DrawPoint(x,y,POINT_COLOR);
                        else if(mode==0)LCD_Fast_DrawPoint(x,y,BACK_COLOR);
                        temp<<=1;
                        y++;
                        if(y>=lcddev.height)return;                //超区域了
                        if((y-y0)==size)
                        {
                                y=y0;
                                x++;
                                if(x>=lcddev.width)return;        //超区域了
                                break;
                        }
                }           
        }                                            
}   
/*--------------------------------main.c-------------------------------*/
        for(i=0;i<10;i++)
                {LCD_ShowChar1(150,150,i,64,0);delay_ms(100);}//主函数下只写了两行测试   可以显示0到9 变化 OK
/*下一步准备用外部FLASH做字库 ,甚至更大的 128*128 的 0-9数字     */

回复

使用道具 举报

37

主题

477

帖子

2

精华

金牌会员

Rank: 6Rank: 6

积分
2285
金钱
2285
注册时间
2017-8-24
在线时间
375 小时
发表于 2018-8-21 11:51:14 | 显示全部楼层
从SD卡读字库,再绘制点
天然懒,天然呆
能吃会睡,未来可期
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-11 20:14

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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