OLED显示汉字|STM32|HAL库|8080模式|正点原子

因为正点原子没有显示汉字的代码,网上我找了好多都感觉没用,要么是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

欢迎留言或者私信交流。

  • 9
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值