Microchip Curiosity PIC32MX470学习+驱动OLED12864显示屏

标签:OLEDPIC
分享到:

这次要测试的是驱动OLED12864显示屏。OLED12864模块使用的是IIC接口,SDA接RF4引脚,SCL接RF5引脚,电源为3.3V。IIC时序使用软件模拟,采用强制读写模式。

1.iic.h文件

#ifndef __IIC_H
#define __IIC_H
 
#include <stdint.h>
#include "system_config.h"
 
#define IIC_SCL(status)      if(status) \
                                   PLIB_PORTS_PinSet(PORTS_ID_0, PORT_CHANNEL_F, PORTS_BIT_POS_5);\
                             else       \
                                   PLIB_PORTS_PinClear(PORTS_ID_0, PORT_CHANNEL_F, PORTS_BIT_POS_5) 
 
#define IIC_SDA_OUT(status)  if(status) \
                                   PLIB_PORTS_PinSet(PORTS_ID_0, PORT_CHANNEL_F, PORTS_BIT_POS_4);\
                             else       \
                                   PLIB_PORTS_PinClear(PORTS_ID_0, PORT_CHANNEL_F, PORTS_BIT_POS_4)
 
#define DELAY_US             asm("nop");asm("nop");asm("nop");        asm("nop");\
                             asm("nop");asm("nop");asm("nop");        asm("nop");\
                             asm("nop");asm("nop");asm("nop");        asm("nop");\
                             asm("nop");asm("nop");asm("nop");        asm("nop");\
                             asm("nop");asm("nop");asm("nop");        asm("nop");\
                             asm("nop");asm("nop");asm("nop");        asm("nop");\
                             asm("nop");asm("nop");asm("nop");        asm("nop");\
                             asm("nop");asm("nop");asm("nop");        asm("nop");\
                             asm("nop");asm("nop");asm("nop");        asm("nop");\
                             asm("nop");asm("nop");asm("nop");        asm("nop");\
                             asm("nop");asm("nop");asm("nop");        asm("nop");\
                             asm("nop");asm("nop");asm("nop");        asm("nop");\
                             asm("nop");asm("nop");asm("nop");        asm("nop");\
                             asm("nop");asm("nop");asm("nop");        asm("nop");\
                             asm("nop");asm("nop");asm("nop");        asm("nop");\
                             asm("nop");asm("nop");asm("nop");        asm("nop");\
                             asm("nop");asm("nop");asm("nop");        asm("nop");\
                             asm("nop");asm("nop");asm("nop");        asm("nop");\
                             asm("nop");asm("nop");asm("nop");        asm("nop");\
                             asm("nop");asm("nop");asm("nop");        asm("nop")
 
void   IIC_Init(void);                        
void   IIC_Start(void);                                       
void   IIC_Stop(void);                                     
void   IIC_Send_Byte(uint8_t data);        
void   DelayMs(uint32_t msDelay );
void   DelayUs(uint32_t usDelay );
 
2.iic.c文件
#include "iic.h"
 
void IIC_Start(void)//产生启动时序
{
    IIC_SCL(0);
    DelayUs(2);
        
    IIC_SDA_OUT(1);
    DelayUs(2);
        
    IIC_SCL(1);
    DelayUs(2);
        
    IIC_SDA_OUT(0);
    DelayUs(2);
        
    IIC_SCL(0);
    DelayUs(2);
}          
 
void IIC_Stop(void)//产生停止时序
{
    IIC_SCL(0);
    DelayUs(2);
        
    IIC_SDA_OUT(0);
    DelayUs(2);
        
    IIC_SCL(1);
    DelayUs(2);
        
    IIC_SDA_OUT(1);
    DelayUs(2);                                           
}
 
3.oled.c:OLED初始化与驱动程序
 
void OLED_Write_CMD(uint8_t oled_cmd)//写命令函数
{
    IIC_Start();
    IIC_Send_Byte(0x78);//模块地址
        
    IIC_SCL(0);
    DelayUs(2);
    IIC_SCL(1);
    DelayUs(2);
    IIC_SCL(0);
    DelayUs(2);//跳过应答位
 
    IIC_Send_Byte(0x00);//写命令
    
    IIC_SCL(0);
    DelayUs(2);
    IIC_SCL(1);
    DelayUs(2);
    IIC_SCL(0);
    DelayUs(2);//跳过应答位
 
    IIC_Send_Byte(oled_cmd);//命令值
    IIC_Stop();
}
 
4.app.c:显示“1234”.
 
#include "app.h"
#include "oled.h" 
#include "iic.h"
#include "bsp.h"
 
APP_DATA appData;
 
void APP_Initialize ( void )
{
    appData.state = APP_STATE_INIT;
}
 
void APP_Tasks ( void )
{
    switch ( appData.state )
    {
        case APP_STATE_INIT:
        {
            DelayMs(100);
            OLED_Init();
            OLED_Clear();
            
            appData.state = APP_STATE_SERVICE_TASKS;
            break;
        }
        case APP_STATE_SERVICE_TASKS:
        {
            OLED_Show_Char0816((16 + 1), 0,0); //"1"
            OLED_Show_Char0816((16 + 2), 0,8); //"2"
            OLED_Show_Char0816((16 + 3), 0,16);//"3"
            OLED_Show_Char0816((16 + 4), 0,24);//"4"
            
            DelayMs(1000);
            break;
        }
    }
}
 
5.显示效果
 
103036h8g5gpgi8ik8g33t
 
 
 
 
 
 
 
继续阅读
柔性半导体新突破:传输速度已足够驱动OLED像素

  将二硫化钼作为 2D 半导体材料有一项非常优异的性能,那就是它们很容易弯曲。电子在这样的半导体中可以快速移动。

51单片机、AVR单片机和PIC单片机IO口的操作

51单片机、AVR单片机和PIC单片机IO口结构的均不同,导致了IO口操作也不同。操作单片机IO口的目的是让单片机的管脚输出逻辑电平和读取单片机管脚的逻辑电平。下面我们来看看51单片机、AVR单片机和PIC单片机IO口的操作的方法。

Microchip Curiosity PIC32MX470+简单测试 +点亮LED灯

我这次拿到的板子是PIC32MX470 Curiosity开发板,第一次使用,就先来点个LED灯吧。使用定时器中断来实现,亮灭时间各一秒。

用Microchip Curiosity PIC32MX470驱动OLED12864显示屏

这次要测试的是驱动OLED12864显示屏。OLED12864模块使用的是IIC接口,SDA接RF4引脚,SCL接RF5引脚,电源为3.3V。IIC时序使用软件模拟,采用强制读写模式。

韩国研发新型OLED,比头发还薄,可在负105温度下工作

kyung团队设计出了一种可以与纤维相容的OLED结构,通过在纤维的三维结构浸涂的方法,该小组成功的设计出基于纤维的OLED发光二极管。

©2018 Microchip Corporation
facebook google plus twitter linkedin youku weibo rss