找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 2403|回復(fù): 0
收起左側(cè)

基于HC32V103開發(fā)板的OLED顯示驅(qū)動(dòng)

[復(fù)制鏈接]
ID:776997 發(fā)表于 2020-10-27 00:17 | 顯示全部樓層 |閱讀模式
OLED屏是一種自身發(fā)光的顯示器件,它有許多種類,如按色彩分,可分為單色屏、雙色屏及彩色屏等;按尺寸分,可分為0.91'0.96'屏等;按接口方式分,可分為I2C接口和SPI接口等。
其中,以I2C接口的OLED屏最有特點(diǎn),它只用2個(gè)I/O口就可完成顯示任務(wù),且比數(shù)碼管所顯示的內(nèi)容要豐富。
在掌握GPIO口使用的基礎(chǔ)上,就可十分輕松地實(shí)現(xiàn)驅(qū)動(dòng)OLED屏顯示的目標(biāo)。
在這里OLED屏與MCU的連接關(guān)系為:
SCL---PA2
SDA--- PA3
驅(qū)動(dòng)OLED屏所定義的輸出高低電平的語(yǔ)句為:
#define SCL_high GPIO_WriteBit(GPIOA, GPIO_Pin_2, Bit_SET)
#define SCL_low  GPIO_WriteBit(GPIOA, GPIO_Pin_2, Bit_RESET)
#define SDA_high GPIO_WriteBit(GPIOA, GPIO_Pin_3, Bit_SET)
#define SDA_low  GPIO_WriteBit(GPIOA, GPIO_Pin_3, Bit_RESET)
配置2個(gè)引腳為輸出功能的函數(shù)為:
void OLED_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;                  //定義一個(gè)GPIO_InitTypeDef類型的結(jié)構(gòu)體
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);//使能與LED相關(guān)的GPIO端口時(shí)鐘
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2|GPIO_Pin_3; //配置GPIO引腳
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;      //設(shè)置GPIO模式為推挽輸出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;     //設(shè)置GPIO口輸出速度
GPIO_Init(GPIOA,&GPIO_InitStructure);                  //調(diào)用庫(kù)函數(shù),初始化GPIOA
GPIO_SetBits(GPIOA,GPIO_Pin_2|GPIO_Pin_3);           //設(shè)置引腳輸出高電平
}
在參考廠家提供OLED屏驅(qū)動(dòng)例程的情況下,可以快速地完成程序的移植。
輔助驅(qū)動(dòng)的基本函數(shù)為:
void IIC_Start()
{
   SCL_high;
   SDA_high;
   SDA_low;
   SCL_low;
}
void IIC_Stop()
{
   SCL_low;
   SDA_low;
   SCL_high;
   SDA_high;
}
OLED屏的初始化函數(shù)為:
void Initial_M096128x64_ssd1306()
{
    Write_IIC_Command(0xAE);   //displayoff
    Write_IIC_Command(0x20);    //SetMemory Addressing Mode
    Write_IIC_Command(0x10);    //00,HorizontalAddressing Mode;01,Vertical Addressing Mode;10,Page Addressing Mode(RESET);11,Invalid
    Write_IIC_Command(0xb0);//Set Page Start Address for Page Addressing Mode,0-7
    Write_IIC_Command(0xc8);//Set COM Output Scan Direction
    Write_IIC_Command(0x00);//---set low column address
    Write_IIC_Command(0x10);//---set high column address
    Write_IIC_Command(0x40);//--set start line address
    Write_IIC_Command(0x81);//--set contrast control register
    Write_IIC_Command(0xdf);
    Write_IIC_Command(0xa1);//--set segment re-map 0 to 127
    Write_IIC_Command(0xa6);//--set normal display
    Write_IIC_Command(0xa8);//--set multiplex ratio(1 to 64)
    Write_IIC_Command(0x3F);//
    Write_IIC_Command(0xa4);//0xa4,Output follows RAM content;0xa5,Output ignores RAMcontent
    Write_IIC_Command(0xd3);//-set display offset
    Write_IIC_Command(0x00);//-not offset
    Write_IIC_Command(0xd5);//--set display clock divide ratio/oscillator frequency
    Write_IIC_Command(0xf0);//--set divide ratio
    Write_IIC_Command(0xd9);//--set pre-charge period
    Write_IIC_Command(0x22); //
    Write_IIC_Command(0xda);//--set com pins hardware configuration
    Write_IIC_Command(0x12);
    Write_IIC_Command(0xdb);//--set vcomh
    Write_IIC_Command(0x20);//0x20,0.77xVcc
    Write_IIC_Command(0x8d);//--set DC-DC enable
    Write_IIC_Command(0x14);//
    Write_IIC_Command(0xaf);//--turn on oled panel
}
顯示圖片的函數(shù)為:
void Picture()
{
  unsigned char x,y;
  unsigned int i=0;
  for(y=0;y<8;y++)
  {
      Write_IIC_Command(0xb0+y);
      Write_IIC_Command(0x0);
      Write_IIC_Command(0x10);
      for(x=0;x<132;x++)
      {
          Write_IIC_Data(show[i++]);
      }
  }
}
經(jīng)程序編譯,其結(jié)果如圖1所示。
1.jpg
1 完成編譯
在通過編譯后,使用下載工具即可完成下載,其界面如圖2所示。
2.jpg
2 完成下載
在完成下載,程序的運(yùn)行效果如圖3所示。
3.jpg
3 運(yùn)行效果

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表