⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gt21lspi51.c

📁 汉字库芯片 GT21L16S1W 驱动 控制源代码
💻 C
字号:
#include "reg51.h"
#include "intrins.h"
#include "string.h"
#define uchar unsigned char
#define uint unsigned int

sbit CS=P1^6;		 //片选
sbit SO=P1^3;		 //数据输出
sbit SI=P1^4;		 //数据输入
sbit SCK=P1^2;	 //时钟

void get_font_matrix(unsigned char msb , unsigned char lsb);
/********************************************************************/
/*  模块名称:模拟GT21L SPI接口参考程序                             */
/*  文 件 名:模拟GT21L SPI接口参考程序.c                           */
/*  参考文档:无                                                    */
/*  作    者:                                                      */
/*  版    本:V                                                     */
/*  日    期:                                                      */
/*  注    释:张海峰                                                */
/*  日  期:2007-04-04                                            */
/*  修改记录:无                                                    */
/*  说    明:需要用户根据自己的MCU和I/O使用状况自己配置            */
/********************************************************************/

#define SPID_DO     SO     
   
#define SPICS_H()   CS = 1 
#define SPICS_L()   CS = 0
#define SPICLK_H()  SCK = 1
#define SPICLK_L()  SCK = 0
#define SPID_H()    SI =1
#define SPID_L()    SI = 0

//by zhanghf
//全局变量用于读取快速读取汉字,以读取15*16点阵汉字为例
//请用户根据实际情况自行修改数组长度
unsigned char upperfont_32[32];  


/********************************************************************/
/*  函数名称:void Send_Byte(unsigned char out)                     */
/*  函数功能:向GT21L系列芯片送一个字节数据                         */
/*  参  数:out  向GT21L系列芯片送的一个字节数据值                */
/*  全局变量:无                                                    */
/*  返 回 值:无                                                    */
/*  调用前提:无                                                    */
/*  副 作 用:无                                                    */
/*  作  者:                                                      */
/*  日  期:                                                      */
/*  注    释:张海峰                                                */
/*  日  期:2007-04-04                                            */
/*  修改记录:无                                                    */
/*  说    明:注意字节数据的输出顺序是先高位后低位,CLK信号是下降沿 */
/********************************************************************/
void Send_Byte(unsigned char out)
{
	unsigned char i=0;
	for (i = 0; i < 8; i++)
	{ 
		if ((out & 0x80) == 0x80)	// check if MSB is high 
			SPID_H();
		else
			SPID_L();			          // if not, set to low 
		SPICLK_L();		          	// toggle clock low 
		out = (out << 1);		      // shift 1 place for next bit 
    SPICLK_H();			          // toggle clock high 
	}
}


/********************************************************************/
/*  函数名称:unsigned char Get_Byte()                              */
/*  函数功能:从GT21L系列芯片得到一个字节数据                       */
/*  参  数:无                                                    */
/*  全局变量:无                                                    */
/*  返 回 值:从GT21L系列芯片得到的一个字节数据                     */
/*  调用前提:无                                                    */
/*  副 作 用:无                                                    */
/*  作  者:                                                      */
/*  日  期:                                                      */
/*  注    释:张海峰                                                */
/*  日  期:2007-04-04                                            */
/*  修改记录:无                                                    */
/*  说    明:需要用户根据自己的MCU和I/O使用状况自己                */
/*            配置SI(串行数据输入)                                */
/********************************************************************/
unsigned char Get_Byte()
{
	unsigned char i = 0, in = 0, temp = 0;
	for (i = 0; i < 8; i++)
	{
		SPICLK_L();		                      // toggle clock high 
    in = (in << 1);		                  // shift 1 place to the left or shift in 0 
		SPICLK_H();		                      // toggle clock high 
		                                    // by zhanghf
		temp = SPID_DO;	                  	// 需要用户根据自己的MCU和I/O使用状况自己配置SI(串行数据输入)
	        if (temp == 1)			          // check to see if bit is high 
		in = in | 0x01;	                 	// if high, make bit high 
	}
	return in;
}


/********************************************************************/
/*  函数名称:void HighSpeed_Read_Cont(unsigned long Dst,           */
/*            unsigned long no_bytes)                               */
/*  函数功能:快速从GT21L系列芯片读出所要的汉字点阵数据             */
/*            存于数组upperfont_32中                                */
/*  参  数:Dst       :数据在GT21L系列芯片中的地址               */
/*            no_bytes  :从GT21L芯片读出所要的汉字点阵数据的个数   */
/*  全局变量:upperfont_32[32]:用于快速读取汉字点阵数据            */
/*  返 回 值:无                                                    */
/*  调用前提:无                                                    */
/*  副 作 用:无                                                    */
/*  作  者:                                                      */
/*  日  期:                                                      */
/*  注    释:张海峰                                                */
/*  日  期:2007-04-04                                            */
/*  修改记录:无                                                    */
/*  说    明:由于用于快速读取汉字点阵数据的upperfont_32[32]全局变量*/
/*            为32字节,请用户根据实际情况自行修改数组长度          */
/********************************************************************/
void HighSpeed_Read_Cont(unsigned long Dst, unsigned long no_bytes)
{
	unsigned long i = 0;
	SPICS_L();			                      // enable device 
	Send_Byte(0x0B); 		                 	// read command 
	Send_Byte(((Dst & 0xFFFFFF) >> 16)); 	// send 3 address bytes 
	Send_Byte(((Dst & 0xFFFF) >> 8));
  Send_Byte(Dst & 0xFF);
	Send_Byte(0xFF);			                //dummy byte
	for (i = 0; i < no_bytes; i++)    		// read until no_bytes is reached 
	{
		upperfont_32[i] = Get_Byte();	      // receive byte and store at address 80H - FFH 
	}
	SPICS_H();			                    	// disable device 
}


/********************************************************************/
/*  函数名称:void main()                                           */
/*  函数功能:主程序                                                */
/*  参  数:无                                                    */
/*  全局变量:无                                                    */
/*  返 回 值:无                                                    */
/*  调用前提:无                                                    */
/*  副 作 用:无                                                    */
/*  作  者:                                                      */
/*  日  期:                                                      */
/*  注    释:张海峰                                                */
/*  日  期:2007-04-04                                            */
/*  修改记录:无                                                    */
/*  说    明:演示调用HighSpeed_Read_Cont子程序                     */
/********************************************************************/
void main()
{
   unsigned long addr;

   addr = 0x20000;
	 HighSpeed_Read_Cont(addr,32);


   get_font_matrix(0xb0,0xa1)
//  可以对全局变量upperfont_32[]该汉字进行处理了;
}

void get_font_matrix(unsigned char msb , unsigned char lsb)
{
			//by zhanghf
			//字库起始地址,可以在GT21L系列芯片的数据手册中查到,请用户根据实际情况自行修改
			#define BASEADDR  (0x0000)     

      unsigned long addr = BASEADDR;
      //by zhanghf
			//根据汉字内码算地址的公式,可以在GT21L系列芯片的数据手册中查到,请用户根据实际情况自行修改
      if(msb>=0xa1 && msb<=0xab&&lsb>=0xa1)
          addr=  ((((unsigned long)msb)-0xa1)*94+(((unsigned long)lsb)-0xa1))*32+((unsigned long)BASEADDR);
        else if(msb>=0xb0 && msb<=0xf7&&lsb>=0xa1)
            addr=  ((((unsigned long)msb)-0xb0)*94+(((unsigned long)lsb)-0xa1)+846)*32+((unsigned long)BASEADDR);
      HighSpeed_Read_Cont(addr,32);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -