【Start_DSC28034PNT湖人开发板免费体验】+OLED屏的显示驱动 - RISC-V MCU技术社区 - 电子技术论坛 - 广受欢迎的专业电子论坛
分享 收藏 返回

【Start_DSC28034PNT湖人开发板免费体验】+OLED屏的显示驱动

OLED屏是一种能自发光的显示器件,故受环境光线的影响比较小。

为了进行GPIO口的测试,可通过OLED屏的显示驱动作为目标,并选取I2C方式工作的OLED来节省引脚的使用。

该OLED显示屏与开发板的连接关系为:

SCL---GPIO33

SDA--- GPIO32

image.png

图1 所用接口

为便于输出高低电平,所作的定义为:

#define SCL_high GpioDataRegs.GPBSET.bit.GPIO33= 1

#define SCL_low GpioDataRegs.GPBCLEAR.bit.GPIO33 = 1

#define SDA_high GpioDataRegs.GPBSET.bit.GPIO32=1

#define SDA_lowGpioDataRegs.GPBCLEAR.bit.GPIO32 = 1

对使用引脚的配置函数为:

void InitOLED(void)
{
    EALLOW;
    GpioCtrlRegs.GPBMUX1.bit.GPIO33 = 0;
    GpioCtrlRegs.GPBDIR.bit.GPIO33= 1;       //SCL
    GpioCtrlRegs.GPBMUX1.bit.GPIO32 = 0;
    GpioCtrlRegs.GPBDIR.bit.GPIO32 = 1;     // SDA
    EDIS;
}

在GPIO模拟I2C的情况下,实现串行字节数据发送的函数为:

void Write_IIC_Byte(unsigned char IIC_Byte)
{
    unsigned char i;
    unsigned char m,da;
    da=IIC_Byte;
    SCL_low;
    for(i=0;i<8;i++)
    {
        m=da;
        m=m&0x80;
        if(m==0x80)
        {
            SDA_high;
        }
        else  SDA_low;
        da=da<<1;
        SCL_high;
        DELY();
        SCL_low;
        DELY();
     }
}

对OLED屏的清除函数为:

void OLED_Clear(void)
{
    uint8_t i,n;
    for(i=0;i<8;i++)
    {
        OLED_WR_Byte (0xb0+i,OLED_CMD);
        OLED_WR_Byte (0x00,OLED_CMD);
        OLED_WR_Byte (0x10,OLED_CMD);
        for(n=0;n<128;n++)
        OLED_WR_Byte(0,OLED_DATA);
    }
}

实现字符串输出的函数为:

void OLED_ShowString(uint8_t x,uint8_t y,uint8_t *chr,uint8_t
Char_Size)
{
    unsigned char j=0;
    while (chr[j]!='\\0')
    {      
            OLED_ShowChar(x,y,chr[j],Char_Size);
            x+=8;
            if(x>120){x=0;y+=2;}
            j++;
    }
}

实现字符串输出测试的主程序为:

int main(void)
{
         uint32_t i;
         InitSysCtrl();
         DINT;
         InitPieCtrl(); 
         IER = 0x0000;
         IFR = 0x0000;
         InitPieVectTable();
         InitKEY();
         InitLED();
         GpioDataRegs.GPBSET.bit.GPIO41 = 1;
         InitOLED();
         OLED_Init();
         OLED_Clear();   
         OLED_ShowString(20,0,"HX_DSC8034",16);
         OLED_ShowString(20,2,"OLED Test",16);
         while(1);
         return 0;
}

经程序的编译与运行,其实现效果图2所示。

image.png

图2 显示效果

有了OLED屏的显示功能,再输出信息就会比数码管的显示功能强许多。

更多回帖

×
发帖