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