找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 67|回复: 2
打印 上一主题 下一主题
收起左侧

请帮忙修改程序 字符显示

[复制链接]
跳转到指定楼层
楼主
ID:891876 发表于 2024-9-16 17:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
这是买OLED屏给的参考程序,但只能显示8x16字符,现在想显示16x32字符请问该怎么改呢?谢谢!
void Display_ASCII8X16(uint x0,uint y0,uchar *s) //显示一个英文字符
{
        int i,j,k,x,y,xx;
       
        unsigned char qm;
       
        long int ulOffset;
       
        char  ywbuf[32],temp[2];

        for(i = 0; i<strlen((char*)s);i++)
        {
                if(((unsigned char)(*(s+i))) >= 161)
                {
                        temp[0] = *(s+i);
                        temp[1] = '\0';
                        return;
                }
               
                else
                {
                        qm = *(s+i);

                        ulOffset = (long int)(qm) * 16;
                       
      for (j = 0; j < 16; j ++)
      {
                                ywbuf[j]=Zk_ASCII8X16[ulOffset+j];
      }
            
      for(y = 0;y < 16;y++)
      {
                for(x=0;x<8;x++)
                {
             k=x % 8;
                       
                                          if(ywbuf[y]&(0x80 >> k))
                                           {
                                                  xx=x0+x+i*8;
                                            PutPixel(xx,y+y0,RED);
                                          }
                                                       
                                   }
      }

                }
        }            
}
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:404160 发表于 2024-9-16 18:46 | 只看该作者
要将8x16字符显示改为16x32字符显示,你需要对原始代码进行一些修改。以下是步骤和代码修改:

1. **修改字符数据集**:首先,你需要确保你有一个16x32的字符数据集。这意味着每个字符将占用32个字节而不是原来的16个字节。

2. **修改偏移量计算**:由于每个字符现在占用32个字节,你需要调整偏移量的计算。

3. **修改显示逻辑**:你需要调整显示逻辑以适应新的字符大小。

以下是修改后的代码示例:

```c
void Display_ASCII16X32(uint x0,uint y0,uchar *s) //显示一个英文字符
{
    int i, j, k, x, y, xx;
    unsigned char qm;

    long int ulOffset;

    char  ywbuf[64]; // 每个字符32个字节

    for(i = 0; i<strlen((char*)s);i++)
    {
        if(((unsigned char)(*(s+i))) >= 161)
        {
            return; // 非ASCII字符处理
        }
        else
        {
            qm = *(s+i);

            ulOffset = (long int)(qm) * 32; // 每个字符32个字节

            for (j = 0; j < 32; j ++) // 每个字符32行
            {
                ywbuf[j] = Zk_ASCII16X32[ulOffset + j]; // 假设你有一个16x32的字符数据集
            }

            for(y = 0; y < 32; y++) // 每个字符32行
            {
                for(x = 0; x < 16; x++) // 每个字符16列
                {
                    k = x % 8;

                    if(ywbuf[y] & (0x80 >> k))
                    {
                        xx = x0 + x + i * 16; // 每个字符宽度为16
                        PutPixel(xx, y + y0, RED);
                    }
                }
            }
        }
    }
}
```

### 关键修改点:
1. **字符数据集**:假设你有一个名为 `Zk_ASCII16X32` 的数据集,它包含16x32的字符数据。
2. **偏移量计算**:`ulOffset = (long int)(qm) * 32;` 每个字符32个字节。
3. **显示逻辑**:`for(y = 0; y < 32; y++)` 和 `for(x = 0; x < 16; x++)` 分别处理32行和16列。

### 注意事项:
- 确保你的 `Zk_ASCII16X32` 数据集是正确的,并且每个字符占用32个字节。
- 调整 `PutPixel` 函数以适应新的显示尺寸。
- 根据你的硬件和库函数,可能需要进一步调整代码。

通过这些修改,你应该能够将显示从8x16字符改为16x32字符。
回复

使用道具 举报

板凳
ID:891876 发表于 2024-9-17 08:55 | 只看该作者
飞云居士 发表于 2024-9-16 18:46
要将8x16字符显示改为16x32字符显示,你需要对原始代码进行一些修改。以下是步骤和代码修改:

1. **修改 ...

谢谢辛苦了!有了您的详细注释示范程序对学习有很大帮助
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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