历史上的今天
返回首页

历史上的今天

今天是:2024年10月10日(星期四)

正在发生

2020年10月10日 | 驱动字库芯片GT23L24M0140

2020-10-10 来源:eefocus

环境:


主机: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);

}

 

 


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

推荐阅读

史海拾趣

ATO SOLUTION公司的发展小趣事

在电子行业中,产品质量是企业生存和发展的关键。ATO SOLUTION公司始终坚持以质量为核心,建立了严格的质量管理体系。公司从原材料采购到产品生产的每一个环节都进行严格把控,确保产品质量的稳定性和可靠性。这种对品质的执着追求,使公司赢得了客户的信任和口碑,为公司的长期发展奠定了坚实基础。

Esico-Triton公司的发展小趣事

随着科技的不断进步,电子行业也在快速变革。为了应对这一挑战,Esico-Triton不断加强研发投入,特别是在人工智能和物联网领域。公司推出了一系列智能家居和工业自动化产品,以适应市场的需求。同时,Esico-Triton还与多所知名大学和研究机构合作,共同研发新技术,确保公司在行业中的领先地位。

方舟(ARKLED)公司的发展小趣事

方舟公司高度重视产品品质管理,从原材料采购到生产加工,再到成品检验,每一个环节都严格把关。公司引进了先进的生产设备和检测仪器,建立了完善的质量管理体系。通过ISO9001质量管理体系认证,方舟公司的产品质量得到了有效保障,赢得了客户的信赖和支持。

Conditioning Semiconductor Devices Corp公司的发展小趣事

Conditioning Semiconductor Devices Corp(简称CSDC)起初是一家小型半导体公司,专注于研发低功耗的芯片技术。随着智能设备的普及,市场对节能型半导体的需求激增。CSDC通过不断的研发投入,成功开发了一种全新的低功耗技术,显著降低了设备的能耗,迅速在市场上获得认可,从而实现了业务的快速增长。

Asian Best Components Co Ltd公司的发展小趣事

Asian Best Components Co Ltd在电子行业的初期,凭借一支富有创新精神的技术团队,成功研发出了一款高效能的电子元件。这款产品以其稳定性和高性价比迅速在市场上占据了一席之地。公司借此契机,不断扩大生产规模,提升产品质量,逐渐在电子元件领域建立了良好的口碑。随着技术的不断进步,Asian Best不断推陈出新,陆续开发出多款领先行业的产品,为公司的发展奠定了坚实的基础。

Hitano Enterprise Corp公司的发展小趣事

品质是Asian Best Components Co Ltd的生命线。公司自成立之初就高度重视品质管理,建立了严格的质量控制体系。从原材料的采购到生产过程的每一个环节,再到产品的最终检验,公司都严格把关,确保每一件产品都符合高标准的质量要求。这种对品质的执着追求,使得Asian Best的产品在市场上赢得了广泛的认可和信赖,也铸就了公司的良好品牌形象。

问答坊 | AI 解惑

分享一个充电器电路

这是一个简单的充电器电路,功能非常齐全,采用了一个芯片cn3068,非常适合于便携式应用的领域。热调制电路可以在器件的功耗比较大或者环境温度比较高的时候将芯片温度控制在安全范围内。内部固定的恒压充电电压为4.2V,也可以通过一个外部的电阻调 ...…

查看全部问答>

Wince的应用程序无法显示字符的问题

用VS生成的一个应用程序,界面上显示一些字符和变量值等,用的语句是DrawText() 有一点不明白的是同样一个应用程序,在个别的NK设置里边显示会出错,界面中的字符全都显示不出来,菜单栏上的“文件”“帮助”都看得到。 希望了解的人能够给予解 ...…

查看全部问答>

wince6 输入法问题

有好几个问题想请教一下: 1.系统采用Wince6  R2的,之前系统分辨率是240*320的,客户感觉这个屏幕有颗粒感就换成了320*480,但是微软的输入法小键盘现在还是显示240*320的大小,怎么样能让他适应320*480的屏幕呢? 2.有没有wince6上面 ...…

查看全部问答>

arm-linux下的串口

用开发板的一个串口驱动GPRS模块 调试时用普通的三线通信(收发地)时没有问题,发送和接收都正确。 可是用硬件流控时,发送的数据就不能到达modem。请问可能是什么原因? 板子是arm9的开发板,linux内核。…

查看全部问答>

硬件领域的公司都回招哪些类的职位?

请教一下大家一个做硬件领域的公司都会招些什么类型的职位?…

查看全部问答>

pipice无法仿真,请高手来指点一下。

  如图,按下仿真后,总是出现这个提示,请高手指教一下,问题出在何方?…

查看全部问答>

数电 设计出有一定输出电压范围和功能的数控电源

1.基本要求   (1)输出电压:范围0~+9.9V,步进0.1V,纹波不大于10mV;  (2)输出电流:500mA;   (3)输出电压值由数码管显示;   (4)由“+”、“-”两键分别控制输出电压步进增减;   (5)为实现上述几部件工作,自制一稳压 ...…

查看全部问答>

室内设计技巧及计算方法

常用的几种照明方式,根据灯具光通量的空间分布状况及灯具的安装方式,室内照明方式可分为五种: 1、直接照明   光线通过灯具射出,其中90%-100%的光通量到达假定的工作面上,这种照明方式为直接照明。这种照明方式具有强烈的明暗对比 ...…

查看全部问答>

【TI视频】WEBENCH BOM 管理

德州仪器 (TI) WEBENCH 团队经理Jeff Perry为您介绍 WEBENCH BOM 管理以及如何更改 WEBENCH 设计中的组件。WEBENCH是一种端对端设计解决方案,提供在线选择、仿真和原型设计功能。它包括动态设计优化,允许您针对小尺寸、低成本或高效率来优化设计 ...…

查看全部问答>

学模拟+工业远距离通信使用的RS-232至RS-485转换器

本帖最后由 dontium 于 2015-1-23 11:43 编辑 工业远距离通信使用的RS-232至RS-485转换器作者:ThomasKugelstadt,德州仪器 TI链接:deyisupport./blog/b/analogwire/archive/2013/11/22/rs-232-rs-485.aspx 这篇文章很好的解释了RS-232与RS-485 ...…

查看全部问答>