打印
[PIC®/AVR®/dsPIC®产品]

PIC16F18446开发板测评__OLED屏显示

[复制链接]
2463|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jinglixixi|  楼主 | 2019-12-16 22:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 jinglixixi 于 2019-12-16 22:18 编辑

PIC16F18446开发板是一块外设简单的最小系统板,在熟悉GPIO口的使用方法后,可以采用模拟I2C接口的方式来驱动OLED屏进行显示,其显示效果如图1和图2所示。
图1 6*8点阵字模显示



图2  8*16点阵字模显示

在编写程序前,用MCC可对使用的引脚进行设置,见图3所示。

图3  设置OLED屏引脚

为识读的方便,可对使用的引脚加以重新命名,如PB5为SCL,PB7为SDA。


OLED屏的初始化函数为:
void OLED_Init(void)
{
        __delay_ms(50);
        OLED_WrCmd(0xae);//--turn off oled panel
        OLED_WrCmd(0x00);//---set low column address
        OLED_WrCmd(0x10);//---set high column address
        OLED_WrCmd(0x40);//--set start line address  Set Mapping RAM Display Start Line (0x00~0x3F)
        OLED_WrCmd(0x81);//--set contrast control register
        OLED_WrCmd(Brightness); // Set SEG Output Current Brightness
        OLED_WrCmd(0xa1);//--Set SEG/Column Mapping     0xa0×óÓÒ·´ÖÃ 0xa1Õý³£
        OLED_WrCmd(0xc8);//Set COM/Row Scan Direction   0xc0ÉÏÏ·´Öà 0xc8Õý³£
        OLED_WrCmd(0xa6);//--set normal display
        OLED_WrCmd(0xa8);//--set multiplex ratio(1 to 64)
        OLED_WrCmd(0x3f);//--1/64 duty
        OLED_WrCmd(0xd3);//-set display offset        Shift Mapping RAM Counter (0x00~0x3F)
        OLED_WrCmd(0x00);//-not offset
        OLED_WrCmd(0xd5);//--set display clock divide ratio/oscillator frequency
        OLED_WrCmd(0x80);//--set divide ratio, Set Clock as 100 Frames/Sec
        OLED_WrCmd(0xd9);//--set pre-charge period
        OLED_WrCmd(0xf1);//Set Pre-Charge as 15 Clocks & Discharge as 1 Clock
        OLED_WrCmd(0xda);//--set com pins hardware configuration
        OLED_WrCmd(0x12);
        OLED_WrCmd(0xdb);//--set vcomh
        OLED_WrCmd(0x40);//Set VCOM Deselect Level
        OLED_WrCmd(0x20);//-Set Page Addressing Mode (0x00/0x01/0x02)
        OLED_WrCmd(0x02);//
        OLED_WrCmd(0x8d);//--set Charge Pump enable/disable
        OLED_WrCmd(0x14);//--set(0x10) disable
        OLED_WrCmd(0xa4);// Disable Entire Display On (0xa4/0xa5)
        OLED_WrCmd(0xa6);// Disable Inverse Display On (0xa6/a7)
        OLED_WrCmd(0xaf);//--turn on oled panel
        OLED_Fill(0x00);
        OLED_Set_Pos(0,0);
}


相应的字符串显示函数为:
void OLED_P8x16Str(unsigned char x,unsigned char y,unsigned char ch[])
{
        unsigned char c=0,i=0,j=0;
        while (ch[j]!='\0')
        {
                c =ch[j]-32;
                if(x>120){x=0;y++;}
                OLED_Set_Pos(x,y);
                for(i=0;i<8;i++)
                OLED_WrDat(F8X16[c*16+i]);
                OLED_Set_Pos(x,y+1);
                for(i=0;i<8;i++)
                OLED_WrDat(F8X16[c*16+i+8]);
                x+=8;
                j++;
        }
}


图示效果的主程序为:
void main(void)
{

    SYSTEM_Initialize();
    OLED_Init();
    __delay_ms(20);
    OLED_CLS();
    OLED_P8x16Str(0,0,"PIC16F18446");
    OLED_P8x16Str(0,2,"OLED Display");
    OLED_P8x16Str(0,4,"jinglixixi");
    OLED_P8x16Str(0,6,"2019.12.16");
   
    while (1)
    {
      led0_Toggle();        // LED ON
      __delay_ms(200);   // 1 Second Delay
    }
   
}





图4  程序界面

经编译处理,将生成的HEX文件复制到虚拟U盘即可见到显示效果。  

使用特权

评论回复
沙发
小明的同学| | 2019-12-17 21:37 | 只看该作者
牛,这是个很好的模拟串口的教程啊。

使用特权

评论回复
板凳
jinglixixi|  楼主 | 2019-12-18 07:43 | 只看该作者
小明的同学 发表于 2019-12-17 21:37
牛,这是个很好的模拟串口的教程啊。

感谢支持!

使用特权

评论回复
地板
渔夫的烟斗| | 2019-12-20 19:41 | 只看该作者
这个应该不是模拟口吧?是不是这是还没有配置前的图片?另外 i2c实现的代码是要用户自己再写还是MCC中有带?

使用特权

评论回复
5
wangdanq| | 2019-12-20 21:19 | 只看该作者
谢谢分享   我正在学习 mplabx ide xc8  网上程序例子  经过编程  出现一些错误  不知 是 软件安装 不对,  还是设置  不对,能否看一下 你的完整程序  非常感谢!

使用特权

评论回复
6
jinglixixi|  楼主 | 2019-12-21 08:52 | 只看该作者
wangdanq 发表于 2019-12-20 21:19
谢谢分享   我正在学习 mplabx ide xc8  网上程序例子  经过编程  出现一些错误  不知 是 软件安装 不对,  ...

你测试一下这个工程,以便分析出问题。

hello_led_16F18446.zip

22.93 KB

使用特权

评论回复
7
jinglixixi|  楼主 | 2019-12-21 08:57 | 只看该作者
渔夫的烟斗 发表于 2019-12-20 19:41
这个应该不是模拟口吧?是不是这是还没有配置前的图片?另外 i2c实现的代码是要用户自己再写还是MCC中有带 ...

见图3将PB5设为SCL,PB7设为SDA,以I/O口模拟的i2c,其实现的代码是用户自己编写的,用MCC没法给出!

使用特权

评论回复
8
dongnanxibei| | 2019-12-21 10:25 | 只看该作者
多谢楼主分享的工程,学习一下GPIO模拟

使用特权

评论回复
9
21mengnan| | 2019-12-26 15:23 | 只看该作者
非常优秀,学习一下。

使用特权

评论回复
10
jinglixixi|  楼主 | 2019-12-30 11:15 | 只看该作者
21mengnan 发表于 2019-12-26 15:23
非常优秀,学习一下。

感谢支持!

使用特权

评论回复
11
hhhahhh| | 2021-6-15 15:57 | 只看该作者
你好,现在我正在做一个pic32驱动OLED的实验,能否参考一下您的代码呢?之前的那个zip文件格式损坏了

使用特权

评论回复
12
jinglixixi|  楼主 | 2021-6-16 07:42 | 只看该作者
hhhahhh 发表于 2021-6-15 15:57
你好,现在我正在做一个pic32驱动OLED的实验,能否参考一下您的代码呢?之前的那个zip文件格式损坏了 ...

参考这个吧
【CuriosityNano测评报告】+I2C接口的OLED屏显示
https://bbs.21ic.com/icview-3138266-1-1.html

使用特权

评论回复
13
dql2015| | 2021-6-16 13:09 | 只看该作者
非常优秀,学习一下

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

464

主题

2780

帖子

38

粉丝