• 官方微信

    CA800二維碼微平臺 大視野

  • 工控頭條

    CA800二維碼工控頭條App

當前位置:体彩山西十一选五走势图贴吧>自動化文庫>解決方案>高通STM32針對16點陣中文字庫的調用方法

山西十一选五的走势图解: 高通STM32針對16點陣中文字庫的調用方法

發布時間:2019-06-04 來源:中國自動化網 類型:解決方案 人瀏覽
分享到:
關鍵字:

体彩山西十一选五走势图贴吧 www.mlheo.com 點陣字庫 字庫芯片 16點陣字庫

導讀:

本例用STM32單片機普通IO口模擬SPI的方式來讀取高通字庫GT20L16S1Y。 高通字庫是受國家信標委授權的標準字庫,本款芯片適合最基本的16點陣字庫、16x16漢字庫、一級字庫、單片機字庫應用,該芯片支持gb2312點陣和基本的ASCII編碼的字符集,采用SPI協議的接口來讀取芯片內的數據。封裝為SOT23-6,體積較小,適合任意大小的設備。

      本例用STM32單片機普通IO口模擬SPI的方式來讀取高通字庫GT20L16S1Y。
      高通字庫是受國家信標委授權的標準字庫,本款芯片適合最基本的16點陣字庫、16x16漢字庫、一級字庫、單片機字庫應用,該芯片支持gb2312點陣和基本的ASCII編碼的字符集,采用SPI協議的接口來讀取芯片內的數據。封裝為SOT23-6,體積較小,適合任意大小的設備。
      本例中使用的單片機型號是STM32F103VDT6,字庫使用的引腳是PA口的4,5,6,7腳,首先我們對這個單片機的系統時鐘進行設置。進行系統時鐘設置后才能開啟端口的時鐘。具體如下例所示。
void SystemInit (void)
{
  RCC->CR |= (uint32_t)0x00000001;
  RCC->CFGR &= (uint32_t)0xF0FF0000;  
  RCC->CR &= (uint32_t)0xFEF6FFFF;
  RCC->CR &= (uint32_t)0xFFFBFFFF;
  RCC->CFGR &= (uint32_t)0xFF80FFFF;
  RCC->CIR = 0x009F0000;
  RCC->CFGR2 = 0x00000000;      
  RCC->CIR = 0x009F0000;
  SystemInit_ExtMemCtl(); 
  SetSysClock();
  SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; 
}
設置好時鐘后開始初始化STM32的IO口,如下例所示
#define  CLK_H     GPIO_SetBits(GPIOA,GPIO_Pin_5)
#define  CLK_L     GPIO_ResetBits(GPIOA,GPIO_Pin_5)
#define  SO_H      GPIO_SetBits(GPIOA,GPIO_Pin_7)
#define  SO_L      GPIO_ResetBits(GPIOA,GPIO_Pin_7)
#define  CS_H      GPIO_SetBits(GPIOA,GPIO_Pin_4)
#define  CS_L      GPIO_ResetBits(GPIOA,GPIO_Pin_4)

#define  SI        GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_6)
void GenitopZkInit(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_7;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_Init(GPIOA,&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA,&GPIO_InitStructure);
}
好了,下面開始用IO口模擬SPI來讀寫字庫
發送0X03及計算出來的字庫地址
void GenitopZk_Address(unsignedcharAddH,unsignedcharAddM,unsignedcharAddL) 
{
    Send_Byte(0x03);
Send_Byte(AddH);
Send_Byte(AddM);
Send_Byte(AddL);
}
從字庫指定的地址address讀出一個字節的數據出來
unsignedcharZkReadOneByte(unsigned long int address)
{
unsignedchardat=0x00,AddH,AddM,AddL;
CS_L;
AddH=address>>16;
AddM=address>>8;
AddL=address;
GenitopZk_Address (AddH,AddM,AddL);
dat=ReadByte();
CS_H;
return dat;
}  

從字庫指定的地址讀出N個字節的數據
Void ZkReadNByte(unsigned long int address,unsignedcharbyte_long,unsignedchar*p_arr)
{
    unsignedcharAddH,AddM,AddL;
unsigned int j;
CS_L;
AddH=address>>16;
AddM=address>>8;
AddL=address;
GenitopZk_Address (AddH,AddM,AddL);
for(j=0;j<byte_long;j++)
{
p_arr[j]=ReadByte();
}
CS_H;
}
該函數向字庫發送數據
void Send_Byte(unsignedcharout)
{
unsignedchari=0;

for(i=0;i<8;i++)
{
  CLK_L;
  if(((out<<i)&0x80)==0)
      SO_L;   
  else
      SO_H;
  CLK_H;
  }
}
該函數從字庫接收數據
u8 ReadByte(void)
{
u8 i;
u8 dat;
CLK_H;
for(i=0;i<8;i++)
{
CLK_L;
dat=dat<<1;
if(SI)
dat=dat|0x01;
else 
dat&=0xfe;
CLK_H ;
}
return dat;
}
讀取漢字并顯示的函數,參數M是指漢字機內碼的高字節,L是指漢字機內碼的低字節。
void Display_GTHZ16(unsignedcharM,unsignedcharL)

    unsignedchari,j;
unsigned long BaseAdd;
    unsignedcharMSB,LSB;
    unsigned long Address;
unsignedcharhzbuf[32];
unsignedcharaddr[4];
MSB=M;
LSB=L;
BaseAdd=0x00;//以下公式參見GT20L16S1Y規格書的第17頁。
if(MSB==0xA9 && LSB>=0xa1)
Address=(282+(LSB-0XA1))*32+BaseAdd;
else if(MSB >=0xA1 && MSB <= 0xA3 && LSB >=0xA1)
    Address= ((MSB - 0xA1) * 94 + (LSB - 0xA1))*32+BaseAdd;   
else if(MSB >=0xB0 && MSB <= 0xF7 && LSB >=0xA1)
Address = ((MSB - 0xB0) * 94 + (LSB - 0xA1)+ 1038)*32+ BaseAdd;   ZkReadNByte (Address,hzbuf,32);
for(i=0;i<16;i++)  //以下是顯示部分,用的是128X64的STN屏。
{
LcdWriteCmd(0XB0+y);
LcdWriteCmd(0X10|(x+i+4)>>4);
LcdWriteCmd(0X0F&(x+i+4));
LcdWriteData(hzbuf[i]);
}
for(j=0;j<16;j++)
{  
LcdWriteCmd(0XB0+y+1);
LcdWriteCmd(0X10|(x+j+4)>>4);
LcdWriteCmd(0X0F&(x+j+4));
LcdWriteData(hzbuf[j+16]);

x=x+16;
}
讀取ASCII編碼并顯示的函數
void Display_GTAscii16(unsignedcharAsciiCode)

    unsignedchari,j;
unsigned long BaseAdd;
    unsigned long Address;
unsignedcharasciibuf[16];
unsignedcharaddr[4];
BaseAdd=0x3B7C0; //以下公式參見GT20L16S1Y規格書的第18頁。
if(AsciiCode>=20 && AsciiCode <= 0x7E)
Address=(AsciiCode-0x20) *16+BaseAdd;
   ZkReadNByte (Address,asciibuf,16);
for(i=0;i<8;i++)
{
LcdWriteCmd(0XB0+y);
LcdWriteCmd(0X10|(x+i+4)>>4);
LcdWriteCmd(0X0F&(x+i+4));
LcdWriteData(asciibuf[i]);
}
for(j=0;j<8;j++)
{  
LcdWriteCmd(0XB0+y+1);
LcdWriteCmd(0X10|(x+j+4)>>4);
LcdWriteCmd(0X0F&(x+j+4));
LcdWriteData(asciibuf[j+8]);

x=x+8;
}
在main函數內的實現方法
Void main()
{
SystemInit();
GenitopZkInit();
Unsignedchar*text=”高通科技ABC”;
While(*text!=”\0”)
{
  If(*text>0x80){
          Display_GTHZ16(*text,*(text++));  //顯示漢字
} else {
          Display_GTAscii16(*text);         //顯示英文Ascii編碼
     }
  Text++;
}
While(1);
}





本文地址:本文地址: //www.mlheo.com/apply/d_1o18kqlvk28f1_1.html

拷貝地址

上一篇:從NAMUR輸出標準的原理看其在物位測量應用的局限性

下一篇:3D ToF技術市場熱度高居不下,系統級解決方案引爆新一輪行業應用浪潮

版權聲明:版權歸中國自動化網所有,轉載請注明出處!