打印
[创客交流]

【Navota开发板】在新纳瓦特开发板上实现OLED屏显示

[复制链接]
1873|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
要使用好纳瓦特开发板,实现要做好两件事,一是安装好相应的开发工具软件如KEIL
(先前只提供KEIL的例程、现在也提供了对IAR的支持),二是安装好STLINK V2驱动虚拟串口的驱动。
1  基于KEIL的开发环境

2  基于IAR的开发环境

下载链接参考如下:
MDK下载地址    链接:http://pan.baidu.com/s/1hsyfb5i 密码:6hyu
STLINK V2驱动链接 :  st-link_v2_usbdriver.zip
在安装虚拟串口驱动后,在设备管理器可见到图3的虚拟串口。
3  虚拟串口

然后可在GPIO_demo的基础上,进行相应的移植,完成后的显示效果如图4所示。
由于OLED屏采用IIC接口,故只占用2个GPIO口即可使其工作,它与开发板的连接关系为: SCL-- PE1 、SDA-- PE0。
4 OLED屏显示效果

使OLED屏工作的相关定义如下:
#define OLED_MODE 0
#define SIZE      8
#define XLevelL                0x00
#define XLevelH                0x10
#define Max_Column        128
#define Max_Row                  64
#define        Brightness        0xFF
#define X_WIDTH           128
#define Y_WIDTH           64
#define OLED_SCLK_Clr() GPIO_PinClear(GPIO_PTE1);  
#define OLED_SCLK_Set() GPIO_PinSet(GPIO_PTE1);
#define OLED_SDIN_Clr() GPIO_PinClear(GPIO_PTE0);  
#define OLED_SDIN_Set() GPIO_PinSet(GPIO_PTE0);  
#define OLED_CMD  0       
#define OLED_DATA 1
OLED屏的初始化函数为:
void OLED_Init(void)
{
    //SSD1306                               
    OLED_SCLK_Set();
    OLED_SDIN_Set();       
    Delay_1ms(800);
    OLED_WR_Byte(0xAE,OLED_CMD);//--display off
        OLED_WR_Byte(0x00,OLED_CMD);//---set low column address
        OLED_WR_Byte(0x10,OLED_CMD);//---set high column address
        OLED_WR_Byte(0x40,OLED_CMD);//--set start line address  
        OLED_WR_Byte(0xB0,OLED_CMD);//--set page address
        OLED_WR_Byte(0x81,OLED_CMD); // contract control
        OLED_WR_Byte(0xFF,OLED_CMD);//--128   
        OLED_WR_Byte(0xA1,OLED_CMD);//set segment remap
        OLED_WR_Byte(0xA6,OLED_CMD);//--normal / reverse
        OLED_WR_Byte(0xA8,OLED_CMD);//--set multiplex ratio(1 to 64)
        OLED_WR_Byte(0x3F,OLED_CMD);//--1/32 duty
        OLED_WR_Byte(0xC8,OLED_CMD);//Com scan direction
        OLED_WR_Byte(0xD3,OLED_CMD);//-set display offset
        OLED_WR_Byte(0x00,OLED_CMD);//
        OLED_WR_Byte(0xD5,OLED_CMD);//set osc division
        OLED_WR_Byte(0x80,OLED_CMD);//
        OLED_WR_Byte(0xD8,OLED_CMD);//set area color mode off
        OLED_WR_Byte(0x05,OLED_CMD);//
        OLED_WR_Byte(0xD9,OLED_CMD);//Set Pre-Charge Period
        OLED_WR_Byte(0xF1,OLED_CMD);//
        OLED_WR_Byte(0xDA,OLED_CMD);//set com pin configuartion
        OLED_WR_Byte(0x12,OLED_CMD);//
        OLED_WR_Byte(0xDB,OLED_CMD);//set Vcomh
        OLED_WR_Byte(0x30,OLED_CMD);//
        OLED_WR_Byte(0x8D,OLED_CMD);//set charge pump enable
        OLED_WR_Byte(0x14,OLED_CMD);//
        OLED_WR_Byte(0xAF,OLED_CMD);//--turn on oled panel
}
在自定义小字库的情况下,实现相应显示界面的主程序如下:
int main (void)
{
    /* Perform processor initialization */
    sysinit();
    cpu_identify();
    RTC_ConfigType  sRTCConfig;
    RTC_ConfigType  *pRTCConfig = &sRTCConfig;  
    printf("\nRunning the GPIO_demo project.\n");
    /* configure RTC to 1Hz interrupt frequency */
    pRTCConfig->u16ModuloValue = 9;                                      
    pRTCConfig->bInterruptEn   = RTC_INTERRUPT_ENABLE;     /* enable interrupt */
    pRTCConfig->bClockSource   = RTC_CLKSRC_1KHZ;          /*clock source is 1khz*/
    pRTCConfig->bClockPresaler = RTC_CLK_PRESCALER_100;      /*prescaler is 100*/
    RTC_SetCallback(RTC_Task);
    RTC_Init(pRTCConfig);
    GPIO_Init(GPIOB, GPIO_PTE7_MASK, GPIO_PinOutput);
        GPIO_Init(GPIOB, GPIO_PTE0_MASK, GPIO_PinOutput);
        GPIO_Init(GPIOB, GPIO_PTE1_MASK, GPIO_PinOutput);
    OLED_Init();
        OLED_Clear();
        cd11();
        OLED_ShowString(32,6,"2016.7.2",16);
    while (1);
}



相关帖子

沙发
lchen_wx| | 2016-11-25 17:14 | 只看该作者
多谢支持,后续加入到官方demo

使用特权

评论回复
板凳
上官梦舞| | 2016-11-26 08:18 | 只看该作者
好好好,点赞。

使用特权

评论回复
地板
jinglixixi|  楼主 | 2016-11-26 08:28 | 只看该作者

多谢,多谢!

使用特权

评论回复
5
jinglixixi|  楼主 | 2016-11-26 08:30 | 只看该作者
lchen_wx 发表于 2016-11-25 17:14
多谢支持,后续加入到官方demo

应该的!

使用特权

评论回复
6
kation122| | 2016-11-27 20:55 | 只看该作者
你好,感谢分享,请问工程能打个包上传上来吗。这样方便大家学习。

使用特权

评论回复
7
上官梦舞| | 2016-11-30 11:23 | 只看该作者
模拟的IIC还是硬件IIC?

使用特权

评论回复
8
jinglixixi|  楼主 | 2016-12-1 09:08 | 只看该作者
上官梦舞 发表于 2016-11-30 11:23
模拟的IIC还是硬件IIC?

模拟的,硬件IIC没有示波器的配备不好控制。

使用特权

评论回复
9
Bruing| | 2017-9-20 21:07 | 只看该作者
这个RTC的操作有点简陋,有完整的代码提供吗?

使用特权

评论回复
10
jinglixixi|  楼主 | 2017-9-21 11:35 | 只看该作者
Bruing 发表于 2017-9-20 21:07
这个RTC的操作有点简陋,有完整的代码提供吗?

时间久了,暂为找到,找到后再给你。

使用特权

评论回复
11
jerow| | 2017-10-26 18:19 | 只看该作者
oled的12864是I2C接口吗?我还以为和标准12864一样的呢?

使用特权

评论回复
12
jinglixixi|  楼主 | 2017-10-27 08:45 | 只看该作者
jerow 发表于 2017-10-26 18:19
oled的12864是I2C接口吗?我还以为和标准12864一样的呢?

oled的是I2C接口,和标准的LCD12864是有区别的,LCD12864是并口的8位或4位,前一段还接触过有串行方式的且带中文字库,也比较好用。

使用特权

评论回复
13
ah9b87| | 2017-11-3 10:42 | 只看该作者
这个不错,可以借鉴

使用特权

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

本版积分规则

446

主题

2675

帖子

37

粉丝