OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3943|回复: 1

驱动ssd1322 12864OLED屏怎么显示汉字呢

[复制链接]

7

主题

33

帖子

0

精华

初级会员

Rank: 2

积分
92
金钱
92
注册时间
2021-1-10
在线时间
28 小时
发表于 2022-4-2 16:17:41 | 显示全部楼层 |阅读模式
最近在使用stm32驱动ssd1322驱动的OLED屏,128*64的,但是一直不知道怎么显示汉字。打算用例程给的5*7的字模显示拼成16*16的,但是尝试拼成8*16的数字的时候,发现上下部分一直有偏移,最后是通过string函数显示的
//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
//  Show Character (5x7)
//
//    a: Database
//    b: Ascii
//    c: Start X Address
//    d: Start Y Address
//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
void_t soled_show_font57(byte_t a, byte_t b, byte_t c, byte_t d)
{
    const byte_t* Src_Pointer;
    byte_t i,Font,FB,SB;
    byte_t temp;
    switch(a)
    {
    case 1:
        Src_Pointer = &CONST_FONT_ASC_ROMAN_5X7[(b-1)][0];
        break;
    case 2:
        Src_Pointer = &CONST_FONT_ASC_8X16[(b-1)][0];
        break;
    }
    ssd_set_remap_format(0x17);
    for(i = 0; i <= 4; i++)
    {
        FB = *Src_Pointer;
        Src_Pointer++;
        if(i == 4)
        {
            SB=0x00;
        }
        else
        {
            SB=*Src_Pointer;
            Src_Pointer++;
        }
         ssd_set_col_addr(XSHIFT+c, XSHIFT+c);
        ssd_set_row_addr(d,d+15);
        ssd_set_ram_write();

        Font=(FB&0x01)<<7;
        Font=(Font==0)?0x00:0xFF;
        //Font=Font|(Font<<1)|(Font<<2)|(Font<<3)|(Font<<4)|(Font<<5)|(Font<<6)|(Font<<7);
        ssd_write_data(Font);
        Font=(SB&0x01)<<7;
        Font=(Font==0)?0x00:0xFF;
        ssd_write_data(Font);

        Font=(FB&0x02)<<6;
        Font=(Font==0)?0x00:0xFF;
        ssd_write_data(Font);
        Font=(SB&0x02)<<6;
        Font=(Font==0)?0x00:0xFF;
        ssd_write_data(Font);

        Font=(FB&0x04)<<5;
        Font=(Font==0)?0x00:0xFF;
        ssd_write_data(Font);
        Font=(SB&0x04)<<5;
        Font=(Font==0)?0x00:0xFF;
        ssd_write_data(Font);

        Font=(FB&0x08)<<4;
        Font=(Font==0)?0x00:0xFF;
        ssd_write_data(Font);
        Font=(SB&0x08)<<4;
        Font=(Font==0)?0x00:0xFF;
        ssd_write_data(Font);

        Font=(FB&0x10)<<3;
        Font=(Font==0)?0x00:0xFF;
        ssd_write_data(Font);
        Font=(SB&0x10)<<3;
        Font=(Font==0)?0x00:0xFF;
        ssd_write_data(Font);

        Font=(FB&0x20)<<2;
        Font=(Font==0)?0x00:0xFF;
        ssd_write_data(Font);
        Font=(SB&0x20)<<2;
        Font=(Font==0)?0x00:0xFF;
        ssd_write_data(Font);

        Font=(FB&0x40)<<1;
        Font=(Font==0)?0x00:0xFF;
        ssd_write_data(Font);
        Font=(SB&0x40)<<1;
        Font=(Font==0)?0x00:0xFF;
        ssd_write_data(Font);

        Font=FB&0x80;
        Font=(Font==0)?0x00:0xFF;
        ssd_write_data(Font);
        Font=SB&0x80;
        Font=(Font==0)?0x00:0xFF;
        ssd_write_data(Font);

        FB =*Src_Pointer+0x08;
        SB=*Src_Pointer+0x08;
        c++;
    }
        for(i = 0; i <= 4; i++)
    {
        FB = *Src_Pointer;
        Src_Pointer++;
        if(i == 4)
        {
            SB=0x00;
        }
        else
        {
            SB=*Src_Pointer;
            Src_Pointer++;
        }
        ssd_set_col_addr(XSHIFT + temp, XSHIFT + temp);
        ssd_set_row_addr(d+8,d+8+15);
        ssd_set_ram_write();

        Font=(FB&0x01)<<7;
        Font=(Font==0)?0x00:0xFF;
        //Font=Font|(Font<<1)|(Font<<2)|(Font<<3)|(Font<<4)|(Font<<5)|(Font<<6)|(Font<<7);
        ssd_write_data(Font);
        Font=(SB&0x01)<<7;
        Font=(Font==0)?0x00:0xFF;
        ssd_write_data(Font);

        Font=(FB&0x02)<<6;
        Font=(Font==0)?0x00:0xFF;
        ssd_write_data(Font);
        Font=(SB&0x02)<<6;
        Font=(Font==0)?0x00:0xFF;
        ssd_write_data(Font);

        Font=(FB&0x04)<<5;
        Font=(Font==0)?0x00:0xFF;
        ssd_write_data(Font);
        Font=(SB&0x04)<<5;
        Font=(Font==0)?0x00:0xFF;
        ssd_write_data(Font);

        Font=(FB&0x08)<<4;
        Font=(Font==0)?0x00:0xFF;
        ssd_write_data(Font);
        Font=(SB&0x08)<<4;
        Font=(Font==0)?0x00:0xFF;
        ssd_write_data(Font);

        Font=(FB&0x10)<<3;
        Font=(Font==0)?0x00:0xFF;
        ssd_write_data(Font);
        Font=(SB&0x10)<<3;
        Font=(Font==0)?0x00:0xFF;
        ssd_write_data(Font);

        Font=(FB&0x20)<<2;
        Font=(Font==0)?0x00:0xFF;
        ssd_write_data(Font);
        Font=(SB&0x20)<<2;
        Font=(Font==0)?0x00:0xFF;
        ssd_write_data(Font);

        Font=(FB&0x40)<<1;
        Font=(Font==0)?0x00:0xFF;
        ssd_write_data(Font);
        Font=(SB&0x40)<<1;
        Font=(Font==0)?0x00:0xFF;
        ssd_write_data(Font);

        Font=FB&0x80;
        Font=(Font==0)?0x00:0xFF;
        ssd_write_data(Font);
        Font=SB&0x80;
        Font=(Font==0)?0x00:0xFF;
        ssd_write_data(Font);

        temp++;
    }
    ssd_set_remap_format(0x16);
}



//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
//  Show String
//
//    d: Database
//    x: Start X Address
//    y: Start Y Address
//    * Must write "0" in the end...
//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
void_t soled_show_string(byte_t x, byte_t y, byte_t *pstr, byte_t d)
{
    byte_t *Src_Pointer;
    Src_Pointer=pstr;
    // No-Break Space,Must be written first before the string start...
    soled_show_font57(1, 96, x, y);        
    while(1)
    {
        soled_show_font57(d, *Src_Pointer, x, y);
        Src_Pointer++;
        x += 4;
        if(*Src_Pointer == 0) break;
    }
}


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

7

主题

33

帖子

0

精华

初级会员

Rank: 2

积分
92
金钱
92
注册时间
2021-1-10
在线时间
28 小时
 楼主| 发表于 2022-4-7 15:43:18 | 显示全部楼层
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-25 21:28

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表