查看: 1692|回复: 0

【赚周年币】技术帖——在新版纳瓦特开发板上实现OLED屏...

[复制链接]
  • TA的每日心情
    奋斗
    2023-5-10 20:09
  • 签到天数: 1742 天

    连续签到: 1 天

    [LV.Master]伴坛终老

    发表于 2016-11-26 10:39:39 | 显示全部楼层 |阅读模式
    分享到:
          纳瓦特又推出了新的开发板,在颜色上则由原来蓝色改为了更薄的绿色板。此外,在器件方面也做了些调整,将原来的RGB LED改为了3个独立的红色LED,在原复位键的基础上又新增了2个小按键,这样会更加便于人机交互的验证和使用。
        可能是出于同其他下载器兼容的需要,新版上的下载器接口由原来的6线式变为了5线式,所以在直接使用的情况下是无法完成程序下载的。其解决之道就是自制一个具有线序调整作用的转换排插,将原来的线序:GND3V3RSTSWDDIOCLK
    改为GND3V3RSTDIOCLKSWD接口。   
        似乎是推出的太仓促,网上没能找到新版的原理图,为此特意实测了一下相关器件的连接情况,在此与大家分享。
    1CH0-PC0   CH1-PC1   CH2-PB5   CH3-PC3   CH4-PB4   CH5-PC2   
    2D2-PH1    D3-PH2   D4-PE7
    3KBI0-PA0   KBI1-PD0
          要使用好纳瓦特开发板,首先要做好两件事,一是安装好相应的开发工具软件如KEIL(先前只提供KEIL的例程、现在已提供了对IAR的支持),二是安装好STLINK V2驱动虚拟串口的驱动。
    图片1.png
    1  基于KEIL的开发环境

    图片2.png
    2  基于IAR的开发环境

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

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

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

    评分

    参与人数 1 +20 收起 理由
    loveeeboard + 20

    查看全部评分

    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /2 下一条



    手机版|小黑屋|与非网

    GMT+8, 2024-4-26 11:35 , Processed in 0.119607 second(s), 17 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.