自建字庫調(diào)用方法及范例(RA8876,RA8877)
作者: 發(fā)表日期:2020-09-21 來源: 瀏覽:
- RA8876和RA8877芯片自建字庫的調(diào)用方法如下:
首先需要使用提取字模軟件生成所需文字字庫的頭文件并將其添加到工程,
包含頭文件
#include#include "stm32f10x.h"#include "stdlib.h"#include#include "delay.h"#include "UserDef.h"#include "RA8876.h"#include "RA8876_MCU_IF.h"#include "RA8876_API.h"#include "UserFontROM.h"
添加調(diào)用下列函數(shù)
此函數(shù)列舉了8x16,16x16,16x24,24x24,16x32,32x32字體尺寸的調(diào)用
在下面的應用例程中也都一 一展示了顯示效果
void RA8876_Create_UserDefineFont(unsigned long UDF_Address,const unsigned char UserDefineData[],unsigned short num){/*
UDF_Address: User define font Address.UserDefineData[] / num: the data for user to create the fonts.*/unsigned short temp1,temp2,temp3;unsigned short i;/******************************///(0) Backup memory type //擷取執(zhí)行前的狀態(tài)temp1 = LCD_RegisterRead(0x02);temp2 = LCD_RegisterRead(0x03);temp3 = LCD_RegisterRead(0x5E);/******************************///(1) Set the setting for Create User Define FontMemory_Select_SDRAM();Memory_Linear_Mode();Graphic_Mode();//(1.1) Data format have to set to 8bpp.#if defined (MCU_8bit_ColorDepth_8bpp) || defined (MCU_8bit_ColorDepth_16bpp) || defined (MCU_8bit_ColorDepth_24bpp)Data_Format_8b_8bpp();#endif#if defined (MCU_16bit_ColorDepth_16bpp) || defined (MCU_16bit_ColorDepth_24bpp_Mode_1) || defined (MCU_16bit_ColorDepth_24bpp_Mode_2)Data_Format_16b_8bpp();#endif//(1.2) Data format have to set to 8bpp.Memory_8bpp_Mode();//(2) Set the start address for Create_UserDefine_Font, and write data.Goto_Linear_Addr(UDF_Address);//LCD_CmdWrite(0x04);for(i=0;i<num;i++)
{Check_Mem_WR_FIFO_not_Full();LCD_DataWrite(UserDefineData[i]);}Check_2D_Busy();/******************************///(End) Restore the previous state //復原進子程序之前的狀態(tài)LCD_RegisterWrite(0x02,temp1);LCD_RegisterWrite(0x03,temp2);LCD_RegisterWrite(0x5E,temp3);/******************************/}
void RA8876_Call_UserDefineFont(unsigned short UDF_case,unsigned long UDF_Address,unsigned short UDF_X,unsigned short UDF_Y,unsigned short char_code){/*UDF_case: please key 8*16, 16*16, 12*24, 24*24, 16*32 or 32*32.UDF_Address: User define font Address.UDF_X / UDF_Y: X and Y coordinates 0n the memory area.char_code: Character codes of user define fonts.*///(1) set Font Function // 設定文本屬性//(*)Text_Mode();//(*)Font_Select_UserDefine_Mode();//(*)if( UDF_case == 128 ) //8x16{Font_Select_8x16_16x16();CGRAM_Start_address(UDF_Address);}if( UDF_case == 256 ) //16x16{Font_Select_8x16_16x16();CGRAM_Start_address(UDF_Address);}if( UDF_case == 288 ) //12x24{Font_Select_12x24_24x24();CGRAM_Start_address(UDF_Address);}if( UDF_case == 576 ) //24x24{Font_Select_12x24_24x24();CGRAM_Start_address(UDF_Address);}if( UDF_case == 512 ) //16x32{Font_Select_16x32_32x32();CGRAM_Start_address(UDF_Address);}if( UDF_case == 1024 ) //32x32{Font_Select_16x32_32x32();CGRAM_Start_address(UDF_Address);}//(*)Goto_Text_XY(UDF_X,UDF_Y);//(*)//Half width character code is 0000h~7FFFh,if(UDF_case==128 || UDF_case==288 || UDF_case==512){LCD_CmdWrite(0x04);// character 0x0000Check_Mem_WR_FIFO_not_Full();LCD_DataWrite(char_code>>8);Check_Mem_WR_FIFO_not_Full();LCD_DataWrite(char_code);Check_2D_Busy();}//Full width character code is 8000h~FFFFh.if(UDF_case==256 || UDF_case==576 || UDF_case==1024){LCD_CmdWrite(0x04);// character 0x8000Check_Mem_WR_FIFO_not_Full();LCD_DataWrite(char_code>>8);Check_Mem_WR_FIFO_not_Full();LCD_DataWrite(char_code);Check_2D_Busy();}Graphic_Mode();}
實例DEMO調(diào)用6個字模數(shù)組,并將其按4種比例大小顯示,
void RA8876_Demo_UserDefine_Font(void){/*Half width character code is 0000h~7FFFh,Full width character code is 8000h~FFFFh.*/unsigned long UDF_8x16_Address,UDF_16x16_Address;unsigned long UDF_12x24_Address,UDF_24x24_Address;unsigned long UDF_16x32_Address,UDF_32x32_Address;unsigned short x,y;unsigned char i,j,BGC;//(1) Create User Define Font. // 建立自建字型//(1.a)/* (1) SDRAM=256Mb, address=0x01FF FFFF (byte).(2) Assume that plan 1MB SDRAM memory for storing 8x16 or 16x16 Font data.(3) Assume that plan 1MB SDRAM memory for storing 12x24 or 24x24 Font data.(4) Assume that plan 1MB SDRAM memory for storing 16x32 or 32x32 Font data.*/UDF_8x16_Address = 0x02000000-1024*6; //(byte)UDF_16x16_Address = 0x02000000-1024*5; //(byte)UDF_12x24_Address = 0x02000000-1024*4; //(byte)UDF_24x24_Address = 0x02000000-1024*3; //(byte)UDF_16x32_Address = 0x02000000-1024*2; //(byte)UDF_32x32_Address = 0x02000000-1024*1; //(byte)//(1.b)RA8876_Create_UserDefineFont( UDF_8x16_Address , Demo_UDF_8x16 ,16);RA8876_Create_UserDefineFont( UDF_16x16_Address , Demo_UDF_16x16 ,32);RA8876_Create_UserDefineFont( UDF_12x24_Address , Demo_UDF_12x24 ,48);RA8876_Create_UserDefineFont( UDF_24x24_Address , Demo_UDF_24x24 ,72);RA8876_Create_UserDefineFont( UDF_16x32_Address , Demo_UDF_16x32 ,64);RA8876_Create_UserDefineFont( UDF_32x32_Address , Demo_UDF_32x32 ,128);//(2)Memory_Select_SDRAM();Memory_XY_Mode();Graphic_Mode();Main_Window_Start_XY(0,0);Active_Window_XY(0,0);Active_Window_WH(800,480);//(3) set Font Function // 設定文本屬性//(*)Font_Select_UserDefine_Mode();//(*)Text_Mode();//(*) font colorForeground_RGB(0xFF,0x00,0x00); //設定文字顏色Background_RGB(0x00,0x00,0xFF); //當顯示底色是設定底色//(*)Set_Font_to_Font_Width(0);Font_Line_Distance(0);//(*)for(BGC=0;BGC<2;BGC++)//{if(BGC==0)Font_Background_select_Original_Canvas(); //透明色顯示,及沒有底色if(BGC==1)Font_Background_select_Color(); //有底色顯示//for(i=1;i<=6;i++)//{for(j=1;j<=4;j++)//變更字型倍數(shù){switch(j){case 1 : Font_Width_X1(); Font_Height_X1(); break;case 2 : Font_Width_X2(); Font_Height_X2(); break;case 3 : Font_Width_X3(); Font_Height_X3(); break;case 4 : Font_Width_X4(); Font_Height_X4(); break;}//Text Write positionif(i==1 || i==2){if(i==1) x = 0;if(i==2) x = 8*4;if(j==1) y= 0;if(j==2) y= 0 + 16*1;if(j==3) y= 0 + 16*1 + 16*2;if(j==4) y= 0 + 16*1 + 16*2 + 16*3;}if(i==3 || i==4){if(i==3) x = 8*4+16*4;if(i==4) x = 8*4+16*4+12*4;if(j==1) y= 0;if(j==2) y= 0 + 24*1;if(j==3) y= 0 + 24*1 + 24*2;if(j==4) y= 0 + 24*1 + 24*2 + 24*3;}if(i==5 || i==6){if(i==5) x = 8*4+16*4+12*4+24*4;if(i==6) x = 8*4+16*4+12*4+24*4+16*4;if(j==1) y= 0;if(j==2) y= 0 + 32*1;if(j==3) y= 0 + 32*1 + 32*2;if(j==4) y= 0 + 32*1 + 32*2 + 32*3;}switch(i){case 1 :/*UDF_8x16*/RA8876_Call_UserDefineFont( 8*16 ,UDF_8x16_Address ,x+10*i ,y+10*j ,0x0000 );// 10*i or 10*j : shift 10 pixelbreak;case 2 :/*UDF_16x16*/RA8876_Call_UserDefineFont( 16*16 ,UDF_16x16_Address ,x+10*i ,y+10*j ,0x8000 );// 10*i or 10*j : shift 10 pixelbreak;case 3 :/*UDF_12x24*/RA8876_Call_UserDefineFont( 12*24 ,UDF_12x24_Address ,x+10*i ,y+10*j ,0x0000 );// 10*i or 10*j : shift 10 pixelbreak;case 4 :/*UDF_24x24*/RA8876_Call_UserDefineFont( 24*24 ,UDF_24x24_Address ,x+10*i ,y+10*j ,0x8000 );// 10*i or 10*j : shift 10 pixelbreak;case 5 :/*UDF_16x32*/RA8876_Call_UserDefineFont( 16*32 ,UDF_16x32_Address ,x+10*i ,y+10*j ,0x0000 );// 10*i or 10*j : shift 10 pixelbreak;case 6 :/*UDF_32x32*/RA8876_Call_UserDefineFont( 32*32 ,UDF_32x32_Address ,x+10*i ,y+10*j ,0x8000 );// 10*i or 10*j : shift 10 pixelbreak;}delay_ms(500);}delay_ms(1000);}}}
實例效果
分享到: