Arduino UNO 驱动1.5寸 128*128像素的OLED
本帖最后由 希岩 于 2018-11-26 21:43 编辑手头有一个微雪的1.5寸OLED屏,白色,SPI接口,像素点128*128个,具有16阶灰度,驱动芯片为SSD1327。这个屏幕特点就是像素多,屏大。但是卖家给的例程用的RAM高达83%了,用的FLASH到了67%,占的资源太多了。程序也很复杂。
因此对其进行了简化。简化成字符显示的程序。12点的字符。可以看看程序,可以说非常简单了,使用的一个小缓冲区,占用RAM 52%,FLASH 13%。
好了,不多说了,全部代码在附件里,供大家学习开发。以下是部分代码。
/***********************************************************************************************************************
| file : OLED_Show
| version : V1.0
| date : 2017-12-12
| function:
| Author:凌晨七點半
| QQ 群:871103113
引脚定义:
VCC : +5V/3V3
GND : GND
DIN : 11
CLK : 13
CS: 10 //也可以接地
DC: 7
RST : 8 //可有可无
***********************************************************************************************************************/
#include "OLED_Driver.h"
//行位置,总共可以显示10行英文
enum {
Line1= 0,
Line2= 13,
Line3= 26,
Line4= 39,
Line5= 52,
Line6= 64,
Line7= 77,
Line8= 90,
Line9= 103,
Line10= 116
} LINE;
/********************************************************************************
function:
initialization
********************************************************************************/
void OLED_Init(void)
{
//set pin
pinMode(OLED_CS, OUTPUT);
pinMode(OLED_RST, OUTPUT);
pinMode(OLED_DC, OUTPUT);
digitalWrite(OLED_CS,LOW);
//digitalWrite(OLED_RST,HIGH);
//set OLED SPI
SPI.setDataMode(SPI_MODE0);
SPI.setClockDivider(SPI_CLOCK_DIV2);
SPI.begin();
Serial.println("OLED initializing... ");
OLED_Reset(); //Hardware reset
//Set the initialization register
OLED_InitReg();
delay(200);
OLED_Fill_Screen(0);
delay(200);
}
//------------------------------------------------
void setup()
{
//set Serial
Serial.begin(9600);
OLED_Init();
OLED_CS_0;
Serial.println("OLED Init OK ");
OLED_Fill_Screen(0xff);
delay(1000);
OLED_Fill_Screen(0);
OLED_DisStr_EN(18,"1.5' OLED",15);//横轴位置,数据,亮度
OLED_Window_Display(Line1); //表示行
OLED_ClearBuf();
OLED_DisStr_EN(0,"OLED",15);//横轴位置,数据,亮度
OLED_DisStr_EN(54,"128*128",15);//横轴位置,数据,亮度
OLED_Window_Display(Line2); //表示行
OLED_ClearBuf();
OLED_DisStr_EN(0,"QQ GROUP:871103113",15);//横轴位置,数据,亮度
OLED_Window_Display(Line7); //表示行
OLED_ClearBuf();
OLED_DisStr_EN(50,"Email:",7);//横轴位置,数据,亮度
OLED_Window_Display(Line9); //表示行
OLED_ClearBuf();
OLED_DisStr_EN(8,"820329503@qq.com",2);//横轴位置,数据,亮度
OLED_Window_Display(Line10); //表示行
OLED_ClearBuf();
Serial.println("OLED test OK ");
}
//-----------------------------------------------------------
void loop()
{
}
/*********************************************************************************************************
END FILE
*********************************************************************************************************/
页:
[1]