分享一个0.96的oled显示驱动,软件模拟spi和i2c

2019-07-20 00:59发布

比完赛,整理了一下备赛期间的调试工具,个人感觉比较好用的;
-- 1、寄存器部分参考了原子和网上其他大佬的代码,稍作修改;
-- 2、可快速更改控制引脚和控制方式(spi和i2c),在.h文件中修改即可;
-- 3、对字符显示进行优化,目前可显示字符、字符串、符号十进制、可选精度小数、十六进制...
-- 4、封装了绘图函数,绘制圆、椭圆等;
-- 5、封装对屏操作函数,移屏、翻转等,可用于制作菜单;

*声明:
-- 1、借鉴了其他人的代码,这里就不一一感谢了,总之很多;
-- 2、个人添加的内容也是在网上找不见(可能只有我找不见),然后参考一些算法写的,可能写的不正确,也请各位大佬们改正,在此感谢;
-- 3、如有任何问题,欢迎一起交流学习;


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
44条回答
Anyint
2019-07-22 21:25
楼主写的OLED很强大,谢谢分享。小弟不才提出一些建议,我是用中国景电子园的显示屏的,他家的字库用楼主的代码调用会失败,比如这个显示中文的函数,需要修改一下部分内容才能正常显示,特殊的地方已在代码中注释过了。

oled_coord_handle oled_displaygb2312(u8 Xcoor, u8 Ycoor, u8 *HANZI, u8 Cover)
{
        u8  page=0,part=0,col=0;
        u16 hz_num=0;
       
        while(*(HANZI++)!='')//字符串结尾会自动补""作为结束符号,所以判断''即可
        {
                hz_num++;
        }
       
        hz_num >>= 1;//即hz_num/16,显示汉字个数
       
        for(page=0;page<2;page++)                        //页显示
        {       
                for(part=0;part<hz_num;part++)        //汉字个数16*16
                {
                        for(col=0;col<16;col++)                //列显示
                        {
                                if(Cover)
                                {
                                        oled_gram[col + ((Xcoor+part)<<4)][Ycoor+page] |= Hzk[*(HANZI)*2+page][col];//针对那个中国景电子园的OLED屏幕的字库,要修改二维数组的下标。
                                }else{
                                        oled_gram[col + ((Xcoor+part)<<4)][Ycoor+page] = Hzk[*(HANZI)*2+page][col];
                                }
                        }
                }
        }       
        //这里有一行更新函数,我放在别的地方了
        return oled_coordval(Xcoor<<3, Ycoor<<2, ((Xcoor+hz_num-1)<<4)+7, (Ycoor<<2)+1);//这句话没怎么看明白,以后用到移动屏幕了在问问楼主
}

我改了一下之后还是有BUG的,如果字符串在字库文件中没有,数组下标就会溢出,程序会进入数据溢出中断,这个问题我想通过中间数组的形式,让数组中存放汉字字形码的序号和汉字对上,这样方便调用,回头再研究下。再次感谢楼主~~向大佬致敬。

一周热门 更多>