- /**
- * 函数功能: 从SD卡读取GBK码
- * 输入参数: pBuffer:数据保存地址
- * gbk :汉字字符低字节码
- * font:字体选择
- * 可选值:USB_FONT_16 :16号字体
- * USB_FONT_24 :24号字体
- * 返 回 值: uint8_t: 0:读取失败,1:读取成功
- * 说 明:使用该函数之前确保已运行了f_mount(&fs,"0:",1);程序。
- */
- static uint8_t GetGBKCode_SD(unsigned char* pBuffer,const uint8_t *pstr,USB_FONT_Typdef font)
- {
- uint32_t pos;
- uint8_t high8bit,low8bit;
- FRESULT f_res;
- UINT f_num;
-
- high8bit=*pstr;
- low8bit=*(pstr+1);
- if(font==USB_FONT_16)
- {
- // 16*16大小的汉字 其字模 占用16*16/8个字节
- pos=((high8bit-0xa1)*94+low8bit-0xa1)*16*16/8;
- f_res=f_open(&file,"0:/GBK_HZ1616.FON",FA_OPEN_EXISTING|FA_READ);
- }
- else
- {
- // 24*24大小的汉字 其字模 占用24*24/8个字节
- pos=((high8bit-0xa1)*94+low8bit-0xa1)*24*24/8;
- f_res=f_open(&file,"0:/GBK_HZ2424.FON",FA_OPEN_EXISTING|FA_READ);
- }
- if(f_res == FR_OK )
- {
- f_lseek (&file, pos); //指针偏移
- if(font==USB_FONT_16)
- {
- f_res=f_read(&file,pBuffer,32,&f_num);
- }
- else
- {
- f_res=f_read(&file,pBuffer,72,&f_num);
- }
- f_close(&file);
- return 1;
- }
- else
- return 0;
- }
- /**
- * 函数功能: 在 LCD 显示器上显示一个中文
- * 输入参数: usX:在特定扫描方向下字符的起始X坐标
- * usY :在特定扫描方向下该点的起始Y坐标
- * pstr: 汉字字符低字节码
- * usColor_Background :选择英文字符的背景色
- * usColor_Foreground :选择英文字符的前景色
- * font:字体选择
- * 可选值:USB_FONT_16 :16号字体
- * USB_FONT_24 :24号字体
- * 返 回 值: 无
- * 说 明:无
- */
- void LCD_DispCHAR_CH(uint16_t usX,uint16_t usY,const uint8_t *pstr,uint16_t usColor_Background, uint16_t usColor_Foreground,USB_FONT_Typdef font)
- {
- uint8_t ucTemp, ucPage, ucColumn;
- uint8_t gbk_buffer[72];
-
- /* 检查输入参数是否合法 */
- assert_param(IS_FONT(font));
-
- if(font==USB_FONT_16)
- {
- LCD_OpenWindow(usX,usY,16,16);
- LCD_WRITE_CMD(0x2C);
- GetGBKCode_SD(gbk_buffer,pstr,USB_FONT_16);
-
- for(ucPage=0;ucPage<32;ucPage++)
- {
- ucTemp=gbk_buffer[ucPage];
- for(ucColumn=0;ucColumn<8;ucColumn++)
- {
- if(ucTemp&0x01)
- LCD_WRITE_DATA(usColor_Foreground);
- else
- LCD_WRITE_DATA(usColor_Background);
- ucTemp >>= 1;
- }
- }
- }
- else
- {
- LCD_OpenWindow(usX,usY,24,24);
- LCD_WRITE_CMD(0x2C);
- GetGBKCode_SD(gbk_buffer,pstr,USB_FONT_24);
-
- for(ucPage=0;ucPage<72;ucPage++)
- {
- ucTemp=gbk_buffer[ucPage];
- for(ucColumn=0;ucColumn<8;ucColumn++)
- {
- if(ucTemp&0x01)
- LCD_WRITE_DATA(usColor_Foreground);
- else
- LCD_WRITE_DATA(usColor_Background);
- ucTemp >>= 1;
- }
- }
- }
- }
- /**
- * 函数功能: 在 LCD 显示器上显示一串中文
- * 输入参数: usX:在特定扫描方向下字符的起始X坐标
- * usY :在特定扫描方向下该点的起始Y坐标
- * pstr: 汉字字符低字节码
- * usColor_Background :选择英文字符的背景色
- * usColor_Foreground :选择英文字符的前景色
- * font:字体选择
- * 可选值:USB_FONT_16 :16号字体
- * USB_FONT_24 :24号字体
- * 返 回 值: 无
- * 说 明:无
- */
- void LCD_DispString_CH(uint16_t usX,uint16_t usY,const uint8_t *pstr,uint16_t usColor_Background, uint16_t usColor_Foreground,USB_FONT_Typdef font)
- {
- /* 检查输入参数是否合法 */
- assert_param(IS_FONT(font));
-
- while(*pstr != '\0')
- {
- if(font==USB_FONT_16)
- {
- if((usX+16)>LCD_DEFAULT_WIDTH)
- {
- usX = 0;
- usY += 16;
- }
- if((usY+16)>LCD_DEFAULT_HEIGTH)
- {
- usX=0;
- usY=0;
- }
- LCD_DispCHAR_CH(usX,usY,pstr,usColor_Background,usColor_Foreground,USB_FONT_16);
- pstr+=2;
- usX+=16;
- }
- else
- {
- if((usX+24)>LCD_DEFAULT_WIDTH)
- {
- usX = 0;
- usY += 24;
- }
- if((usY+24)>LCD_DEFAULT_HEIGTH)
- {
- usX=0;
- usY=0;
- }
- LCD_DispCHAR_CH(usX,usY,pstr,usColor_Background,usColor_Foreground,USB_FONT_24);
- pstr+=2;
- usX+=24;
- }
- }
- }
- /**
- * 函数功能: 在 LCD 显示器上显示一串中英文
- * 输入参数: usX:在特定扫描方向下字符的起始X坐标
- * usY :在特定扫描方向下该点的起始Y坐标
- * pstr: 汉字字符低字节码
- * usColor_Background :选择英文字符的背景色
- * usColor_Foreground :选择英文字符的前景色
- * font:字体选择
- * 可选值:USB_FONT_16 :16号字体
- * USB_FONT_24 :24号字体
- * 返 回 值: 无
- * 说 明:无
- */
- void LCD_DispString_EN_CH(uint16_t usX,uint16_t usY,const uint8_t *pstr,uint16_t usColor_Background, uint16_t usColor_Foreground,USB_FONT_Typdef font)
- {
- /* 检查输入参数是否合法 */
- assert_param(IS_FONT(font));
-
- while(*pstr != '\0')
- {
- if(*pstr<=0x7f)
- {
- if(font==USB_FONT_16)
- {
- if((usX+8)>LCD_DEFAULT_WIDTH)
- {
- usX = 0;
- usY += 16;
- }
- if((usY+16)>LCD_DEFAULT_HEIGTH)
- {
- usX=0;
- usY=0;
- }
- LCD_DispChar_EN(usX,usY,*pstr,usColor_Background,usColor_Foreground,USB_FONT_16);
- pstr++;
- usX+=8;
- }
- else
- {
- if((usX+12)>LCD_DEFAULT_WIDTH)
- {
- usX=0;
- usY+=24;
- }
- if((usY+24)>LCD_DEFAULT_HEIGTH)
- {
- usX=0;
- usY=0;
- }
- LCD_DispChar_EN(usX,usY,*pstr,usColor_Background,usColor_Foreground,USB_FONT_24);
- pstr++;
- usX+=12;
- }
- }
- else
- {
- if(font==USB_FONT_16)
- {
- if((usX+16)>LCD_DEFAULT_WIDTH)
- {
- usX = 0;
- usY += 16;
- }
- if((usY+16)>LCD_DEFAULT_HEIGTH)
- {
- usX=0;
- usY=0;
- }
- LCD_DispCHAR_CH(usX,usY,pstr,usColor_Background,usColor_Foreground,USB_FONT_16);
- pstr+=2;
- usX+=16;
- }
- else
- {
- if((usX+24)>LCD_DEFAULT_WIDTH)
- {
- usX = 0;
- usY += 24;
- }
- if((usY+24)>LCD_DEFAULT_HEIGTH)
- {
- usX=0;
- usY=0;
- }
- LCD_DispCHAR_CH(usX,usY,pstr,usColor_Background,usColor_Foreground,USB_FONT_24);
- pstr+=2;
- usX+=24;
- }
- }
- }
- }
- /******************* (C) COPYRIGHT 2015-2020 硬石嵌入式开发团队 *****END OF FILE****/