標題: 基于HC32V103開發板的OLED顯示驅動 [打印本頁]
作者: jinglixixi 時間: 2020-10-27 00:17
標題: 基于HC32V103開發板的OLED顯示驅動
OLED屏是一種自身發光的顯示器件,它有許多種類,如按色彩分,可分為單色屏、雙色屏及彩色屏等;按尺寸分,可分為0.91'、0.96'屏等;按接口方式分,可分為I2C接口和SPI接口等。
其中,以I2C接口的OLED屏最有特點,它只用2個I/O口就可完成顯示任務,且比數碼管所顯示的內容要豐富。
在掌握GPIO口使用的基礎上,就可十分輕松地實現驅動OLED屏顯示的目標。
在這里OLED屏與MCU的連接關系為:
SCL---PA2
SDA--- PA3
驅動OLED屏所定義的輸出高低電平的語句為:
#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個引腳為輸出功能的函數為:
void OLED_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure; //定義一個GPIO_InitTypeDef類型的結構體
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);//使能與LED相關的GPIO端口時鐘
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2|GPIO_Pin_3; //配置GPIO引腳
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //設置GPIO模式為推挽輸出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //設置GPIO口輸出速度
GPIO_Init(GPIOA,&GPIO_InitStructure); //調用庫函數,初始化GPIOA
GPIO_SetBits(GPIOA,GPIO_Pin_2|GPIO_Pin_3); //設置引腳輸出高電平
}
在參考廠家提供OLED屏驅動例程的情況下,可以快速地完成程序的移植。
輔助驅動的基本函數為:
void IIC_Start()
{
SCL_high;
SDA_high;
SDA_low;
SCL_low;
}
void IIC_Stop()
{
SCL_low;
SDA_low;
SCL_high;
SDA_high;
}
OLED屏的初始化函數為:
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
}
顯示圖片的函數為:
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++]);
}
}
}
經程序編譯,其結果如圖1所示。
1.jpg (231.39 KB, 下載次數: 53)
下載附件
2020-10-27 00:17 上傳
圖1 完成編譯
在通過編譯后,使用下載工具即可完成下載,其界面如圖2所示。
2.jpg (208.4 KB, 下載次數: 70)
下載附件
2020-10-27 00:17 上傳
圖2 完成下載
在完成下載,程序的運行效果如圖3所示。
3.jpg (113.71 KB, 下載次數: 73)
下載附件
2020-10-27 00:17 上傳
圖3 運行效果
歡迎光臨 (http://www.raoushi.com/bbs/) |
Powered by Discuz! X3.1 |