[应用相关]

(转)驱动字库芯片GT23L24M0140

[复制链接]
1448|20
手机看帖
扫描二维码
随时随地手机跟帖
wowu|  楼主 | 2018-7-28 11:07 | 显示全部楼层 |阅读模式
本文博客链接:http://blog.csdn.net/jdh99,作者:jdh


环境:
主机:WIN8
开发环境:MDK5.13
mcu: stm32f407VGIGH6
字库芯片:GT23L24M0140

说明:
GT23L24M0140是一款支持GB18030标准的字库芯片,有多种大小的字体可供选择。
本文驱动了其中常用的字体。

源代码:
drv_font.h



  • /*********************************************************************



  • *                                                  字库芯片驱动层头文件



  • *                                                (c)copyright 2013,jdh



  • *                                                  All Right Reserved



  • *新建日期:2015/2/2 by jdh



  • *修改日期:2015/2/3 by jdh



  • **********************************************************************/



  • /*********************************************************************



  • 硬件连接说明



  • 电路标号                        单片机引脚                        特殊功能



  • SPI1_NSS                 PA4                                        SPI1_NSS     



  • SPI1_MISO                        PA6                                        SPI1_MISO



  • SPI1_MOSI                        PA7                                        SPI1_MOSI



  • SPI1_SCK                        PA5                                        SPI1_SCK



  • **********************************************************************/







  • #ifndef _DRV_FONT_H_



  • #define _DRV_FONT_H_







  • /*********************************************************************



  • *                                                        头文件



  • **********************************************************************/







  • #include "stm32f4xx.h"







  • /*********************************************************************



  • *                                                        函数



  • **********************************************************************/







  • /*********************************************************************



  • *                                                        初始化字库芯片



  • **********************************************************************/







  • void drv_font_init(void);







  • /*********************************************************************



  • *                                                        打开SPI使能



  • **********************************************************************/







  • void drv_font_enable(void);







  • /*********************************************************************



  • *                                                        关闭SPI使能



  • **********************************************************************/







  • void drv_font_disable(void);







  • /*********************************************************************



  • *                                                        spi发送一个字节



  • *参数:dat:数据



  • *返回:spi接收到的字节



  • **********************************************************************/







  • uint8_t drv_font_send_byte(uint8_t dat);







  • #endif














drv_font.c



  • /*********************************************************************



  • *                                                  字库芯片驱动层文件



  • *                                                (c)copyright 2015,jdh



  • *                                                  All Right Reserved



  • *新建日期:2015/2/2 by jdh



  • *修改日期:2015/2/3 by jdh



  • **********************************************************************/







  • /*********************************************************************



  • *                                                        头文件



  • **********************************************************************/







  • #include "drv_font.h"







  • /*********************************************************************



  • *                                                        静态函数



  • **********************************************************************/







  • /*********************************************************************



  • *                                                        初始化spi



  • **********************************************************************/







  • static void init_spi(void);







  • /*********************************************************************



  • *                                                        函数



  • **********************************************************************/







  • /*********************************************************************



  • *                                                        初始化字库芯片



  • **********************************************************************/







  • void drv_font_init(void)



  • {



  •         //初始化spi



  •         init_spi();



  • }







  • /*********************************************************************



  • *                                                        打开SPI使能



  • **********************************************************************/







  • void drv_font_enable(void)



  • {



  •         GPIO_ResetBits(GPIOA, GPIO_Pin_4);



  • }







  • /*********************************************************************



  • *                                                        关闭SPI使能



  • **********************************************************************/







  • void drv_font_disable(void)



  • {



  •         GPIO_SetBits(GPIOA, GPIO_Pin_4);



  • }







  • /*********************************************************************



  • *                                                        spi发送一个字节



  • *参数:dat:数据



  • *返回:spi接收到的字节



  • **********************************************************************/







  • uint8_t drv_font_send_byte(uint8_t dat)



  • {



  •         while ((SPI1->SR & SPI_I2S_FLAG_TXE) == (uint16_t)RESET);



  •         SPI1->DR = dat;



  •         while ((SPI1->SR & SPI_I2S_FLAG_RXNE) == (uint16_t)RESET);



  •         return (SPI1->DR);               



  • }







  • /*********************************************************************



  • *                                                        初始化spi



  • **********************************************************************/







  • static void init_spi(void)



  • {



  •         //定义IO初始化结构体



  •         GPIO_InitTypeDef GPIO_InitStructure ;



  •         //定义SPI初始化结构体



  •         SPI_InitTypeDef  SPI_InitStructure ;







  •         //配置CS



  •         //初始化时钟



  •     RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);



  •         GPIO_PinAFConfig(GPIOA,GPIO_PinSource4,GPIO_AF_SPI1);



  •     //管脚模式:输出口



  •     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;       



  •     //类型:推挽模式



  •         GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;       



  •     //上拉下拉设置



  •         GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;       



  •     //IO口速度



  •         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;



  •     //管脚指定



  •         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;



  •     //初始化



  •         GPIO_Init(GPIOA, &GPIO_InitStructure);



  •         //关闭使能



  •         drv_font_disable();







  •         //初始化SPI



  •         //关闭SPI



  •         SPI_Cmd(SPI1,DISABLE);



  •         //初始化SPI时钟       



  •         RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1,ENABLE);



  •         //设置IO口时钟      



  •         RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);



  •         GPIO_PinAFConfig(GPIOA,GPIO_PinSource5,GPIO_AF_SPI1);  



  •         GPIO_PinAFConfig(GPIOA,GPIO_PinSource6,GPIO_AF_SPI1);



  •         GPIO_PinAFConfig(GPIOA,GPIO_PinSource7,GPIO_AF_SPI1);







  •     //管脚模式:输出口



  •     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;       



  •     //类型:推挽模式



  •         GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;       



  •     //上拉下拉设置



  •         GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;       



  •         //IO口速度



  •         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;



  •     //管脚指定



  •         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;



  •     //初始化



  •         GPIO_Init(GPIOA, &GPIO_InitStructure);







  •         // SPI配置



  •         SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex ;



  •         SPI_InitStructure.SPI_Mode = SPI_Mode_Master ;



  •         SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b ;



  •         SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low ;



  •         SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge ;



  •         SPI_InitStructure.SPI_NSS = SPI_NSS_Soft ;



  •         //SPI波特率分频设置



  •         SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_16 ;



  •         //SPI设置成LSB模式



  •         SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB ;



  •         SPI_InitStructure.SPI_CRCPolynomial = 7 ;



  •         SPI_Init( SPI1, &SPI_InitStructure ) ;







  •         //启动SPI



  •         SPI_Cmd(SPI1,ENABLE);




wowu|  楼主 | 2018-7-28 11:07 | 显示全部楼层

inf_font.h




  • /*********************************************************************



  • *                                                 字库芯片接口层头文件



  • *                                                (c)copyright 2015,jdh



  • *                                                  All Right Reserved



  • *新建日期:2015/2/3 by jdh



  • *修改日期:2015/2/5 by jdh



  • *修改日期:2015/2/6 by jdh



  • **********************************************************************/







  • #ifndef _INF_FONT_H_



  • #define _INF_FONT_H_







  • /*********************************************************************



  • *                                                        头文件



  • **********************************************************************/







  • #include "drv_font.h"







  • /*********************************************************************



  • *                                                        宏定义



  • **********************************************************************/







  • /*********************************************************************



  • *                                                        字体定义



  • **********************************************************************/







  • /*********************************************************************



  • *                                                        7*8点阵ASCII标准字符



  • **********************************************************************/







  • //字体



  • #define ASCII_7X8                                        1



  • //起始地址



  • #define ASCII_7X8_ADDR_BASE                        0x080300



  • //宽,位数



  • #define ASCII_7X8_WIDTH                                8



  • //高,位数



  • #define ASCII_7X8_HEIGHT                        8



  • //字节数



  • #define ASCII_7X8_SIZE                                8







  • /*********************************************************************



  • *                                                        7*8点阵ASCII粗体字符



  • **********************************************************************/







  • //字体



  • #define ASCII_BOLD_7X8                                2



  • //起始地址



  • #define ASCII_BOLD_7X8_ADDR_BASE        0x080600



  • //宽,位数



  • #define ASCII_BOLD_7X8_WIDTH                8



  • //高,位数



  • #define ASCII_BOLD_7X8_HEIGHT                8



  • //字节数



  • #define ASCII_BOLD_7X8_SIZE                        8







  • /*********************************************************************



  • *                                                        6*12点阵ASCII标准字符



  • **********************************************************************/







  • //字体



  • #define ASCII_6X12                                        3



  • //起始地址



  • #define ASCII_6X12_ADDR_BASE                0x080900



  • //宽,位数



  • #define ASCII_6X12_WIDTH                        8



  • //高,位数



  • #define ASCII_6X12_HEIGHT                        12



  • //字节数



  • #define ASCII_6X12_SIZE                                12







  • /*********************************************************************



  • *                                                        8*16点阵ASCII标准字符



  • **********************************************************************/







  • //字体



  • #define ASCII_8X16                                        4



  • //起始地址



  • #define ASCII_8X16_ADDR_BASE                0x080D80



  • //宽,位数



  • #define ASCII_8X16_WIDTH                        8



  • //高,位数



  • #define ASCII_8X16_HEIGHT                        16



  • //字节数



  • #define ASCII_8X16_SIZE                                16







  • /*********************************************************************



  • *                                                        8*16点阵ASCII粗体字符



  • **********************************************************************/







  • //字体



  • #define ASCII_BOLD_8X16                                5



  • //起始地址



  • #define ASCII_BOLD_8X16_ADDR_BASE        0x081580



  • //宽,位数



  • #define ASCII_BOLD_8X16_WIDTH                8



  • //高,位数



  • #define ASCII_BOLD_8X16_HEIGHT                16



  • //字节数



  • #define ASCII_BOLD_8X16_SIZE                16







  • /*********************************************************************



  • *                                                        12*24点阵ASCII标准字符



  • **********************************************************************/







  • //字体



  • #define ASCII_12X24                                        6



  • //起始地址



  • #define ASCII_12X24_ADDR_BASE                0x081B80



  • //宽,位数



  • #define ASCII_12X24_WIDTH                        12



  • //高,位数



  • #define ASCII_12X24_HEIGHT                        24



  • //字节数



  • #define ASCII_12X24_SIZE                        48







  • /*********************************************************************



  • *                                                        16*32点阵ASCII标准字符



  • **********************************************************************/







  • //字体



  • #define ASCII_16X32                                        7



  • //起始地址



  • #define ASCII_16X32_ADDR_BASE                0x082D80



  • //宽,位数



  • #define ASCII_16X32_WIDTH                        16



  • //高,位数



  • #define ASCII_16X32_HEIGHT                        32



  • //字节数



  • #define ASCII_16X32_SIZE                        64







  • /*********************************************************************



  • *                                                        16*32点阵ASCII粗体字符



  • **********************************************************************/







  • //字体



  • #define ASCII_BOLD_16X32                        8



  • //起始地址



  • #define ASCII_BOLD_16X32_ADDR_BASE        0x084580



  • //宽,位数



  • #define ASCII_BOLD_16X32_WIDTH                16



  • //高,位数



  • #define ASCII_BOLD_16X32_HEIGHT                32



  • //字节数



  • #define ASCII_BOLD_16X32_SIZE                64







  • /*********************************************************************



  • *                                                        12*12点阵GB18030汉字



  • **********************************************************************/







  • //字体



  • #define GB18030_12X12                                9



  • //起始地址



  • #define GB18030_12X12_ADDR_BASE                0x093D0E



  • //宽,位数



  • #define GB18030_12X12_WIDTH                        12



  • //高,位数



  • #define GB18030_12X12_HEIGHT                12



  • //字节数



  • #define GB18030_12X12_SIZE                        24







  • /*********************************************************************



  • *                                                        16*16点阵GB18030汉字



  • **********************************************************************/







  • //字体



  • #define GB18030_16X16                                10



  • //起始地址



  • #define GB18030_16X16_ADDR_BASE                0x114FDE



  • //宽,位数



  • #define GB18030_16X16_WIDTH                        16



  • //高,位数



  • #define GB18030_16X16_HEIGHT                16



  • //字节数



  • #define GB18030_16X16_SIZE                        32







  • /*********************************************************************



  • *                                                        24*24点阵GB18030汉字



  • **********************************************************************/







  • //字体



  • #define GB18030_24X24                                11



  • //起始地址



  • #define GB18030_24X24_ADDR_BASE                0x1F43DE



  • //宽,位数



  • #define GB18030_24X24_WIDTH                        24



  • //高,位数



  • #define GB18030_24X24_HEIGHT                24



  • //字节数



  • #define GB18030_24X24_SIZE                        72







  • /*********************************************************************



  • *                                                        数据结构



  • **********************************************************************/







  • /*********************************************************************



  • *                                                        字体结构



  • **********************************************************************/







  • struct _Font_Type



  • {



  •         uint8_t type;



  •         uint32_t addr_base;



  •         uint8_t width;



  •         uint8_t height;



  •         uint8_t size;



  • };







  • /*********************************************************************



  • *                                                        函数



  • **********************************************************************/







  • /*********************************************************************



  • *                                                        初始化字库芯片



  • **********************************************************************/







  • void inf_font_init(void);







  • /*********************************************************************



  • *                                                        读取字库



  • *参数:font:字体



  • *     ch:待读取的字符



  • *     buf:读取的数据



  • *返回:读取数据的字节数



  • **********************************************************************/







  • uint8_t inf_font_read(uint8_t font,uint16_t ch,uint8_t *buf);







  • /*********************************************************************



  • *                                                        将ASCII码转换成GB18030编码



  • *说明:在emwin中调用中文字库,如果其中有ascii码,则必须先调用此函数转换



  • *参数:dst:输入字符串



  • *     src:输出字符串



  • **********************************************************************/







  • void inf_font_asc2gb18030(char *dst,char *src);







  • #endif








使用特权

评论回复
wowu|  楼主 | 2018-7-28 11:08 | 显示全部楼层

inf_font.c




  • /*********************************************************************



  • *                                                  字库芯片接口层文件



  • *                                                (c)copyright 2015,jdh



  • *                                                  All Right Reserved



  • *新建日期:2015/2/3 by jdh



  • *修改日期:2015/2/5 by jdh



  • *修改日期:2015/2/6 by jdh



  • **********************************************************************/







  • /*********************************************************************



  • *                                                        头文件



  • **********************************************************************/







  • #include "inf_font.h"



  • #include "string.h"







  • /*********************************************************************



  • *                                                        宏定义



  • **********************************************************************/







  • /*********************************************************************



  • *                                                        字体数量



  • **********************************************************************/







  • #define FONT_NUM                                        5







  • /*********************************************************************



  • *                                                        静态变量



  • **********************************************************************/







  • /*********************************************************************



  • *                                                        字体结构



  • **********************************************************************/







  • static struct _Font_Type Font_Type[FONT_NUM];







  • /*********************************************************************



  • *                                                        静态函数



  • **********************************************************************/







  • /*********************************************************************



  • *                                                        初始化字体类型



  • **********************************************************************/







  • static void init_font_type(void);







  • /*********************************************************************



  • *                                                        得到地址



  • *参数:font:字体



  • *     ch:待读取的字符



  • *返回:地址



  • **********************************************************************/







  • static uint32_t get_address(uint8_t font,uint16_t ch);







  • /*********************************************************************



  • *                                                        得到字体地址



  • *参数:ch1:字符编码第1个字节



  • *     ch2:字符编码第2个字节



  • *     ch3:字符编码第3个字节



  • *     ch4:字符编码第4个字节



  • *返回:地址



  • **********************************************************************/







  • static uint32_t get_address_GB18030_12X12(uint8_t c1,uint8_t c2,uint8_t c3,uint8_t c4);







  • /*********************************************************************



  • *                                                        得到字体地址



  • *参数:ch1:字符编码第1个字节



  • *     ch2:字符编码第2个字节



  • *     ch3:字符编码第3个字节



  • *     ch4:字符编码第4个字节



  • *返回:地址



  • **********************************************************************/







  • static uint32_t get_address_GB18030_16X16(uint8_t c1,uint8_t c2,uint8_t c3,uint8_t c4);







  • /*********************************************************************



  • *                                                        函数



  • **********************************************************************/







  • /*********************************************************************



  • *                                                        初始化字库芯片



  • **********************************************************************/







  • void inf_font_init(void)



  • {



  •         //初始化字库芯片



  •         drv_font_init();



  •         //初始化字体类型



  •         init_font_type();



  • }







  • /*********************************************************************



  • *                                                        读取字库



  • *参数:font:字体



  • *     ch:待读取的字符



  • *     buf:读取的数据



  • *返回:读取数据的字节数



  • **********************************************************************/







  • uint8_t inf_font_read(uint8_t font,uint16_t ch,uint8_t *buf)



  • {



  •         uint32_t address = 0;



  •         uint8_t i = 0;



  •         uint8_t ch1 = ch >> 8;



  •         uint8_t ch2 = ch;







  •         //开始读取



  •         drv_font_enable();



  •         drv_font_send_byte(0x03);







  •         //得到地址



  •         address = get_address(font,ch);







  •         //读取数据



  •         drv_font_send_byte(address >> 16);



  •         drv_font_send_byte(address >> 8);



  •         drv_font_send_byte(address);



  •         for (i = 0;i < Font_Type[font].size;i++)



  •         {



  •                 buf = drv_font_send_byte(0);



  •         }







  •         //关闭读取



  •         drv_font_disable();



  • }







  • /*********************************************************************



  • *                                                        将ASCII码转换成GB18030编码



  • *说明:在emwin中调用中文字库,如果其中有ascii码,则必须先调用此函数转换



  • *参数:dst:输入字符串



  • *     src:输出字符串



  • **********************************************************************/







  • void inf_font_asc2gb18030(char *dst,char *src)



  • {



  •         uint8_t len = strlen(src);



  •         uint8_t i = 0;



  •         uint8_t j = 0;



  •         uint16_t temp = 0;







  •         for (i = 0;i < len;i++)



  •         {



  •                 if ((uint8_t)src < 0x80 && (uint8_t)src != 0)



  •                 {



  •                         temp = (uint8_t)src + 0xa380;



  •                         dst[j++] = temp >> 8;



  •                         dst[j++] = temp;



  •                 }



  •                 else



  •                 {



  •                         dst[j++] = src;



  •                 }



  •         }



  • }







  • /*********************************************************************



  • *                                                        初始化字体类型



  • **********************************************************************/







  • static void init_font_type(void)



  • {



  •         Font_Type[ASCII_7X8].addr_base = ASCII_7X8_ADDR_BASE;



  •         Font_Type[ASCII_7X8].width = ASCII_7X8_WIDTH;



  •         Font_Type[ASCII_7X8].height = ASCII_7X8_HEIGHT;



  •         Font_Type[ASCII_7X8].size = ASCII_7X8_SIZE;







  •         Font_Type[ASCII_BOLD_7X8].addr_base = ASCII_BOLD_7X8_ADDR_BASE;



  •         Font_Type[ASCII_BOLD_7X8].width = ASCII_BOLD_7X8_WIDTH;



  •         Font_Type[ASCII_BOLD_7X8].height = ASCII_BOLD_7X8_HEIGHT;



  •         Font_Type[ASCII_BOLD_7X8].size = ASCII_BOLD_7X8_SIZE;







  •         Font_Type[ASCII_6X12].addr_base = ASCII_6X12_ADDR_BASE;



  •         Font_Type[ASCII_6X12].width = ASCII_6X12_WIDTH;



  •         Font_Type[ASCII_6X12].height = ASCII_6X12_HEIGHT;



  •         Font_Type[ASCII_6X12].size = ASCII_6X12_SIZE;







  •         Font_Type[ASCII_8X16].addr_base = ASCII_8X16_ADDR_BASE;



  •         Font_Type[ASCII_8X16].width = ASCII_8X16_WIDTH;



  •         Font_Type[ASCII_8X16].height = ASCII_8X16_HEIGHT;



  •         Font_Type[ASCII_8X16].size = ASCII_8X16_SIZE;







  •         Font_Type[ASCII_BOLD_8X16].addr_base = ASCII_BOLD_8X16_ADDR_BASE;



  •         Font_Type[ASCII_BOLD_8X16].width = ASCII_BOLD_8X16_WIDTH;



  •         Font_Type[ASCII_BOLD_8X16].height = ASCII_BOLD_8X16_HEIGHT;



  •         Font_Type[ASCII_BOLD_8X16].size = ASCII_BOLD_8X16_SIZE;







  •         Font_Type[ASCII_12X24].addr_base = ASCII_12X24_ADDR_BASE;



  •         Font_Type[ASCII_12X24].width = ASCII_12X24_WIDTH;



  •         Font_Type[ASCII_12X24].height = ASCII_12X24_HEIGHT;



  •         Font_Type[ASCII_12X24].size = ASCII_12X24_SIZE;







  •         Font_Type[ASCII_16X32].addr_base = ASCII_16X32_ADDR_BASE;



  •         Font_Type[ASCII_16X32].width = ASCII_16X32_WIDTH;



  •         Font_Type[ASCII_16X32].height = ASCII_16X32_HEIGHT;



  •         Font_Type[ASCII_16X32].size = ASCII_16X32_SIZE;







  •         Font_Type[ASCII_BOLD_16X32].addr_base = ASCII_BOLD_16X32_ADDR_BASE;



  •         Font_Type[ASCII_BOLD_16X32].width = ASCII_BOLD_16X32_WIDTH;



  •         Font_Type[ASCII_BOLD_16X32].height = ASCII_BOLD_16X32_HEIGHT;



  •         Font_Type[ASCII_BOLD_16X32].size = ASCII_BOLD_16X32_SIZE;







  •         Font_Type[GB18030_12X12].addr_base = GB18030_12X12_ADDR_BASE;



  •         Font_Type[GB18030_12X12].width = GB18030_12X12_WIDTH;



  •         Font_Type[GB18030_12X12].height = GB18030_12X12_HEIGHT;



  •         Font_Type[GB18030_12X12].size = GB18030_12X12_SIZE;







  •         Font_Type[GB18030_16X16].addr_base = GB18030_16X16_ADDR_BASE;



  •         Font_Type[GB18030_16X16].width = GB18030_16X16_WIDTH;



  •         Font_Type[GB18030_16X16].height = GB18030_16X16_HEIGHT;



  •         Font_Type[GB18030_16X16].size = GB18030_16X16_SIZE;







  •         Font_Type[GB18030_24X24].addr_base = GB18030_24X24_ADDR_BASE;



  •         Font_Type[GB18030_24X24].width = GB18030_24X24_WIDTH;



  •         Font_Type[GB18030_24X24].height = GB18030_24X24_HEIGHT;



  •         Font_Type[GB18030_24X24].size = GB18030_24X24_SIZE;



  • }





使用特权

评论回复
wowu|  楼主 | 2018-7-28 11:08 | 显示全部楼层
接上层:

  • /*********************************************************************



  • *                                                        得到地址



  • *参数:font:字体



  • *     ch:待读取的字符



  • *返回:地址



  • **********************************************************************/







  • static uint32_t get_address(uint8_t font,uint16_t ch)



  • {



  •         uint32_t address = 0;



  •         uint8_t ch1 = ch >> 8;



  •         uint8_t ch2 = ch;







  •     switch (font)



  •         {



  •                 case ASCII_7X8:



  •                 case ASCII_BOLD_7X8:



  •                 case ASCII_6X12:



  •                 case ASCII_8X16:



  •                 case ASCII_BOLD_8X16:



  •                 case ASCII_12X24:



  •                 case ASCII_16X32:



  •                 {



  •                         address = Font_Type[font].addr_base + (ch - 0x20) * Font_Type[font].size;



  •                         break;



  •                 }



  •                 case ASCII_BOLD_16X32:



  •                 {



  •                         //芯片bug,弄反了几个符号的ascii



  •                         do



  •                         {



  •                                 if (ch == ';')



  •                                 {



  •                                         ch = ':';



  •                                         break;



  •                                 }



  •                                 if (ch == ':')



  •                                 {



  •                                         ch = ';';



  •                                         break;



  •                                 }



  •                                 if (ch == '_')



  •                                 {



  •                                         ch = '^';



  •                                         break;



  •                                 }



  •                                 if (ch == '^')



  •                                 {



  •                                         ch = '_';



  •                                         break;



  •                                 }



  •                         } while (0);



  •                         address = Font_Type[font].addr_base + (ch - 0x20) * Font_Type[font].size;



  •                         break;



  •                 }



  •                 case GB18030_12X12:



  •                 {



  •                         address = Font_Type[font].addr_base + get_address_GB18030_12X12(ch1,ch2,0,0) * Font_Type[font].size;



  •                         break;



  •                 }



  •                 case GB18030_16X16:



  •                 case GB18030_24X24:



  •                 {



  •                         address = Font_Type[font].addr_base + get_address_GB18030_16X16(ch1,ch2,0,0) * Font_Type[font].size;



  •                         break;



  •                 }



  •         }



  • }







  • /*********************************************************************



  • *                                                        得到字体地址



  • *参数:ch1:字符编码第1个字节



  • *     ch2:字符编码第2个字节



  • *     ch3:字符编码第3个字节



  • *     ch4:字符编码第4个字节



  • *返回:地址



  • **********************************************************************/







  • static uint32_t get_address_GB18030_12X12(uint8_t c1,uint8_t c2,uint8_t c3,uint8_t c4)



  • {



  •     uint32_t h = 0;







  •     if (c2 == 0x7f)



  •         {



  •                 return h;



  •         }







  •     if (c1 >= 0xA1 && c1 <= 0xa9 && c2 >= 0xa1)



  •         {



  •                 //Section 1



  •         h = (c1 - 0xA1) * 94 + (c2 - 0xA1);



  •         }



  •     else



  •         {



  •                 if (c1 >= 0xa8 && c1 <= 0xa9 && c2 < 0xa1)   



  •                 {



  •                         //Section 5



  •                         if (c2 > 0x7f)



  •                         {                               



  •                                 c2--;  



  •                         }                               



  •                         h = (c1 - 0xa8) * 96 + (c2 - 0x40) + 846;   



  •                 }



  •     }  







  •     if (c1 >= 0xb0 && c1 <= 0xf7 && c2 >= 0xa1)      



  •         {



  •                 //Section 2



  •         h = (c1 - 0xB0) * 94 + (c2 - 0xA1) + 1038;



  •         }



  •     else



  •         {



  •                 if (c1 < 0xa1 && c1 >= 0x81 && c2 >= 0x40 )   



  •                 {



  •                         //Section 3



  •                         if (c2 > 0x7f)  



  •                         {



  •                                 c2--;   



  •                         }                               



  •                         h = (c1 - 0x81) * 190 + (c2 - 0x40) + 1038 + 6768;



  •                 }



  •                 else



  •                 {



  •                         if(c1 >= 0xaa && c2 < 0xa1)                 



  •                         {



  •                                 //Section 4



  •                                 if (c2 > 0x7f)  



  •                                 {



  •                                         c2--;



  •                                 }                                       



  •                                 h = (c1 - 0xaa) * 96 + (c2 - 0x40) + 1038 + 12848;



  •                         }



  •                 }



  •         }







  •     return h;



  • }







  • /*********************************************************************



  • *                                                        得到字体地址



  • *参数:ch1:字符编码第1个字节



  • *     ch2:字符编码第2个字节



  • *     ch3:字符编码第3个字节



  • *     ch4:字符编码第4个字节



  • *返回:地址



  • **********************************************************************/







  • static uint32_t get_address_GB18030_16X16(uint8_t c1,uint8_t c2,uint8_t c3,uint8_t c4)



  • {



  •     uint32_t h = 0;







  •     if (c2 == 0x7f)



  •         {



  •                 return h;



  •         }







  •     if (c1 >= 0xA1 && c1 <= 0xa9 && c2 >= 0xa1)



  •         {



  •                 //Section 1



  •         h = (c1 - 0xA1) * 94 + (c2 - 0xA1);



  •         }



  •     else



  •         {



  •                 if (c1 >= 0xa8 && c1 <= 0xa9 && c2 < 0xa1)   



  •                 {



  •                         //Section 5



  •                         if (c2 > 0x7f)



  •                         {                               



  •                                 c2--;  



  •                         }                               



  •                         h = (c1 - 0xa8) * 96 + (c2 - 0x40) + 846;   



  •                 }



  •     }  







  •     if (c1 >= 0xb0 && c1 <= 0xf7 && c2 >= 0xa1)      



  •         {



  •                 //Section 2



  •         h = (c1 - 0xB0) * 94 + (c2 - 0xA1) + 1038;



  •         }



  •     else



  •         {



  •                 if (c1 < 0xa1 && c1 >= 0x81 && c2 >= 0x40 )   



  •                 {



  •                         //Section 3



  •                         if (c2 > 0x7f)  



  •                         {



  •                                 c2--;   



  •                         }                               



  •                         h = (c1 - 0x81) * 190 + (c2 - 0x40) + 1038 + 6768;



  •                 }



  •                 else



  •                 {



  •                         if(c1 >= 0xaa && c2 < 0xa1)                 



  •                         {



  •                                 //Section 4



  •                                 if (c2 > 0x7f)  



  •                                 {



  •                                         c2--;



  •                                 }                                       



  •                                 h = (c1 - 0xaa) * 96 + (c2 - 0x40) + 1038 + 12848;



  •                         }



  •                         else



  •                         {



  •                                 if(c1 == 0x81 && c2 >= 0x39)



  •                                 {



  •                                         //四字节区1



  •                                         h = 1038 + 21008 + (c3 - 0xEE) * 10 + c4 - 0x39;



  •                                 }



  •                                 else



  •                                 {



  •                                         if(c1 == 0x82)



  •                                         {



  •                                                 //四字节区2



  •                                                 h = 1038 + 21008 + 161 + (c2 - 0x30) * 1260 + (c3 - 0x81) * 10 + c4 - 0x30;



  •                                         }



  •                                 }



  •                         }



  •                 }



  •         }







  •     return h;



  • }










测试代码:




  • uint8_t buf[30] = {0};



  •         inf_font_read(ASCII_6X12,'b',buf);



使用特权

评论回复
stm32jy| | 2018-7-28 11:38 | 显示全部楼层
怎么全是转载

使用特权

评论回复
wowu|  楼主 | 2018-8-4 09:25 | 显示全部楼层

看到好的 就发过来  以后自己找也方便

使用特权

评论回复
heimaojingzhang| | 2018-8-4 11:07 | 显示全部楼层
下次楼主打个包 太长了

使用特权

评论回复
电技| | 2018-8-4 13:28 | 显示全部楼层
成本多少

使用特权

评论回复
dongnanxibei| | 2018-8-5 22:27 | 显示全部楼层
这年头还用字库?单片机内存都挺大的,开辟一块,放入一个字库文件就行了。

使用特权

评论回复
zhuotuzi| | 2018-8-6 19:37 | 显示全部楼层
转载不专业,没意思i

使用特权

评论回复
pklong| | 2018-8-6 20:19 | 显示全部楼层

这个库呢?

使用特权

评论回复
touser| | 2018-8-6 20:19 | 显示全部楼层
代码看不到

使用特权

评论回复
myiclife| | 2018-8-6 20:20 | 显示全部楼层
这个不做成工程代码吗

使用特权

评论回复
uytyu| | 2018-8-6 20:20 | 显示全部楼层
好繁琐,不方便查看

使用特权

评论回复
iyoum| | 2018-8-6 20:20 | 显示全部楼层
有工程文件吗?

使用特权

评论回复
wwppd| | 2018-8-6 20:20 | 显示全部楼层
drv_font.h 只有头文件吗

使用特权

评论回复
jkl21| | 2018-8-6 20:20 | 显示全部楼层
输出应该是点阵吧

使用特权

评论回复
eefas| | 2018-8-6 20:21 | 显示全部楼层
        太杂乱

使用特权

评论回复
dspmana| | 2018-8-6 20:21 | 显示全部楼层
楼主能不能整理一下?

使用特权

评论回复
maqianqu| | 2018-8-6 20:21 | 显示全部楼层
GT23L24M0140还有字库芯片,厉害了。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

80

主题

3802

帖子

1

粉丝