找回密码
 立即注册

QQ登录

只需一步,快速开始

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

请教大家一个单片机+OLED屏幕显示程序的问题

[复制链接]
跳转到指定楼层
楼主
ID:691676 发表于 2020-3-7 10:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我在写stc15单片机的OLED显示程序的时候,想参考别的程序,有一个显示字符的子程序有点看不懂,那个y一会加2,一会加1,
//在指定位置显示一个字符,包括部分字符
//x:0~127
//y:0~6
//chr:要显示的字符                        
void OledShowChar(uchar x,uchar y,uchar chr)
{              
        uchar c = 0, i = 0;        
        c = chr-' ';//得到偏移后的值                        
        if(x>Max_Column-1)
        {
                x = 0;
                y = y + 2;
        }
        OledSetPos(x,y);        
        for(i=0;i<8;i++)
                OledWriteByte(CharF8x16[c*16+i],OLED_DATA);

        OledSetPos(x,y+1);
        for(i=0;i<8;i++)
                OledWriteByte(CharF8x16[c*16+i+8],OLED_DATA);
}
                          

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

使用道具 举报

沙发
ID:687694 发表于 2020-3-7 14:18 | 只看该作者
        if(x>Max_Column-1)
        {
                x = 0;
                y = y + 2;
        }
应该是行尾判断,转入下一行。。。
回复

使用道具 举报

板凳
ID:695062 发表于 2020-3-16 22:01 | 只看该作者
lovexulu 发表于 2020-3-7 14:18
if(x>Max_Column-1)
        {
                x = 0;

为什么不是y=y+1呀?
回复

使用道具 举报

地板
ID:419968 发表于 2020-3-17 11:22 | 只看该作者
因为写的是8*16的在字符,字符占2行高所以y=y+2,接下来
  for(i=0;i<8;i++)
                 OledWriteByte(CharF8x16[c*16+i],OLED_DATA);这里写字符的上半部分 占一行

         OledSetPos(x,y+1);  写字符的下半部分, y+1
         for(i=0;i<8;i++)
                 OledWriteByte(CharF8x16[c*16+i+8],OLED_DATA);
回复

使用道具 举报

5#
ID:707815 发表于 2020-3-17 16:12 | 只看该作者
你的字符取模是8*16的,而点阵屏,8行算一页,比如你打一个字符占用了第0页,第1页,那么这一行打印完,下一行要从第2页开始打印,所以这个行数加的是2
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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