日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2023/12/14 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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语言驱动代码分享给大家。...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。