因为正点原子没有显示汉字的代码,网上我找了好多都感觉没用,要么是IIC/SPI的,要么是使用标准库,没有使用Hal库的要么是字符取模方式不一样的等等等等,基于以上种种原因,我便自己来浅浅的摸索了一下,索性写了一个使用OLED模块显示汉字的代码。
好了废话不多说,直接上代码。
oled.c文件添加下面代码
/**
* @brief 在指定位置显示汉字
* @param x0 : 0~127
* @param y0 : 0~7
* @param len: 汉字个数
* @retval 无
*/
void oled_show_chinese(int x0,int y0,int len)
{
uint8_t temp;
int i,j;
int x=x0;
int y=y0;
int t=y;
if(x>=128 || y>=8)
{
return;
}
for(i=0;i<(len*2);i++)
{
for(j=0;j<16;j++)
{
if(y>=(t+2)) y=t;
if(j%2==0 && j!=0) x++;
temp = china[i][j];
g_oled_gram[x][y] = temp;
y++;
}
}
}
oled.h 文件添加下面代码
void oled_show_chinese(int x0,int y0,int len);
oledfont.h添加下面代码
const unsigned char china[18][16] = {
{0x00,0x00,0x10,0x40,0x10,0x40,0x14,0x50,0xD4,0x57,0x54,0x55,0x54,0x55,0x54,0x55},
{0xFC,0x7F,0x52,0x55,0x52,0x55,0x52,0x55,0xD3,0x57,0x12,0x50,0x10,0x40,0x10,0x40},/*"重",0*/
{0x00,0x00,0x00,0x40,0x00,0x30,0xFC,0x0F,0x04,0x80,0x84,0x40,0x84,0x20,0x84,0x18},
{0x85,0x06,0xF6,0x01,0x84,0x06,0x84,0x18,0x84,0x20,0x84,0x40,0x84,0x80,0x04,0x80},/*"庆",1*/
{0x00,0x00,0x00,0x00,0xF8,0x7F,0x08,0x21,0x08,0x21,0xFF,0x3F,0x08,0x21,0x08,0x21},
{0xF8,0x7F,0x00,0x00,0xFE,0xFF,0x02,0x08,0x22,0x10,0xDA,0x08,0x06,0x07,0x00,0x00},/*"邮",2*/
{0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x1F,0x88,0x08,0x88,0x08,0x88,0x08,0x88,0x08},
{0xFF,0x7F,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0xF8,0x9F,0x00,0x80,0x00,0xF0},/*"电",3*/
{0x00,0x00,0x20,0x80,0x20,0x80,0x20,0x40,0x20,0x20,0x20,0x10,0x20,0x0C,0x20,0x03},
{0xFF,0x00,0x20,0x03,0x20,0x0C,0x20,0x10,0x20,0x20,0x20,0x40,0x20,0x80,0x20,0x80},/*"大",4*/
{0x00,0x00,0x40,0x04,0x30,0x04,0x11,0x04,0x96,0x04,0x90,0x04,0x90,0x44,0x91,0x84},
{0x96,0x7E,0x90,0x06,0x90,0x05,0x98,0x04,0x14,0x04,0x13,0x04,0x50,0x04,0x30,0x04},/*"学",5*/
{0x00,0x20,0x12,0x10,0x22,0x08,0x42,0x06,0x82,0x01,0x62,0x06,0x1E,0x18,0x00,0x00},
{0x00,0x00,0xFE,0xFF,0x02,0x08,0x22,0x10,0xDA,0x08,0x06,0x07,0x00,0x00,0x00,0x00},/*"邓",0*/
{0x04,0x80,0x04,0x40,0x04,0x20,0x04,0x18,0x04,0x06,0xFC,0x01,0x44,0x00,0x44,0x00},
{0x44,0x40,0x44,0x80,0x44,0x40,0xC4,0x3F,0x04,0x00,0x04,0x00,0x04,0x00,0x00,0x00},/*"万",1*/
{0x10,0x00,0x0C,0x40,0x44,0x46,0x54,0x25,0x4C,0x24,0x44,0x14,0x45,0x14,0x46,0x4C},
{0x44,0x84,0xC4,0x7F,0x4C,0x04,0x54,0x04,0x44,0x04,0x54,0x04,0x0C,0x04,0x00,0x00},/*"穿",2*/
};
在main.c文件,while循环之前,添加下面代码
oled_clear();
oled_show_chinese(0,2,9);
oled_refresh_gram();
点击编译,下载,观察到如下实验现象。
实验完毕。
原理讲解
不讲了,CSDN上面太多了。
代码讲解
void oled_show_chinese(int x0,int y0,int len)函数讲解
代码:
void oled_show_chinese(int x0,int y0,int len)
{
uint8_t temp;
int i,j;
int x=x0;
int y=y0;
int t=y;
if(x>=128 || y>=8)
{
return;
}
for(i=0;i<(len*2);i++)
{
for(j=0;j<16;j++)
{
if(y>=(t+2)) y=t;
if(j%2==0 && j!=0) x++;
temp = china[i][j];
g_oled_gram[x][y] = temp;
y++;
}
}
}
不想打字,直接看我的视频吧。
传送门:OLED显示汉字代码讲解_哔哩哔哩_bilibili
欢迎留言或者私信交流。