单片机作业1_为OLED制作汉字字库_第3部分

1 PC端生成列行式点阵数据

1.1 控制台仿真显示逐行式8x16字符

1.1.1 打印显示1个字节的位模式

void show_binary(char ch){
   
    for(int temp = 0x80; temp; temp >>= 1){
   
        printf("%3c", (ch & temp)? 79 : 96);
    }
}

1.1.2 控制台仿真显示“逐行式” 8x16字符点阵

// "line by line" data
void show_8x16char(unsigned char *arr, int len){
   
    if(len < 16){
   
        return;
    }
    for(int i = 0; i < 16; i++){
   
        show_binary(arr[i]);
        printf("\r\n");
    }
}

1.2 逐行式HZK8x16向列行式转换

// "line by line" scan to "column by line"
void transfer_8x16character(unsigned char *arr, unsigned char *retArr){
   
    int j = 0;
    for(int temp = 0x80; temp; temp >>= 1){
   
        retArr[j] = 0; // Data must be cleared
        for(int i = 0; i < 8; i++){
   
            retArr[j] |= ((arr[i] & temp) ? 1 : 0) << i;
        }
        j++;
    }
    for(int temp = 0x80; temp; temp >>= 1){
   
        retArr[j] = 0;
        for(int i = 8; i < 16; i++){
   
            retArr[j] |= ((arr[i] & temp) ? 1 : 0) << (i - 8);
        }
        j++;
    }
}

1.3 输出列行式点阵数据

void print_buf(unsigned char *buf, int len){
   
    int i = 0;
    for(i = 0; i < len; i++){
   
        printf("0x%.2x,", buf[i]);
        if((i+1) % 16 == 0){
   
            printf("\r\n");
        }
    }
    if(i % 16 != 0){
   
        printf("\r\n");
    }
}

1.4 测试用例

1.4.1 生成 0 ~ 9 列行式数据

代码
int main(int argc, char *argv[]){
   
    unsigned char buf1[16] = {
   0};
    unsigned char buf2[16] = {
   0};

    FILE *pf = fopen(".\\ASC8_16", "r");
    assert(pf != NULL);

    for(int j = '0'; j <= '9'; j++){
   
        long offset = j * 16;
        fseek(pf, offset, 0);
        fread(buf1, 1, 16, pf);

        printf(">>> raw data is: \r\n");
        print_buf(buf1, sizeof(buf1) / sizeof(buf1[0]));
        
        show_8x16char(buf1, sizeof(buf1) / sizeof(buf1[0]));

        transfer_8x16character(buf1, buf2);

        printf("...translated data is: \r\n");
        print_buf(buf2, sizeof(buf2) / sizeof(buf2[0]));
    }
    
    fclose(pf);

    return 0;
}
结果
>>> raw data is: 
0x00,0x00,0x38,0x6c,0xc6,0xc6,0xd6,0xd6,0xc6,0xc6,0x6c,0x38,0x00,0x00,0x00,0x00,
  `  `  `  `  `  `  `  `
  `  `  `  `  `  `  `  `
  `  `  O  O  O  `  `  `
  `  O  O  `  O  O  `  `
  O  O  `  `  `  O  O  `
  O  O  `  `  `  O  O  `
  O  O  `  O  `  O  O  `
  O  O  `  O  `  O  O  `
  O  O  `  `  `  O  O  `
  O  O  `  `  `  O  O  `
  `  O  O  `  O  O  `  `
  `  `  O  O  O  `  `  `
  `  `  `  `  `  `  `  `
  `  `  `  `  `  `  `  `
  `  `  `  `  `  `  `  `
  `  `  `  `  `  `  `  `
...translated data is:
0xf0,0xf8,0x0c,0xc4,0x0c,0xf8,0xf0,0x00,0x03,0x07,0x0c,0x08,0x0c,0x07,0x03,0x00,
>>> raw data is:
0x00,0x00,0x18,0x38,0x78,0x18,0x18,0x18,0x18,0x18,0x18,0x7e,0x00,0x00,0x00,0x00,
  `  `  `  `  `  `  `  `
  `  `  `  `  `  `  `  `
  `  `  `  O  O  `  `  `
  `  `  O  O  O  `  `  `
  `  O  O  O  O  `  `  `
  `  `  `  O  O  `  `  `
  `  `  `  O  O  `  `  `
  `  `  `  O  O  `  `  `
  `  `  `  O  O  `  `  `
  `  `  `  O  O  `  `  `
  `  `  `  O  O  `  `  `
  `  O  O  O  O  O  O  `
  `  `  `  `  `  `  `  `
  `  `  `  `  `  `  `  `
  `  `  `  `  `  `  `  `
  `  `  `  `  `  `  `  `
...translated data is:
0x00,0x10,0x18,0xfc,0xfc,0x00,0x00,0x00,0x00,0x08,0x08,0x0f,0x0f,0x08,0x08,0x00,
>>> raw data is:
0x00,0x00,0x7c,0xc6,0x06,0x0c,0x18,0x30,0x60,0xc0,0xc6,0xfe,0x00,0x00,0x00,0x00,
  `  `  `  `  `  `  `  `
  `  `  `  `  `  `  `  `
  `  O  O  O  O  O  `  `
  O  O  `  `  `  O  O  `
  `  `  `  `  `  O  O  `
  `  `  `  `  O  O  `  `
  `  `  `  O  O  `  `  `
  `  `  O  O  `  `  `  `
  `  O  O  `  `  `  `  `
  O  O  `  `  `  `  `  `
  O  O  `  `  `  O  O  `
  O  O  O  O  O  O  O  `
  `  `  `  `  `  `  `  `
  `  `  `  `  `  `  `  `
  `  `  `  `  `  `  `  `
  `  `  `  `  `  `  `  `
...translated data is:
0x08,0x0c,0x84,0xc4,0x64,0x3c,0x18,0x00,0x0e,0x0f,0x09,0x08,0x08,0x0c,0x0c,0x00,
>>> raw data is:
0x00,0x00,0x7c,0xc6,0x06,0x06,0x3c,0x06,0x06,0x06,0xc6,0x7c,0x00,0x00,0x00,0x00,
  `  `  `  `  `  `  `  `
  `  `  `  `  `  `  `  `
  `  O  O  O  O  O  `  `
  O  O  `  `  `  O  O  `
  `  `  `  `  `  O  O  `
  `  `  `  `  `  O  O  `
  `  `  O  O  O  O  `  `
  `  `  `  `  `  O  O  `
  `  `  `  `  `  O  O  `
  `  `  `  `  `  O  O  `
  O  O  `  `  `  O  O  `
  `  O  O  O  O  O  `  `
  `  `  `  `  `  `  `  `
  `  `  `  `  `  `  `  `
  `  `  `  `  `  `  `  `
  `  `  `  `  `  `  `  `
...translated data is:
0x08,0x0c,0x44,0x44,0x44,0xfc,0xb8,0x00,0x04,0x0c,0x08,0x08,0x08,0x0f,0x07,0x00,
>>> raw data is:
0x00,0x00,0x0c,0x1c,0x3c,0x6c,0xcc,0xfe,0x0c,0x0c,0x0c,0x1e,0x00,0x00,0x00,0x00,
  `  `  `  `  `  `  `  `
  `  `  `  `  `  `  `  `
  `  `  `  `  O  O  `  `
  `  `  `  O  O  O  `  `
  `  `  O  O  O  O  `  `
  `  O  O  `  O  O  `  `
  O  O  `  `  O  O  `  `
  O  O  O  O  O  O  O  `
  `  `  `  `  O  O  `  `
  `  `  `  `  O  O  `  `
  `  `  `  `  O  O  `  `
  `  `  `  O  O  O  O  `
  `  `  `  `  `  `  `  `
  `  `  `  `  `  `  `  `
  `  `  `  `  `  `  `  `
  `  `  `  `  `  `  `  `
...translated data is:
0xc0,0xe0,0xb0,0x98,0xfc,0xfc,0x80,0x00,0x00,0x00,0x00,0x08,0x0f,0x0f,0x08,0x00,
>>> raw data is:
0x00,0x00,0xfe,0xc0,0xc0,0xc0,0xfc,0x06,0x06,0x06,0xc6,0x7c,0x00,0x00,0x00,0x00,
  `  `  `  `  `  `  `  `
  `  `  `  `  `  `  `  `
  O  O  O  O  O  O  O  `
  O  O  `  `  `  `  `  `
  O  O  `  `  `  `  `  `
  O  O  `  `  `  `  `  `
  O  O  O  O  O  O  `  `
  `  `  `  `  `  O  O  `
  `  `  `  `  `  O  O  `
  `  `  `  `  `  O  O  `
  O  O  `  `  `  O  O  `
  `  O  O  O  O  O  `  `
  `  `  `  `  `  `  `  `
  `  `  `  `  `  `  `  `
  `  `  `  `  `  `  `  `
  `  `  `  `  `  `  `  `
...translated data is:
0x7c,0x7c,0x44,0x44,0x44,0xc4,0x84,0x00,0x04,0x0c,0x08,0x08,0x08,0x0f,0x07,0x00,
>>> raw data is:
0x00,0x00,0x38,0x60,0xc0,0xc0,0xfc,0xc6,0xc6,0xc6,0xc6,0x7c,0x00,0x00,0x00,0x00,
  `  `  `  `  `  `  `  `
  `  `  `  `  `  `  `  `
  `  `  O  O  O  `  `  `
  `  O  O  `  `  `  `  `
  O  O  `  `  `  `  `  `
  O  O  `  `  `  `  `  `
  O  O  O  O  O  O  `  `
  O  O  `  `  `  O  O  `
  O  O  `  `  `  O  O  `
  O  O  `  `  `  O  O  `
  O  O  `  `  `  O  O  `
  `  O  O  O  O  O  `  `
  `  `  `  `  `  `  `  `
  `  `  `  `  `  `  `  `
  `  `  `  `  `  `  `  `
  `  `  `  `  `  `  `  `
...translated data is:
0xf0,0xf8,0x4c,0x44,0x44,0xc0,0x80,0x00,0x07,0x0f,0x08,0x08,0x08,0x0f,0x07,0x00,
>>> raw data is:
0x00,0x00,0xfe,0xc6,0x06,0x06,0x0c,0x18,0x30,0x30,0x30,0x30,0x00,0x00,0x00,0x00,
  `  `  `  `  `  `  `  `
  `  `  `  `  `  `  `  `
  O  O  O  O  O  O  O  `
  O  O  `  `  `  O  O  `
  `  `  `  `  `  O  O  `
  `  `  `  `  `  O  O  `
  `  `  `  `  O  O  `  `
  `  `  `  O  O  `  `  `
  `  `  O  O  `  `  `  `
  `  `  O  O  `  `  `  `
  `  `  O  O  `  `  `  `
  `  `  O  O  `  `  `  `
  `  `  `  `  `  `  `  `
  `  `  `  `  `  `  `  `
  `  `  `  `  `  `  `  `
  `  `  `  `  `  `  `  `
...translated data is:
0x0c,0x0c,0x04,0x84,0xc4,0x7c,0x3c,0x00,0x00,0x00,0x0f,0x0f,0x00,0x00,0x00,0x00,
>>> raw data is:
0x00,0x00,0x7c,0xc6,0xc6,0xc6,0x7c,0xc6,0xc6,0xc6,0xc6,0x7c,0x00,0x00,0x00,0x00,
  `  `  `  `  `  `  `  `
  `  `  `  `  `  `  `  `
  `  O  O  O  O  O  `  `
  O  O  `  `  `  O  O  `
  O  O  `  `  `  O  O  `
  O  O  `  `  `  O  O  `
  `  O  O  O  O  O  `  `
  O  O  `  `  `  O  O  `
  O  O  `  `  `  O  O  `
  O  O  `  `  `  O  O  `
  O  O  `  `  `  O  O  `
  `  O  O  O  O  O  `  `
  `  `  `  `  `  `  `  `
  `  `  `  `  `  `  `  `
  `  `  `  `  `  `  `  `
  `  `  `  `  `  `  `  `
...translated data is:
0xb8,0xfc,0x44,0x44,0x44,0xfc,0xb8,0x00,0x07,0x0f,0x08,0x08,0x08,0x0f,0x07,0x00,
>>> raw data is:
0x00,0x00,0x7c,0xc6,0xc6,0xc6,0x7e,0x06,0x06,0x06,0x0c,0x78,0x00,0x00,0x00,0x00,
  `  `  `  `  `  `  `  `
  `  `  `  `  `  `  `  `
  `  O  O  O  O  O  `  `
  O  O  `  `  `  O  O  `
  O  O  `  `  `  O  O  `
  O  O  `  `  `  O  O  `
  `  O  O  O  O  O  O  `
  `  `  `  `  `  O  O  `
  `  `  `  `  `  O  O  `
  `  `  `  `  `  O  O  `
  `  `  `  `  O  O  `  `
  `  O  O  O  O  `  `  `
  `  `  `  `  `  `  `  `
  `  `  `  `  `  `  `  `
  `  `  `  `  `  `  `  `
  `  `  `  `  `  `  `  `
...translated data is:
0x38,0x7c,0x44,0x44,0x44,0xfc,0xf8
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 51单片机OLED显示汉字的方法有很多种。以下是其中一种简单的方法: 首先,需要准备一个OLED显示屏,并连接到51单片机的相应引脚上。然后,我们可以通过库函数来实现OLED显示汉字。 首先,需要将汉字数据转换为字模数据。可以使用一些在线字模转换工具来将汉字转换为相应的字模数据。将字模数据保存到一个数组中。 然后,在51单片机的代码中,使用OLED显示屏的库函数来逐个写入字模数据。可以使用类似OLED_WriteByte()的函数来逐个写入字模数据。将写入的字模数据按照显示的位置写入相应的位置。 还需要设置字体大小和显示位置,可以使用类似OLED_Set_Pos()和OLED_Set_FontSize()的函数来设置。 最后,通过调用OLED刷新函数,将显示的内容刷新到OLED显示屏上即可。 需要注意的是,不同的OLED显示屏可能有不同的库函数和使用方法,所以上述方法只是一种参考。具体的实现需要根据具体的OLED显示屏和库函数来进行调整。 以上是一种简单的51单片机OLED显示汉字的方法。当然,还可以通过其他更复杂的方法来实现,比如使用汉字点阵库来显示汉字等。 ### 回答2: 51单片机是一种常用的单片机,它具有强大的控制能力和广泛的应用领域。而OLED(Organic Light Emitting Diode)显示屏则是一种新型的显示技术,具有发光、高对比度、快速响应等特点。 要在51单片机上实现OLED显示汉字,首先需要一个支持OLED显示的驱动库,我们可以选择一些开源的库或者自行编写驱动代码。这些驱动库通常提供了一系列的函数,可以方便地控制OLED屏幕的初始化、显示设置和数据写入等操作。 接下来,我们需要将要显示的汉字数据转换为相应的点阵码。每个汉字由多个点阵组成,每个点阵由若干个像素点构成。具体转换方法可以参考一些专门的字库软件,通过输入汉字并选择相应的字体,可以得到每个汉字对应的点阵码。 在程序中,我们可以定义一个数组来存储汉字点阵码。通过调用驱动库中的函数,将点阵码写入OLED屏幕的显示缓存区中,然后再将显示缓存区的内容刷新到实际的屏幕上,即可实现OLED显示汉字的效果。 当然,为了方便操作和显示,我们还可以通过设置字库表,将汉字与其对应的点阵码进行一一映射,这样在程序中只需输入汉字即可自动转换为相应的点阵码,简化了操作。 总的来说,51单片机结合OLED显示屏,通过选择适合的驱动库和转换方法,可以实现汉字的显示。这样,我们可以在各种项目中使用这种技术,给用户提供更直观、更友好的界面体验。 ### 回答3: 51单片机是一种常用于嵌入式系统中的微控制器,它具有低成本、低功耗、易学易用等特点,在很多应用领域都得到了广泛的应用。而OLED(Organic Light-Emitting Diode)则是一种新型的显示技术,具有发光亮度高、色彩饱和度好等优势。 要在51单片机上实现OLED显示汉字,主要需要以下步骤: 1.准备相应的硬件设备:51单片机主板、OLED显示屏、连接线等。 2.编写相关的软件程序:利用51单片机的开发环境(如Keil C等),编写程序实现汉字的显示。需要涉及到汉字的点阵库、字库文件的定义,在程序中进行调用和实现。 3.利用相关的库函数:通过编写代码调用相关的库函数,实现汉字的显示。可以利用51单片机相关的库函数或者第三方的库函数,在程序中进行调用和使用。 4.进行OLED显示屏的初始化:提前进行OLED显示屏的初始化设置,包括屏幕的尺寸、亮度、显示位置等参数。 5.编写显示程序:根据需求编写相应的显示程序,将需要显示的汉字传输到OLED显示屏上。 通过以上步骤的实施,就可以在51单片机上实现OLED显示汉字。需要注意的是,考虑到51单片机的存储容量限制,能够显示的汉字数量可能会受到一定的限制,需要根据具体的要求和需求进行合理的选择和设计。 希望以上回答对您有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值