OLED源代碼,需要做顯示朋友可能有用.
51單片機源程序如下:
- #include <reg52.h>
- #include "function.h"
- #include "word_lib.h"
- #define X_WIDTH 128 //顯示屏每行的顯示點數
- #define Y_WIDTH 64 //顯示屏每列的顯示點數
- /*************************************************************************************
- 以下為設置控制OLED的端口,D0、D1、RST、DC依次對應OLED的CK、DI、RST、DC
- **************************************************************************************/
- sbit OLED_D0 = P1^0;
- sbit OLED_D1 = P1^1;
- sbit OLED_RST= P1^2;
- sbit OLED_DC = P1^3;
- /*************************************************************************************
- 函數名稱: void OLED_WrCmd(unsigned char cmd)
- 函數功能: OLED顯示屏下指令操作
- 調用函數: 無
- 入口參數: cmd
- 出口參數: 無
- 返回值: 無
- 其他: 可以不理解,直接拿過來用
- **************************************************************************************/
- void OLED_WrCmd(unsigned char cmd)
- {
- unsigned char i=8;
- OLED_DC=0;;;;
- OLED_D0=0;;;;
- while(i--)
- {
- if(cmd&0x80)
- {
- OLED_D1=1;
- }
- else
- {
- OLED_D1=0;;;;
- }
- OLED_D0=1;;;;
- ;;;;;;
- OLED_D0=0;;
- cmd<<=1;;
- }
-
- }
- /**************************************************************************************
- 函數名稱: void OLED_Fill(unsigned char bmp_dat)
- 函數功能: 讓OLED清屏或者全屏亮,取決于參數
- 調用函數: OLED_WrCmd(0xb0+y); OLED_WrDat(bmp_dat);
- 入口參數: bmp_dat//一般為0x00或者0xff
- 出口參數: 無
- 返回值: 無
- 其他: 可用此函數進行清屏操作,如OLED_Fill(0),可以清除所有的顯示
- ***************************************************************************************/
- void OLED_Fill(unsigned char bmp_dat)
- {
- unsigned char y,x;
- for(y=0;y<8;y++)
- {
- OLED_WrCmd(0xb0+y);
- OLED_WrCmd(0x01);
- OLED_WrCmd(0x10);
- for(x=0;x<X_WIDTH;x++)
- OLED_WrDat(bmp_dat);
- }
- }
- /******************************************************************************************************
- 函數名稱: void OLED_Init(void)
- 函數功能: OLED顯示屏初始化
- 調用函數: OLED_WrCmd(unsigned char cmd),寫命令CD_Fill(0x00); //初始清屏 OLED_Set_Pos(0,0);寫地址
- 入口參數: 無
- 出口參數: 無
- 返回值: 無
- 其他: 可以不理解,直接拿過來用
- *******************************************************************************************************/
- void OLED_Init(void)
- {
- OLED_D0=1;
- //OLED_CS=1; //預制SLK和SS為高電平
- OLED_RST=0;
- ;;;;;;;
- OLED_RST=1;
-
- //從上電到下面開始初始化要有足夠的時間,即等待RC復位完畢
- OLED_WrCmd(0xae);//--turn off oled panel
- OLED_WrCmd(0x00);//---set low column address
- OLED_WrCmd(0x10);//---set high column address
- OLED_WrCmd(0x40);//--set start line address Set Mapping RAM Display Start Line (0x00~0x3F)
- OLED_WrCmd(0x81);//--set contrast control register
- OLED_WrCmd(0xcf); // Set SEG Output Current Brightness
- OLED_WrCmd(0xa1);//--Set SEG/Column Mapping 0xa0左右反置 0xa1正常
- OLED_WrCmd(0xc8);//Set COM/Row Scan Direction 0xc0上下反置 0xc8正常
- OLED_WrCmd(0xa6);//--set normal display
- OLED_WrCmd(0xa8);//--set multiplex ratio(1 to 64)
- OLED_WrCmd(0x3f);//--1/64 duty
- OLED_WrCmd(0xd3);//-set display offset Shift Mapping RAM Counter (0x00~0x3F)
- OLED_WrCmd(0x00);//-not offset
- OLED_WrCmd(0xd5);//--set display clock divide ratio/oscillator frequency
- OLED_WrCmd(0x80);//--set divide ratio, Set Clock as 100 Frames/Sec
- OLED_WrCmd(0xd9);//--set pre-charge period
- OLED_WrCmd(0xf1);//Set Pre-Charge as 15 Clocks & Discharge as 1 Clock
- OLED_WrCmd(0xda);//--set com pins hardware configuration
- OLED_WrCmd(0x12);
- OLED_WrCmd(0xdb);//--set vcomh
- OLED_WrCmd(0x40);//Set VCOM Deselect Level
- OLED_WrCmd(0x20);//-Set Page Addressing Mode (0x00/0x01/0x02)
- OLED_WrCmd(0x02);//
- OLED_WrCmd(0x8d);//--set Charge Pump enable/disable
- OLED_WrCmd(0x14);//--set(0x10) disable
- OLED_WrCmd(0xa4);// Disable Entire Display On (0xa4/0xa5)
- OLED_WrCmd(0xa6);// Disable Inverse Display On (0xa6/a7)
- OLED_WrCmd(0xaf);//--turn on oled panel
- OLED_Fill(0x00); //初始清屏
- OLED_Set_Pos(0,0);
- }
- /**********************************************************************************
- 函數名稱: void OLED_WrDat(unsigned char dat)
- 函數功能: 寫下點,每次寫8個,從上到下豎著寫,亮是1,滅是0
- 調用函數: 無
- 入口參數: dat//一般為0x**,8位,即8個點,亮或滅
- 出口參數: 無
- 返回值: 無
- 其他:
- **********************************************************************************/
- void OLED_WrDat(unsigned char dat)
- {
- unsigned char i=8;
- OLED_DC=1;;;;
- OLED_D0=0;;;;
- ;;;;
- while(i--)
- {
- if(dat&0x80)
- {
- OLED_D1=1;
- } //1.1
- else
- {
- OLED_D1=0;
- }
- OLED_D0=1;
- ;;;;;;
- //;;
- OLED_D0=0;;;;
- dat<<=1;
- }
- }
- /************************************************************************************
- 函數名稱: void OLED_Set_Pos(unsigned char x, unsigned char y)
- 函數功能: 確定點亮顯示屏的起始位置
- 調用函數: OLED_WrCmd
- 入口參數: x、y分別為起始位置的橫縱坐標
- 出口參數: 無
- 返回值: 無
- 其他:
- *************************************************************************************/
- void OLED_Set_Pos(unsigned char x, unsigned char y)
- {
- OLED_WrCmd(0xb0+y);
- OLED_WrCmd(((x&0xf0)>>4)|0x10);
- OLED_WrCmd((x&0x0f)|0x01);
- }
- /***********************************************************************************
- 函數名稱: void Show_En_small(unsigned charx,unsigned char y,unsigned char En[])
- 函數功能: 寫數字或字母,但建議用此函數寫字母或冒號等符號,調用例子見main函數,
- 后面有專門寫數字的函數。
- 調用函數: OLED_WrDat (); OLED_Set_Pos();
- 入口參數: x、y確定橫縱坐標,En[]確定顯示內容
- 出口參數: 無
- 返回值: 無
- 其他:
- *************************************************************************************/
- void Show_En_small (unsigned char x,unsigned char y,unsigned char En[])
- {
- unsigned char e=0,i=0,j=0;
-
- while (En[j] != '\0')
- {
- e = En[j] - 32;
- if(x>120)
- {x=0;y++;}
- OLED_Set_Pos(x,y);
- for (i=0; i<6; i++)
- {
- OLED_WrDat(EnSmallWord[e*6+i]);
- }
- x+=6;
- j++;
- }
- }
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
OLED_base.rar
(34.23 KB, 下載次數: 460)
2017-5-18 11:16 上傳
點擊文件名下載附件
|