#include  "stm8s.h"

#include "GT20L16S1Y.h"

#include "delay.h"

/*******************************************************

*  函数名称:SPI0_clear

*  函数功能:清除SPI总线状态

*  入口参数:无

*  出口参数:无

******************************************************/

void SPI0_clear(void)

{

SPI0_CS_ON();    //拉高

SPI0_SCLK_ON();  //拉高

SPI0_MOSI_ON();  //拉高

}

/*******************************************************

*  函数名称:SPI0_readByte

*  函数功能:SPI0读取一个字节数据

*  入口参数:无

*  出口参数:unsigned char

******************************************************/

unsigned char SPI0_readByte(void)

{

unsigned char  i;

unsigned char  dat;

for(i = 0; i < 8; i++)

{

dat <<= 1;

SPI0_SCLK_OFF();          //下降沿,MISO字库芯片移出一个bit

if(GPIO_ReadInputPin(GPIOB,GPIO_PIN_1)!= 0)

{

dat |= 0x01;

}

else

{

dat |= 0x00;

}

delay(1);

SPI0_SCLK_ON();

delay(1);

}

return dat;

}

/*******************************************************

*  函数名称:SPI0_writeByte

*  函数功能:SPI0写出一个字节数据

*  入口参数:unsigned char

*  出口参数:无

******************************************************/

void SPI0_writeByte(unsigned char dat)

{

unsigned char i;

for(i = 0; i < 8; i++)

{

SPI0_SCLK_OFF();

if(dat & 0x80)

{

SPI0_MOSI_ON();

}

else

{

SPI0_MOSI_OFF();

}

dat <<= 1;

delay(1);

SPI0_SCLK_ON();                                                                                                        //上升沿,MOSI字库芯片移入一个bit

delay(1);

}

}

/*******************************************************

*  函数名称:WORDLIB_read_ASCII_8x16

*  函数功能:读取字库芯片中一个ASCII字符的8x16点阵编码

*  入口参数:ASCIICode,ASCII码;buffer,点阵编码的缓冲区;

buffer必须大于等于16个字节。

*  出口参数:无

******************************************************/

void WORDLIB_read_ASCII_8x16(unsigned int ASCIICode,unsigned char *buffer)

{

unsigned long BaseAddr        = 0x3b7c0;     //8x16点阵的起始地址,见手册《GT23L32S4W用户手册》

unsigned long WordAddr        = 0;              //ASCII字符点阵在芯片中的字节地址

unsigned long ASCIICodeTemp   =0;

const unsigned int BUFSIZE    = 16;        //缓冲区的大小

unsigned char  i;

ASCIICodeTemp=ASCIICode&0xff;

//计算地址,见手册《GT20L16S1Y用户手册》

if((ASCIICodeTemp >= 0x20) && (ASCIICodeTemp <= 0x7E))

{

WordAddr        = (ASCIICodeTemp - 0x20) * BUFSIZE + BaseAddr;

}

SPI0_clear();           //清除SPI总线

delay(1);

//开始快速读取点阵数据:Read Data Bytes At Higher Speed

SPI0_CS_OFF();

delay(1);

SPI0_writeByte(0x0b);  //发送命令字:0x0B

SPI0_writeByte((WordAddr >> 16) & 0xff);    //从高到低,依次发送三个字节的地址

SPI0_writeByte((WordAddr >> 8) & 0xff);

SPI0_writeByte(WordAddr & 0xff);

SPI0_writeByte(0xff);           //最后发送一个字节的假数据 Dummy Byte

for(i = 0; i < BUFSIZE; i++)

{

*(buffer + i)        = SPI0_readByte();                                                                //读取字库芯片发送过来的点阵编码

}

SPI0_CS_ON();                                                                                                                 //CS置高,结束本次操作

delay(1);

SPI0_clear();                                                                                                                //清除SPI总线

delay(1);

}

/*******************************************************

*  函数名称:WORDLIB_read_GB_16x16

*  函数功能:读取字库芯片中一个国标汉字的16x16点阵编码

*  入口参数:GBCode,汉字内码;buffer,点阵编码的缓冲区;

buffer必须大于等于32个字节。

*  出口参数:无

******************************************************/

void WORDLIB_read_GB_16x16(unsigned int GBCode, unsigned char  *buffer)

{

unsigned long BaseAddr        = 0;       //16x16点阵的起始地址,见手册《GT20L16S1Y用户手册》

unsigned long GBCode_MSB        = 0;   //汉字内码的高八位

unsigned long GBCode_LSB        = 0;         //汉字内码的低八位

unsigned long WordAddr        = 0;                      //汉字或者ASCII字符点阵在芯片中的字节地址

const unsigned char BUFSIZE        = 32;              //缓冲区的大小

unsigned char   i;

GBCode_MSB        = (GBCode >> 8) & 0xFF;   //汉字内码的高八位

GBCode_LSB        = GBCode & 0xFF;         //汉字内码的低八位

//计算地址,见手册《GT20L16S1Y用户手册》

if(GBCode_MSB == 0xA9&& GBCode_LSB >= 0xA1)

{

WordAddr        = (282+(GBCode_LSB-0xA1))*32+ BaseAddr;

}

else if(GBCode_MSB >= 0xA1&&GBCode_MSB <= 0xA3&& GBCode_LSB >= 0xA1)

{

WordAddr        = (GBCode_MSB-0xA1)*94+(GBCode_LSB-0xA1)*32+ BaseAddr;

}

else if(GBCode_MSB >= 0xB0&&GBCode_MSB <= 0xF7&& GBCode_LSB >= 0xA1)

{

WordAddr        = ((GBCode_MSB-0xB0)*94+(GBCode_LSB-0xA1)+846)*32+ BaseAddr;

}

SPI0_clear();           //清除SPI总线

delay(1);

//开始快速读取点阵数据:Read Data Bytes At Higher Speed

SPI0_CS_OFF();

delay(1);

SPI0_writeByte(0x0B);                      //发送命令字:0x0B

SPI0_writeByte((WordAddr >> 16) & 0xff);    //从高到低,依次发送三个字节的地址

SPI0_writeByte((WordAddr >> 8) & 0xff);

SPI0_writeByte(WordAddr & 0xff);

SPI0_writeByte(0xff);               //最后发送一个字节的假数据 Dummy Byte

for(i = 0; i < BUFSIZE; i++)

{

*(buffer + i)        = SPI0_readByte();    //读取字库芯片发送过来的点阵编码

}

SPI0_CS_ON();                                                                                                                 //CS置高,结束本次操作

delay(1);

SPI0_clear();                                                                                                             //清除SPI总线

delay(1);

}

c语言对字库的查找程序,把已经调好的GT20L16S1Y字库芯片C语言驱动代码分享给大家。...相关推荐

  1. c语言java是女朋友_程序猿选女朋友 你希望她是你的什么星座代码?

    计算机语言的实质其实是为了让人类能够更好与计算机打交道,最终结果都是通过编译成二进制代码或通过解释器转译成二进制代码的形式,由计算机来执行.而二进制就是0和1,假设1代表男生,0代表女生,那么瞬间就可 ...

  2. 【C语言入门】SDUT《程序设计基础I 》实验1-顺序结构程序设计题解 c语言入门语法讲解

    SDUT<程序设计基础I >实验1-顺序结构程序设计题解 && c语言语法讲解 链接 前言: 为方便更多同学入门C语言, 特在此编写SDUT OJ c语言入门150题题解即 ...

  3. R语言 |在官网查找程序包(packages)的官方说明书

    1.待解决的问题 如何查找ggplot2等package的官方说明书 2.解决方案 2.1方法(1) 必应:cran + ggplot2 必应的网址

  4. C语言运行超过运行限制,程序中的一些限制(基于Linux系统C语言)

    今天突然想起来几个问题,在程序运行起来时,存在一些限制: 1,数组的长度(成员的个数)存在限制!(数组定义的空间大小) 2,一个进程里打开的文件数. 3,一个文件的名字的长度. 4,一个进程里创建线程 ...

  5. c语言中不定积分如何编写程序,谁能举个例子教我一下C语言的定积分运算

    [C] 纯文本查看 复制代码#include #include void main( ) { float f1(float x); float f2(float x); float f3(float ...

  6. (一)易语言学习笔记之从了解易语言到写一个小程序

    如果要安装易语言参考下面链接: https://www.bilibili.com/video/BV1Rd4y1F7N4/?spm_id_from=333.999.0.0&vd_source=8 ...

  7. 语言程序推箱子课设报告_学完C语言,可以去哪些应用领域工作?

    C语言是目前世界上流行.使用非常广泛的高级程序设计语言. 在TIOBE已公布2020年8月的编程语言排行榜.C语言依然保持排行第一! 前20名排行如下: C语言对操作系统和系统使用程序以及需要对硬件进 ...

  8. vs 无法启动程序c语言,vs2013运行c语言出现:无法查找或打开 PDB 文件。

    vs2013运行c语言出现:无法查找或打开 PDB 文件 (2014-01-07 10:56:35) vs2013运行c语言出现:无法查找或打开 PDB 文件. vs2013运行c语言出现:无法查找或 ...

  9. c语言程序二进制代码,二进制搜索/查找程序(C语言)

    二进制搜索/查找程序(C语言),如下代码所示: #include #define MAX 20 // array of items on which linear search will be con ...

最新文章

  1. 宏基因组蚂蚁森林合种——胡杨专车
  2. 初始 DQN 程序 所遇到的问题
  3. mysql 大写 小写_Mysql大小写敏感的问题
  4. 无影云电脑居家办公最佳实践(便捷账号)
  5. 《Go语言圣经》学习笔记 第四章 复合数据类型
  6. Hashcode 的作用
  7. 游标遍历所有数据库循环执行修改数据库的sql命令
  8. 如何设置访问共享弹出窗口
  9. c语言文件pt是什么意思,C语言文件p的pt.ppt
  10. JFinal Template Engine 使用
  11. XenCenter导出和导入模板
  12. PLUTO SDR入门系列之九:强大的开源软件“gnu radio”
  13. 技术美术 之 游戏开发流程
  14. vue 高德获取当前经纬度
  15. 中国第一家区块链形式化验证公司获种子轮投资
  16. 电脑问题处理篇5:解决电脑突然蓝屏问题
  17. Win7蓝牙标志不见了, 如何找回?
  18. blur表单验证方式
  19. HTML中通过js 自定义一个鼠标悬停后立刻显示的Title(附效果图)
  20. 关于iTerm2 你不知道的一些事

热门文章

  1. 706服务器型号,数据库版本706 此服务器支持661
  2. 数据存储(1):从数据存储看人类文明-数据存储器发展历程
  3. 西北师大与新华三开展物联网战略合作,共建“物联网联合实验室”
  4. 联想K29昭阳K29笔记本联想K49A在dos下刷入bios教程
  5. 前端实现图片压缩上传功能
  6. 利用IPv6实现公网访问远程桌面
  7. Excel中如何添加Power Pivot
  8. [言论]熊十力谈读书(摘录于《非常道——1840-1999的中国话语》)
  9. 开淘宝店被骗,刷信誉被骗
  10. wps怎么删除分节符以及段落边框产生分隔线的取消方法