求oled显示SPI四线显示汉字的程序

2019-07-20 08:26发布

弄了两天怎么改都改不正确,想找一个来参考参考,望各位大神给助攻!!!!!不胜感激!!!!!
 显示汉字,画点函数需要改吗 ?个人认为不改不知道对吗?
void OLED_DrawPoint(u8 x,u8 y,u8 t)
{
u8 pos,bx,temp=0;
if(x>127||y>63)return;//????·??§??.
pos=7-y/8;
bx=y%8;
temp=1<<(7-bx);
if(t)OLED_GRAM[x][pos]|=temp;
else OLED_GRAM[x][pos]&=~temp;    



字符显示部分  
void OLED_ShowChar(u8 x,u8 y,u8 chr,u8 size,u8 mode)
{          
u8 temp,t,t1;
u8 y0=y;
chr=chr-' ';//?????????ó????   
    for(t=0;t<size;t++)
    {   
if(size==12)temp=oled_asc2_1206[chr][t];  //?÷??1206×???
else temp=oled_asc2_1608[chr][t]; //?÷??1608×???                          
        for(t1=0;t1<8;t1++)
{
if(temp&0x80)OLED_DrawPoint(x,y,mode);        这一句的if里面为什么要和0x80按位与呢?
else OLED_DrawPoint(x,y,!mode);
temp<<=1;
y++;
if((y-y0)==size)
{
y=y0;
x++;
break;
}
}    
    }          
}





















友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
7条回答
正点原子
1楼-- · 2019-07-20 09:51
这是根据字模取模方式确定的。
你可以自己写一个函数,能用就行。
八度空间
2楼-- · 2019-07-20 14:16
[mw_shl_code=c,true]/** ***************************************************************************** * 汉字显示 * * (C) Copyright 2000-2020, *** * All Rights Reserved ***************************************************************************** * * @File : GBKtest.c * @By : Sam Chan * @Version : V1.0 * @Date : 2014 / 09 / 23 * ***************************************************************************** * Update * @Version : V1.* * @By : *** * @Date : 20** / ** / ** * @Brief : *** * ***************************************************************************** **/ #include "gbktest.h" #include "ff.h" #include "oled.h" /****************************************************************************** 文件系统路径定义 ******************************************************************************/ const u8 *GBK_FontPath[FatPath][FontSize] = { /* SD卡路径 */ { "0:/SYSTEM/FONT/GBK12.FON", "0:/SYSTEM/FONT/GBK16.FON", "0:/SYSTEM/FONT/GBK24.FON", "0:/SYSTEM/FONT/GBK32.FON", }, /* flash路径 */ { "1:/SYSTEM/FONT/GBK12.FON", "1:/SYSTEM/FONT/GBK16.FON", "1:/SYSTEM/FONT/GBK24.FON", "1:/SYSTEM/FONT/GBK32.FON", }, }; static u8 GBK_Buffer[128]; //一个汉字数据大小 /** ***************************************************************************** * @Name : 读取字库中汉字的数据 * * @Brief : none * * @Input : *GBK: 输入的汉字 * path: 字库路径 * Size: 汉字大小 * * @Output : GBK_OutBuf: 数据输出缓存 * * @Return : none ***************************************************************************** **/ static void Get_GBKData(const u8 *GBK, u8 path, u8 Size, u8 *GBK_OutBuf) { FIL filefont; //文件指针 UINT brf; //读取变量 FRESULT res; //函数操作应答 unsigned char g_size=0; unsigned char GBKH,GBKL; unsigned char csize=0; unsigned long foffset=0; //汉字首地址 csize = (Size/8 + ((Size%8)?1:0)) * Size; //得到一个字符占用集的字节大小 GBKH = *GBK; //高8位 GBKL = *(++GBK); //低8位 if(GBKL < 0x7f) foffset = ((GBKH - 0x81) * 190 + GBKL - 0x40) * csize;//(Size * 2); if(GBKL > 0x80) foffset = ((GBKH - 0x81) * 190 + GBKL - 0x41) * csize;//(Size * 2); switch(Size) { case 12: g_size = GBK12; break; case 16: g_size = GBK16; break; case 24: g_size = GBK24; break; case 32: g_size = GBK32; break; default: break; } res = f_open(&filefont, (const TCHAR*)GBK_FontPath[path][g_size], FA_READ); //只读 if(res != FR_OK) //打开失败 { printf("The GBK Open File Res:%d ", (u8)res); f_close(&filefont); //关闭文件 return; //结束访问 } else { res = f_lseek(&filefont, foffset); //偏移指针 res = f_read(&filefont, GBK_OutBuf, csize, &brf); //读取数据 res = f_close(&filefont); //关闭文件 } } /** ***************************************************************************** * @Name : 指定位置显示一个中文字符 * * @Brief : none * * @Input : (x, y): 起点坐标 * width: 宽度 * height: 高度 * *GBK: 要显示中文字符 * size: 字体大小 * mode: 显示模式。0: 不叠加显示;1: 叠加显示。 * * @Output : none * * @Return : none ***************************************************************************** **/ /* 解码模式 +------------> | | |/ */ void Draw_GBK(u16 x, u16 y, u16 width, u16 height, u8 *GBK, u8 size, u8 mode) { static u8 *GBKBUF; u8 GBKtemp=0; u8 csize=0; u16 i=0,j=0; u16 x0=x; GBKBUF = GBK_Buffer; if((*GBK == 0) || (x > 127) || (y > 63) || ((size != 12) && (size != 16) && (size != 24) && (size != 32))) { return; } csize = (size/8 + ((size%8)?1:0)) * size; //得到一个字符占用集的字节大小 Get_GBKData(GBK, SDPath, size, GBKBUF); //读取数据 for(i = 0;i < csize;i++) { GBKtemp = GBKBUF; //得到汉字点阵数据 for(j = 0;j < 8;j++) { if(GBKtemp & 0x80) OLED_DrawPoint(x, y, mode); //LCD_FastDrawPoint(x, y, lcd_dev._lcdobj.textcol); else if(mode == 0) OLED_DrawPoint(x, y, !mode); //LCD_FastDrawPoint(x, y, lcd_dev._lcdobj.backcol); GBKtemp <<= 1; x++; if(x - x0 == size) //显示完一行了 { x = x0; //恢复x坐标 y++; //显示下一行 break; } } //end for j } //end for i } /** ***************************************************************************** * @Name : 指定位置显示一个中文字符串 * * @Brief : none * * @Input : (x, y): 起点坐标 * width: 宽度 * height: 高度 * *str: 要显示中文字符 * size: 字体大小 * mode: 显示模式。0: 不叠加显示;1: 叠加显示。 * * @Output : none * * @Return : none ***************************************************************************** **/ void Show_GBKString(u16 x, u16 y, u16 width, u16 height, u8 *str, u8 size, u8 mode) { u8 x0=x; while(*str != '') //直到遇到结束符 { if((x + size) > width) //换行 { x = x0; y += size; } if((y + size) > height) break; //越界,返回 Draw_GBK(x, y, width, height, str, size, mode); //显示这个汉字 str += 2; x += size; //偏移到下一个汉字 } } [/mw_shl_code]
青苹果PAD
3楼-- · 2019-07-20 15:56
 精彩回答 2  元偷偷看……
八度空间
4楼-- · 2019-07-20 19:05
明天给你整一个
Mrwang7176
5楼-- · 2019-07-20 20:48
画点的函数能用么,,,为什么我不能显示啊
萨克斯
6楼-- · 2019-07-21 02:42
 精彩回答 2  元偷偷看……

一周热门 更多>