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 完成編譯 在通過編譯后,使用下載工具即可完成下載,其界面如圖2所示。 圖2 完成下載 在完成下載,程序的運行效果如圖3所示。 圖3 運行效果
|