c语言对字库的查找程序,把已经调好的GT20L16S1Y字库芯片C语言驱动代码分享给大家。...
#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语言驱动代码分享给大家。...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于csrss.exe和winlogon
- 下一篇: 被误以为外国佬开发的4款国产软件,早年默