|
自己在驅(qū)動oled的時候找了很多資料,看了很多示例代碼。總覺得那些代碼兼容性很好,但是作為單片機(jī)初學(xué)者來說
過于冗雜。所以自己整理了一下。加上了一點(diǎn)自己想法,寫了這個精簡版得oled驅(qū)動程序。
實(shí)物圖如下:
A1DC94A86FBDEA723F8E0BD831446953.jpg (208.1 KB, 下載次數(shù): 32)
下載附件
2018-8-5 13:53 上傳
0.jpg (21.76 KB, 下載次數(shù): 40)
下載附件
2018-8-5 15:32 上傳
單片機(jī)源程序如下:
- /*
- STM32F429
- 這個是基于9.6 oled的驅(qū)動程序
- 僅供學(xué)習(xí)參考,代碼較為簡單,未進(jìn)行注釋
- 交流聯(lián)系方式 1452912499@qq.com
- #
- */
- #include "bsp_SPI.h"
- uint32_t time;
- uint8_t OLED_GRAM[8][128];
- extern uint8_t font[94][16];
- void SPI_Config(void)
- {
- GPIO_InitTypeDef GP;
-
- RCC_AHB1PeriphClockCmd(SPI_NSS_CLK|SPI_SCK_CLK|SPI_MOSI_CLK|SPI_DC_CLK|SPI_REST_CLK,ENABLE);
-
-
- GP.GPIO_Mode =GPIO_Mode_OUT;
- GP.GPIO_OType = GPIO_OType_PP;
- GP.GPIO_PuPd = GPIO_PuPd_UP;
- GP.GPIO_Speed = GPIO_Speed_50MHz;
-
-
- GP.GPIO_Pin = SPI_NSS_Pin;
- GPIO_Init(SPI_NSS_Port,&GP);
-
- GP.GPIO_Pin = SPI_REST_Pin;
- GPIO_Init(SPI_REST_Port,&GP);
-
- GP.GPIO_Pin = SPI_DC_Pin;
- GPIO_Init(SPI_DC_Port,&GP);
-
- GP.GPIO_Pin = SPI_SCK_Pin;
- GPIO_Init(SPI_SCK_Port,&GP);
-
- GP.GPIO_Pin = SPI_MOSI_Pin;
- GPIO_Init(SPI_MOSI_Port,&GP);
-
- DC_HIGH
- CS_HIGH
- DATA_HIGH
- CLK_HIGH
-
- }
- void OLED_Config(void)
- {
-
-
- SysTick_Init();
- Rest_HIGH
- Delay_us(10000);
- Rest_LOW//初始化
- Delay_us(10000);
- Rest_HIGH
-
- Write(0xAE,CMD);//--turn off oled panel
- Write(0x00,CMD);//---set low column address
- Write(0x10,CMD);//---set high column address
- Write(0x40,CMD);//--set start line address Set Mapping RAM Display Start Line (0x00~0x3F)
- Write(0x81,CMD);//--set contrast control register
- Write(0xCF,CMD); // Set SEG Output Current Brightness
- Write(0xA1,CMD);//--Set SEG/Column Mapping 0xa0左右反置 0xa1正常
- Write(0xC8,CMD);//Set COM/Row Scan Direction 0xc0上下反置 0xc8正常
- Write(0xA6,CMD);//--set normal display
- Write(0xA8,CMD);//--set multiplex ratio(1 to 64)
- Write(0x3f,CMD);//--1/64 duty
- Write(0xD3,CMD);//-set display offset Shift Mapping RAM Counter (0x00~0x3F)
- Write(0x00,CMD);//-not offset
- Write(0xd5,CMD);//--set display clock divide ratio/oscillator frequency
- Write(0x80,CMD);//--set divide ratio, Set Clock as 100 Frames/Sec
- Write(0xD9,CMD);//--set pre-charge period
- Write(0xF1,CMD);//Set Pre-Charge as 15 Clocks & Discharge as 1 Clock
- Write(0xDA,CMD);//--set com pins hardware configuration
- Write(0x12,CMD);
- Write(0xDB,CMD);//--set vcomh
- Write(0x40,CMD);//Set VCOM Deselect Level
- Write(0x20,CMD);//-Set Page Addressing Mode (0x00/0x01/0x02)
- Write(0x02,CMD);//
- Write(0x8D,CMD);//--set Charge Pump enable/disable
- Write(0x14,CMD);//--set(0x10) disable
- Write(0xA4,CMD);// Disable Entire Display On (0xa4/0xa5)
- Write(0xA6,CMD);// Disable Inverse Display On (0xa6/a7)
- Write(0xAF,CMD);//--turn on oled panel
-
- OLED_Clear();
- }
- void Updata(void)
- {
-
-
- uint8_t i,n;
- for(i=0;i<8;i++)
- {
- Write(0xb0+i,CMD);
- Write(0x00,CMD);
- Write(0x10,CMD);
- for(n=0;n<128;n++){Write(OLED_GRAM[i][n],DATA);}
- }
- }
- void Write(uint8_t data,uint8_t x)
- {
- uint8_t i;
- if(x)
- {
- DC_HIGH
- }
- else
- {
- DC_LOW
- }
- CS_LOW
- for(i=0;i<8;i++)
- {
- CLK_LOW
- if(data&0x80)
- DATA_HIGH
- else
- DATA_LOW
- CLK_HIGH
- data<<=1;
- }
- CS_HIGH
- DC_HIGH
- }
- void OLED_Clear(void)
- {
-
- uint8_t i,n;
- for(i=0;i<8;i++)
- {
- Write(0xb0+i,CMD);
- Write(0x00,CMD);
- Write(0x10,CMD);
- for(n=0;n<128;n++)Write(0x00,DATA);
- }
-
- }
- void ConPart(uint8_t x,uint8_t y,uint8_t *map)
- {
- uint8_t y2;
- for(y2 =0;y2<8&&y2+y<128;y2++)
- {
- OLED_GRAM[x][y2+y] = *(map+y2);
- }
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼
所有資料51hei提供下載:
OLED-429模擬SPI.rar
(4.2 MB, 下載次數(shù): 113)
2018-8-5 15:33 上傳
點(diǎn)擊文件名下載附件
驅(qū)動代碼 下載積分: 黑幣 -5
|
評分
-
查看全部評分
|