SSD1306 OLED驱动芯片中文手册
- 格式:pdf
- 大小:1.64 MB
- 文档页数:25
基于STM32的OLED(SSD1306)寄存器版编译即可用!OLED的头文件#ifndef _OLED_H#define _OLED_H#include "sys.h"/*//////////////////////////////////////////////////////////////////////////////////////////////////// //SSD1306,当接口为SPI的驱动//功能简介:显示字符,字符串,数字,和小区域屏幕填充//作者:范桢干//时间:2016.1.6*/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////接口定义///////////#define OLED_SCLK P Cout(10)#define OLED_SDA PBout(15)#define OLED_RST PBout(13)#define OLED_DC PBout(11)//#define OLED_CS PAout(4)//////////////////////////////////////////////////////////////////////////////////////////////////////void OLED_Init(void); //OLED初始化void OLED_Clear(u8 Fill); //OLED清屏/清屏void OLED_ShowChar(u8 uPage_sta,u8 uColumn_sta,u8 uSize,u8 uChar); //在指定Page_sta,Column_sta和Size输入字符Charvoid OLED_ShowString(u8 uPage_sta,u8 uColumn_sta,u8 uSize,u8 *p); //在指定Page_sta,Column_sta处输入大小为Size的字符串*pvoid OLED_ShowNum(u8 uPage,u8 uColumn_sta,u8 uSize,u32 uNum); //在指定Page_sta,Column_sta处输入大小为Size的数字uNum,范围:(0~4294967295)void OLED_Fill(u8 uPage_sta,u8 uColumn_sta,u8 uColumn_end,u8 Fill); //在Page_sta,从uColumn_sta到uColumn_end填充或清屏#endifOLED的C文件#include "oled.h"#include "delay.h"#include "ASCII.h"//函数名称:void OLED_WriteCmd(u8 uCmd) //函数功能:OLED写一个指令//函数参数:uCmd:写入的指令void OLED_WriteCmd(u8 uCmd){u8 i;OLED_DC=0; //写指令for(i=0;i<8;i++){OLED_SCLK=0;if(uCmd&0x80) //先发送高位{ OLED_SDA=1;}else{ OLED_SDA=0;}OLED_SCLK=1;uCmd<<=1; //左移一位}OLED_SCLK=0;}//函数名称:void OLED_WriteDat(u8 uDat) //函数功能:OLED写一个数据//函数参数:uDat:写入的数据void OLED_WriteDat(u8 uDat){u8 i;OLED_DC=1; //写数据for(i=0;i<8;i++){OLED_SCLK=0;if(uDat&0x80) //先发送高位{ OLED_SDA=1;}else{ OLED_SDA=0;}OLED_SCLK=1;uDat<<=1; //左移一位}OLED_SCLK=0;}//函数名称:void OLED_Init(void)//函数功能:OLED初始化void OLED_Init(void){RCC->APB2ENR|=1<<3; //使能PORTB时钟RCC->APB2ENR|=1<<4; //使能PORTC时钟GPIOB->CRH&=0X0F0F0FFF;GPIOB->CRH|=0X30303000; //PB11,13,15推挽输出GPIOC->CRH&=0XFFFFF0FF;GPIOC->CRH|=0X00000300; //PC10推挽输出OLED_RST=0; //低电平复位delay_ms(10);OLED_RST=1; //复位完毕delay_ms(20);OLED_WriteCmd(0xAE); //关OLED显示OLED_WriteCmd(0xD5); //设置时钟OLED_WriteCmd(0x80);OLED_WriteCmd(0x20); //RAM Addressing ModeOLED_WriteCmd(0x01); //Vertical Addressing ModeOLED_WriteCmd(0xA8); //设置驱动路数(set Multiplex Ratio) OLED_WriteCmd(0x3F);OLED_WriteCmd(0xD3); //set offsetOLED_WriteCmd(0x00);OLED_WriteCmd(0x40); //Set Start LineOLED_WriteCmd(0xA1); //Set RemapOLED_WriteCmd(0xC8); //Output Scan DirectionOLED_WriteCmd(0xDA); //Pins ConfigurationOLED_WriteCmd(0x12);OLED_WriteCmd(0x81); //设置对比度(Set Contrast Ratio)OLED_WriteCmd(0xCF); //128(0-255)OLED_WriteCmd(0xD9); //Set Pre-ChagreOLED_WriteCmd(0xF1);OLED_WriteCmd(0xD8); //Set VcomhOLED_WriteCmd(0x30);OLED_WriteCmd(0xA4); //Display Accordding to GDDRAM OLED_WriteCmd(0xA6); //Set Normal DisplayOLED_WriteCmd(0x8D); //Set Charge PumpOLED_WriteCmd(0x14);OLED_WriteCmd(0xAF); //开显示delay_ms(100); //等待开启显示OLED_Clear(0); //清屏}//函数名称:void OLED_Clear(u8 Fill)//函数功能:OLED填充/清屏//函数参数:Fill,填充或者清除void OLED_Clear(u8 Fill){u8 i,j;OLED_WriteCmd(0x22); //Page AddressOLED_WriteCmd(0x00); //Page Start AddressOLED_WriteCmd(0x07); //Page End AddressOLED_WriteCmd(0x21); //Column AddressOLED_WriteCmd(0x00); //Column Start AddressOLED_WriteCmd(0x7F); //Column Start Addressfor(i=0;i<128;i++)for(j=0;j<8;j++){{ OLED_WriteDat(0xFF);}else{ OLED_WriteDat(0x00);}}}//函数名称:void OLED_ShowChar(u8 uPage_sta,u8 uColumn_sta,u8 uSize,u8 uChar)//函数功能:在指定Page_sta,Column_sta处输入大小为Size的字符Char//函数参数:uPage_sta:页数,uColumn_sta:列数,uSize:字体大小,uChar:输入的字符//注意:!!!!!!!!本字符输入函数增加了自动换行换页功能!!!!!!!!!!!!!void OLED_ShowChar(u8 uPage_sta,u8 uColumn_sta,u8 uSize,u8 uChar){#define MAX_CHAR_X 127 //Column限制#define MAX_CHAR_Y 7 //Page限制u8 uChar_Buf;u8 uCount;u8 uPage_end,uColumn_end;u8 i;if(uSize==6) //如果是8x6字体{ uPage_end=uPage_sta; //赋值Page_enduColumn_end=uColumn_sta+uSize; //赋值Cloumn_enduCount=6; //赋值uCount}else if(uSize==8) //如果是16x8字体{ uPage_end=uPage_sta+1; //赋值Page_enduColumn_end=uColumn_sta+uSize; //赋值Cloumn_enduCount=16; //赋值uCount}else{ return; //uSize错误}/////////////////////////////////自动换行换页////////////////////////////////////////////////////////////////////////////////////////////////////// if(uColumn_end>MAX_CHAR_X) //如果Cloumn>127{uColumn_sta=0; //Column_sta=0uColumn_end=uColumn_sta+uSize;{ uPage_sta=uPage_sta+1; //Page_sta+1uPage_end=uPage_sta;}else{ uPage_sta=uPage_sta+2; //Page_sta+2uPage_end=uPage_sta+1;}}if(uPage_end>MAX_CHAR_Y) //如果Page>7{uPage_sta=0; //Page_sta=0if(uSize==6){ uPage_end=uPage_sta;}else{ uPage_end=uPage_sta+1;}}/////////////////////////////////自动换行换页////////////////////////////////////////////////////////////////////////////////////////////////////// OLED_WriteCmd(0x22); //Page AddressOLED_WriteCmd(0x00+uPage_sta); //Start Page AddressOLED_WriteCmd(0x00+uPage_end); //End Page AddressOLED_WriteCmd(0x21); //Column AddressOLED_WriteCmd(0x00+uColumn_sta); //Start Column AddressOLED_WriteCmd(0x00+uColumn_end); //End Column AddressuChar=uChar-' '; //获得偏移量for(i=0;i<uCount;i++) //输入字符{if(uSize==8){ uChar_Buf=ASCII_1608[uChar][i];}else{ uChar_Buf=ASCII_0806[uChar][i];}OLED_WriteDat(uChar_Buf);}}//函数名称:void OLED_ShowString(u8 uPage_sta,u8 uColumn,u8 uSize,u8 *p)//函数功能:在指定Page_sta,Column_sta处输入大小为Size的字符串*p//函数参数:uPage_sta:页数,uColumn_sta:列数,uSize:字体大小,*p:输入的字符串指针//注意:!!!本字符串输入函数增加了自动换行换页功能!!!!!!!!!!!!!void OLED_ShowString(u8 uPage_sta,u8 uColumn_sta,u8 uSize,u8 *p){while(*p!='\0'){/////////////////////////////////自动换行换页////////////////////////////////////////////////////////////////////////////////////////////////////// if((uColumn_sta+uSize)>MAX_CHAR_X){ uColumn_sta=0;if(uSize==6){ uPage_sta=uPage_sta+1; //Page_sta+1}else{ uPage_sta=uPage_sta+2; //Page_sta+2}}if(uSize==6){ if(uPage_sta>MAX_CHAR_Y){ uPage_sta=0;}}else{ if((uPage_sta+1)>MAX_CHAR_Y){ uPage_sta=0;}}/////////////////////////////////自动换行换页//////////////////////////////////////////////////////////////////////////////////////////////////////OLED_ShowChar(uPage_sta,uColumn_sta,uSize,*p);uColumn_sta+=uSize;p++;}}//m^n函数u32 mypow(u8 m,u8 n){u32 result=1;while(n--)result*=m;return result;}//功能:计算整数长度数字0长度为1u8 LongCheck(u32 num){u8 len=0;if(num==0) //数字0长度也为1{ return 1;}while(num){ num/=10;len++;}return len;}//函数名称:void OLED_ShowNum(u8 uPage_sta,u8 uColumn_sta,u8 uSize,u32 uNum)//函数功能:在指定Page_sta,Column_sta处输入大小为Size的数字uNum,范围:(0~4294967295)//函数参数:uPage_sta:页数,uColumn_sta:列数,uSize:字体大小,uNum:输入的数字void OLED_ShowNum(u8 uPage_sta,u8 uColumn_sta,u8 uSize,u32 uNum){u8 i,temp;u8 len;len=LongCheck(uNum); //算出长度for(i=0;i<len;i++){temp=(uNum/mypow(10,len-i-1))%10;OLED_ShowChar(uPage_sta,uColumn_sta,uSize,temp+'0');uColumn_sta+=uSize;}}//函数名称:void OLED_Fill(u8 uPage_sta,u8 uColumn_sta,u8 uColumn_end,u8 Fill)//函数功能:在Page_sta,从uColumn_sta到uColumn_end填充或清屏//函数参数:uPage_sta:页数,uColumn_sta:列开始,uColumn_end:列结束,Fill:填充/清除void OLED_Fill(u8 uPage_sta,u8 uColumn_sta,u8 uColumn_end,u8 Fill){u8 i;u8 ulen;OLED_WriteCmd(0x22); //Page AddressOLED_WriteCmd(0x00+uPage_sta); //Start Page AddressOLED_WriteCmd(0x00+uPage_sta); //End Page AddressOLED_WriteCmd(0x21); //Column Address OLED_WriteCmd(0x00+uColumn_sta); //Start Column Address OLED_WriteCmd(0x00+uColumn_end); //End Column Addressulen=uColumn_end-uColumn_sta+1;for(i=0;i<=ulen;i++){if(Fill){ OLED_WriteDat(0xff); //填充}else{ OLED_WriteDat(0x00); //清除}}}ASCII码字库#ifndef _ASCII_H#define _ASCII_H//常用ASCII表//纵向取模//偏移量:32//大小:16*8const unsigned char ASCII_1608[95][16]={{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},//" ",0 {0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x33,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x00},//"!",1 {0x00,0x00,0x10,0x00,0x0C,0x00,0x06,0x00,0x10,0x00,0x0C,0x00,0x06,0x00,0x00,0x00},//""",2 {0x40,0x04,0xC0,0x3F,0x78,0x04,0x40,0x04,0xC0,0x3F,0x78,0x04,0x40,0x04,0x00,0x00},//"#",3 {0x00,0x00,0x70,0x18,0x88,0x20,0xFC,0xFF,0x08,0x21,0x30,0x1E,0x00,0x00,0x00,0x00},//"$",4 {0xF0,0x00,0x08,0x21,0xF0,0x1C,0x00,0x03,0xE0,0x1E,0x18,0x21,0x00,0x1E,0x00,0x00},//"%",5 {0x00,0x1E,0xF0,0x21,0x08,0x23,0x88,0x24,0x70,0x19,0x00,0x27,0x00,0x21,0x00,0x10},//"&",6 {0x10,0x00,0x16,0x00,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},//"'",7 {0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x07,0x18,0x18,0x04,0x20,0x02,0x40,0x00,0x00},//"(",8 {0x00,0x00,0x02,0x40,0x04,0x20,0x18,0x18,0xE0,0x07,0x00,0x00,0x00,0x00,0x00,0x00},//")",9 {0x40,0x02,0x40,0x02,0x80,0x01,0xF0,0x0F,0x80,0x01,0x40,0x02,0x40,0x02,0x00,0x00},//"*",10 {0x00,0x01,0x00,0x01,0x00,0x01,0xF0,0x1F,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x00},//"+",11 {0x00,0x80,0x00,0xB0,0x00,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},//",",12 {0x00,0x00,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01},//"-",13 {0x00,0x00,0x00,0x30,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},//".",14 {0x00,0x00,0x00,0x60,0x00,0x18,0x00,0x06,0x80,0x01,0x60,0x00,0x18,0x00,0x04,0x00},//"/",15 {0x00,0x00,0xE0,0x0F,0x10,0x10,0x08,0x20,0x08,0x20,0x10,0x10,0xE0,0x0F,0x00,0x00},//"0",16 {0x00,0x00,0x10,0x20,0x10,0x20,0xF8,0x3F,0x00,0x20,0x00,0x20,0x00,0x00,0x00,0x00},//"1",17 {0x00,0x00,0x70,0x30,0x08,0x28,0x08,0x24,0x08,0x22,0x88,0x21,0x70,0x30,0x00,0x00},//"2",18 {0x00,0x00,0x30,0x18,0x08,0x20,0x88,0x20,0x88,0x20,0x48,0x11,0x30,0x0E,0x00,0x00},//"3",19 {0x00,0x00,0x00,0x07,0xC0,0x04,0x20,0x24,0x10,0x24,0xF8,0x3F,0x00,0x24,0x00,0x00},//"4",20 {0x00,0x00,0xF8,0x19,0x08,0x21,0x88,0x20,0x88,0x20,0x08,0x11,0x08,0x0E,0x00,0x00},//"5",21 {0x00,0x00,0xE0,0x0F,0x10,0x11,0x88,0x20,0x88,0x20,0x18,0x11,0x00,0x0E,0x00,0x00},//"6",22 {0x00,0x00,0x38,0x00,0x08,0x00,0x08,0x3F,0xC8,0x00,0x38,0x00,0x08,0x00,0x00,0x00},//"7",23 {0x00,0x00,0x70,0x1C,0x88,0x22,0x08,0x21,0x08,0x21,0x88,0x22,0x70,0x1C,0x00,0x00},//"8",24 {0x00,0x00,0xE0,0x00,0x10,0x31,0x08,0x22,0x08,0x22,0x10,0x11,0xE0,0x0F,0x00,0x00},//"9",25 {0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x30,0xC0,0x30,0x00,0x00,0x00,0x00,0x00,0x00},//":",26 {0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},//";",27 {0x00,0x00,0x00,0x01,0x80,0x02,0x40,0x04,0x20,0x08,0x10,0x10,0x08,0x20,0x00,0x00},//"<",28 {0x40,0x04,0x40,0x04,0x40,0x04,0x40,0x04,0x40,0x04,0x40,0x04,0x40,0x04,0x00,0x00},//"=",29 {0x00,0x00,0x08,0x20,0x10,0x10,0x20,0x08,0x40,0x04,0x80,0x02,0x00,0x01,0x00,0x00},//">",30 {0x00,0x00,0x70,0x00,0x48,0x00,0x08,0x30,0x08,0x36,0x08,0x01,0xF0,0x00,0x00,0x00},//"?",31 {0xC0,0x07,0x30,0x18,0xC8,0x27,0x28,0x24,0xE8,0x23,0x10,0x14,0xE0,0x0B,0x00,0x00},//"@",3 2{0x00,0x20,0x00,0x3C,0xC0,0x23,0x38,0x02,0xE0,0x02,0x00,0x27,0x00,0x38,0x00,0x20},//"A",33 {0x08,0x20,0xF8,0x3F,0x88,0x20,0x88,0x20,0x88,0x20,0x70,0x11,0x00,0x0E,0x00,0x00},//"B",34 {0xC0,0x07,0x30,0x18,0x08,0x20,0x08,0x20,0x08,0x20,0x08,0x10,0x38,0x08,0x00,0x00},//"C",35 {0x08,0x20,0xF8,0x3F,0x08,0x20,0x08,0x20,0x08,0x20,0x10,0x10,0xE0,0x0F,0x00,0x00},//"D",36 {0x08,0x20,0xF8,0x3F,0x88,0x20,0x88,0x20,0xE8,0x23,0x08,0x20,0x10,0x18,0x00,0x00},//"E",37 {0x08,0x20,0xF8,0x3F,0x88,0x20,0x88,0x00,0xE8,0x03,0x08,0x00,0x10,0x00,0x00,0x00},//"F",38 {0xC0,0x07,0x30,0x18,0x08,0x20,0x08,0x20,0x08,0x22,0x38,0x1E,0x00,0x02,0x00,0x00},//"G",39 {0x08,0x20,0xF8,0x3F,0x08,0x21,0x00,0x01,0x00,0x01,0x08,0x21,0xF8,0x3F,0x08,0x20},//"H",40 {0x00,0x00,0x08,0x20,0x08,0x20,0xF8,0x3F,0x08,0x20,0x08,0x20,0x00,0x00,0x00,0x00},//"I",41 {0x00,0xC0,0x00,0x80,0x08,0x80,0x08,0x80,0xF8,0x7F,0x08,0x00,0x08,0x00,0x00,0x00},//"J",42 {0x08,0x20,0xF8,0x3F,0x88,0x20,0xC0,0x01,0x28,0x26,0x18,0x38,0x08,0x20,0x00,0x00},//"K",43 {0x08,0x20,0xF8,0x3F,0x08,0x20,0x00,0x20,0x00,0x20,0x00,0x20,0x00,0x30,0x00,0x00},//"L",44 {0x08,0x20,0xF8,0x3F,0xF8,0x00,0x00,0x3F,0xF8,0x00,0xF8,0x3F,0x08,0x20,0x00,0x00},//"M",45 {0x08,0x20,0xF8,0x3F,0x30,0x20,0xC0,0x00,0x00,0x07,0x08,0x18,0xF8,0x3F,0x08,0x00},//"N",46 {0xE0,0x0F,0x10,0x10,0x08,0x20,0x08,0x20,0x08,0x20,0x10,0x10,0xE0,0x0F,0x00,0x00},//"O",47 {0x08,0x20,0xF8,0x3F,0x08,0x21,0x08,0x01,0x08,0x01,0x08,0x01,0xF0,0x00,0x00,0x00},//"P",48 {0xE0,0x0F,0x10,0x18,0x08,0x24,0x08,0x24,0x08,0x38,0x10,0x50,0xE0,0x4F,0x00,0x00},//"Q",49 {0x08,0x20,0xF8,0x3F,0x88,0x20,0x88,0x00,0x88,0x03,0x88,0x0C,0x70,0x30,0x00,0x20},//"R",50 {0x00,0x00,0x70,0x38,0x88,0x20,0x08,0x21,0x08,0x21,0x08,0x22,0x38,0x1C,0x00,0x00},//"S",51 {0x18,0x00,0x08,0x00,0x08,0x20,0xF8,0x3F,0x08,0x20,0x08,0x00,0x18,0x00,0x00,0x00},//"T",52 {0x08,0x00,0xF8,0x1F,0x08,0x20,0x00,0x20,0x00,0x20,0x08,0x20,0xF8,0x1F,0x08,0x00},//"U",53 {0x08,0x00,0x78,0x00,0x88,0x07,0x00,0x38,0x00,0x0E,0xC8,0x01,0x38,0x00,0x08,0x00},//"V",54 {0xF8,0x03,0x08,0x3C,0x00,0x07,0xF8,0x00,0x00,0x07,0x08,0x3C,0xF8,0x03,0x00,0x00},//"W",55 {0x08,0x20,0x18,0x30,0x68,0x2C,0x80,0x03,0x80,0x03,0x68,0x2C,0x18,0x30,0x08,0x20},//"X",56 {0x08,0x00,0x38,0x00,0xC8,0x20,0x00,0x3F,0xC8,0x20,0x38,0x00,0x08,0x00,0x00,0x00},//"Y",57 {0x10,0x20,0x08,0x38,0x08,0x26,0x08,0x21,0xC8,0x20,0x38,0x20,0x08,0x18,0x00,0x00},//"Z",58 {0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x7F,0x02,0x40,0x02,0x40,0x02,0x40,0x00,0x00},//"[",59 {0x00,0x00,0x0C,0x00,0x30,0x00,0xC0,0x01,0x00,0x06,0x00,0x38,0x00,0xC0,0x00,0x00},//"\",60 {0x00,0x00,0x02,0x40,0x02,0x40,0x02,0x40,0xFE,0x7F,0x00,0x00,0x00,0x00,0x00,0x00},//"]",61 {0x00,0x00,0x00,0x00,0x04,0x00,0x02,0x00,0x02,0x00,0x02,0x00,0x04,0x00,0x00,0x00},//"^",62 {0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80},//"_",63 {0x00,0x00,0x02,0x00,0x02,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},//"`",64 {0x00,0x00,0x00,0x19,0x80,0x24,0x80,0x22,0x80,0x22,0x80,0x22,0x00,0x3F,0x00,0x20},//"a",65 {0x08,0x00,0xF8,0x3F,0x00,0x11,0x80,0x20,0x80,0x20,0x00,0x11,0x00,0x0E,0x00,0x00},//"b",66 {0x00,0x00,0x00,0x0E,0x00,0x11,0x80,0x20,0x80,0x20,0x80,0x20,0x00,0x11,0x00,0x00},//"c",67 {0x00,0x00,0x00,0x0E,0x00,0x11,0x80,0x20,0x80,0x20,0x88,0x10,0xF8,0x3F,0x00,0x20},//"d",68 {0x00,0x00,0x00,0x1F,0x80,0x22,0x80,0x22,0x80,0x22,0x80,0x22,0x00,0x13,0x00,0x00},//"e",69 {0x00,0x00,0x80,0x20,0x80,0x20,0xF0,0x3F,0x88,0x20,0x88,0x20,0x88,0x00,0x18,0x00},//"f",70 {0x00,0x00,0x00,0x6B,0x80,0x94,0x80,0x94,0x80,0x94,0x80,0x93,0x80,0x60,0x00,0x00},//"g",71 {0x08,0x20,0xF8,0x3F,0x00,0x21,0x80,0x00,0x80,0x00,0x80,0x20,0x00,0x3F,0x00,0x20},//"h",72 {0x00,0x00,0x80,0x20,0x98,0x20,0x98,0x3F,0x00,0x20,0x00,0x20,0x00,0x00,0x00,0x00},//"i",73 {0x00,0x00,0x00,0xC0,0x00,0x80,0x80,0x80,0x98,0x80,0x98,0x7F,0x00,0x00,0x00,0x00},//"j",74 {0x08,0x20,0xF8,0x3F,0x00,0x24,0x00,0x02,0x80,0x2D,0x80,0x30,0x80,0x20,0x00,0x00},//"k",75 {0x00,0x00,0x08,0x20,0x08,0x20,0xF8,0x3F,0x00,0x20,0x00,0x20,0x00,0x00,0x00,0x00},//"l",76{0x80,0x20,0x80,0x3F,0x80,0x20,0x80,0x00,0x80,0x3F,0x80,0x20,0x80,0x00,0x00,0x3F},//"m",77 {0x80,0x20,0x80,0x3F,0x00,0x21,0x80,0x00,0x80,0x00,0x80,0x20,0x00,0x3F,0x00,0x20},//"n",78 {0x00,0x00,0x00,0x1F,0x80,0x20,0x80,0x20,0x80,0x20,0x80,0x20,0x00,0x1F,0x00,0x00},//"o",79 {0x80,0x80,0x80,0xFF,0x00,0xA1,0x80,0x20,0x80,0x20,0x00,0x11,0x00,0x0E,0x00,0x00},//"p",80 {0x00,0x00,0x00,0x0E,0x00,0x11,0x80,0x20,0x80,0x20,0x80,0xA0,0x80,0xFF,0x00,0x80},//"q",81 {0x80,0x20,0x80,0x20,0x80,0x3F,0x00,0x21,0x80,0x20,0x80,0x00,0x80,0x01,0x00,0x00},//"r",82 {0x00,0x00,0x00,0x33,0x80,0x24,0x80,0x24,0x80,0x24,0x80,0x24,0x80,0x19,0x00,0x00},//"s",83 {0x00,0x00,0x80,0x00,0x80,0x00,0xE0,0x1F,0x80,0x20,0x80,0x20,0x00,0x00,0x00,0x00},//"t",84 {0x80,0x00,0x80,0x1F,0x00,0x20,0x00,0x20,0x00,0x20,0x80,0x10,0x80,0x3F,0x00,0x20},//"u",85 {0x80,0x00,0x80,0x01,0x80,0x0E,0x00,0x30,0x00,0x08,0x80,0x06,0x80,0x01,0x80,0x00},//"v",86 {0x80,0x0F,0x80,0x30,0x00,0x0C,0x80,0x03,0x00,0x0C,0x80,0x30,0x80,0x0F,0x80,0x00},//"w",87 {0x00,0x00,0x80,0x20,0x80,0x31,0x00,0x2E,0x80,0x0E,0x80,0x31,0x80,0x20,0x00,0x00},//"x",88 {0x80,0x80,0x80,0x81,0x80,0x8E,0x00,0x70,0x00,0x18,0x80,0x06,0x80,0x01,0x80,0x00},//"y",89 {0x00,0x00,0x80,0x21,0x80,0x30,0x80,0x2C,0x80,0x22,0x80,0x21,0x80,0x30,0x00,0x00},//"z",90 {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x7C,0x3F,0x02,0x40,0x02,0x40},//"{",91 {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00},//"|",92 {0x00,0x00,0x02,0x40,0x02,0x40,0x7C,0x3F,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00},//"}",93 {0x00,0x00,0x06,0x00,0x01,0x00,0x01,0x00,0x02,0x00,0x02,0x00,0x04,0x00,0x04,0x00},//"~",94 };//常用ASCII表//纵向取模//偏移量:32//大小:8*6const unsigned char ASCII_0806[95][6]={{0x00,0x00,0x00,0x00,0x00,0x00},//- - //space{0x00,0x00,0x4f,0x00,0x00,0x00},//-!-{0x00,0x07,0x00,0x07,0x00,0x00},//-"-{0x14,0x7f,0x14,0x7f,0x14,0x00},//-#-{0x24,0x2a,0x7f,0x2a,0x12,0x00},//-$-{0x23,0x13,0x08,0x64,0x62,0x00},//-%-{0x36,0x49,0x55,0x22,0x50,0x00},//-&-{0x00,0x05,0x07,0x00,0x00,0x00},//-'-{0x00,0x1c,0x22,0x41,0x00,0x00},//-(-{0x00,0x41,0x22,0x1c,0x00,0x00},//-)-{0x14,0x08,0x3e,0x08,0x14,0x00},//-*-{0x08,0x08,0x3e,0x08,0x08,0x00},//-+-{0x00,0x50,0x30,0x00,0x00,0x00},//-,-{0x08,0x08,0x08,0x08,0x08,0x00},//---{0x00,0x60,0x60,0x00,0x00,0x00},//-.-{0x20,0x10,0x08,0x04,0x02,0x00},//-/-{0x3e,0x51,0x49,0x45,0x3e,0x00},//-0-{0x00,0x42,0x7f,0x40,0x00,0x00},//-1-{0x21,0x41,0x45,0x4b,0x31,0x00},//-3- {0x18,0x14,0x12,0x7f,0x10,0x00},//-4- {0x27,0x45,0x45,0x45,0x39,0x00},//-5- {0x3c,0x4a,0x49,0x49,0x30,0x00},//-6- {0x01,0x71,0x09,0x05,0x03,0x00},//-7- {0x36,0x49,0x49,0x49,0x36,0x00},//-8- {0x06,0x49,0x49,0x29,0x1e,0x00},//-9- {0x00,0x36,0x36,0x00,0x00,0x00},//-:- {0x00,0x56,0x36,0x00,0x00,0x00},//-;- {0x08,0x14,0x22,0x41,0x00,0x00},//-<- {0x14,0x14,0x14,0x14,0x14,0x00},//-=- {0x00,0x41,0x22,0x14,0x08,0x00},//->- {0x02,0x01,0x51,0x09,0x06,0x00},//-?- {0x32,0x49,0x79,0x41,0x3e,0x00},//-@- {0x7e,0x11,0x11,0x11,0x7e,0x00},//-A- {0x7f,0x49,0x49,0x49,0x36,0x00},//-B- {0x3e,0x41,0x41,0x41,0x22,0x00},//-C- {0x7f,0x41,0x41,0x22,0x1c,0x00},//-D- {0x7f,0x49,0x49,0x49,0x41,0x00},//-E- {0x7f,0x09,0x09,0x09,0x01,0x00},//-F- {0x3e,0x41,0x49,0x49,0x7a,0x00},//-G- {0x7f,0x08,0x08,0x08,0x7f,0x00},//-H- {0x00,0x41,0x7f,0x41,0x00,0x00},//-I- {0x20,0x40,0x41,0x3f,0x01,0x00},//-J- {0x7f,0x08,0x14,0x22,0x41,0x00},//-K- {0x7f,0x40,0x40,0x40,0x40,0x00},//-L- {0x7f,0x02,0x0c,0x02,0x7f,0x00},//-M- {0x7f,0x04,0x08,0x10,0x7f,0x00},//-N- {0x3e,0x41,0x41,0x41,0x3e,0x00},//-O- {0x7f,0x09,0x09,0x09,0x06,0x00},//-P- {0x3e,0x41,0x51,0x21,0x5e,0x00},//-Q- {0x7f,0x09,0x19,0x29,0x46,0x00},//-R- {0x46,0x49,0x49,0x49,0x31,0x00},//-S- {0x01,0x01,0x7f,0x01,0x01,0x00},//-T- {0x3f,0x40,0x40,0x40,0x3f,0x00},//-U- {0x1f,0x20,0x40,0x20,0x1f,0x00},//-V- {0x3f,0x40,0x38,0x40,0x3f,0x00},//-W- {0x63,0x14,0x08,0x14,0x63,0x00},//-X- {0x07,0x08,0x70,0x08,0x07,0x00},//-Y- {0x61,0x51,0x49,0x45,0x43,0x00},//-Z- {0x00,0x7f,0x41,0x41,0x00,0x00},//-[- {0x02,0x04,0x08,0x10,0x20,0x00},//-\- {0x00,0x41,0x41,0x7f,0x00,0x00},//-]-{0x40,0x40,0x40,0x40,0x40,0x00},//-_- {0x01,0x02,0x04,0x00,0x00,0x00},//-`- {0x20,0x54,0x54,0x54,0x78,0x00},//-a- {0x7f,0x48,0x48,0x48,0x30,0x00},//-b- {0x38,0x44,0x44,0x44,0x44,0x00},//-c- {0x30,0x48,0x48,0x48,0x7f,0x00},//-d- {0x38,0x54,0x54,0x54,0x58,0x00},//-e- {0x00,0x08,0x7e,0x09,0x02,0x00},//-f- {0x48,0x54,0x54,0x54,0x3c,0x00},//-g- {0x7f,0x08,0x08,0x08,0x70,0x00},//-h- {0x00,0x00,0x7a,0x00,0x00,0x00},//-i- {0x20,0x40,0x40,0x3d,0x00,0x00},//-j- {0x7f,0x20,0x28,0x44,0x00,0x00},//-k- {0x00,0x41,0x7f,0x40,0x00,0x00},//-l- {0x7c,0x04,0x38,0x04,0x7c,0x00},//-m- {0x7c,0x08,0x04,0x04,0x78,0x00},//-n- {0x38,0x44,0x44,0x44,0x38,0x00},//-o- {0x7c,0x14,0x14,0x14,0x08,0x00},//-p- {0x08,0x14,0x14,0x14,0x7c,0x00},//-q- {0x7c,0x08,0x04,0x04,0x08,0x00},//-r- {0x48,0x54,0x54,0x54,0x24,0x00},//-s- {0x04,0x04,0x3f,0x44,0x24,0x00},//-t- {0x3c,0x40,0x40,0x40,0x3c,0x00},//-u- {0x1c,0x20,0x40,0x20,0x1c,0x00},//-v- {0x3c,0x40,0x30,0x40,0x3c,0x00},//-w- {0x44,0x28,0x10,0x28,0x44,0x00},//-x- {0x04,0x48,0x30,0x08,0x04,0x00},//-y- {0x44,0x64,0x54,0x4c,0x44,0x00},//-z- {0x08,0x36,0x41,0x41,0x00,0x00},//-{- {0x00,0x00,0x77,0x00,0x00,0x00},//-|- {0x00,0x41,0x41,0x36,0x08,0x00},//-}- {0x04,0x02,0x02,0x02,0x01,0x00},//-~- };#endif。
OLEDSSD1306与SSD1315在初始化的区别在使⽤0.96⼨的OLED时,发现之前的代码不能正常通过单⽚机的IIC使⽤DMA进⾏刷新,刷新时总是错⼀位,后来查阅资料发现是现在的OLED使⽤了SSD1315替换了SSD1306控制芯⽚,贴⼀下各个初始化过程,⽅便记录:SSD1306初始化:1/**2 * @brief OLED初始化3 * @param None4 * @retval None.5*/6void OLED_Init(void)7 {8#if SENDDTA_DMA9 I2C_DMA_WriteReg( (uint8_t*)OLED_Init_CMD, OLED_ADDRESS,OLED_WriteCom_Addr,sizeof(OLED_Init_CMD)); //sizeof(OLED_Init_CMD)10#else11// DelayMs(100); //这⾥的延时很重要12 delay_ms(10);13 WriteCmd(0xAE); //display off14 WriteCmd(0x20); //Set Memory Addressing Mode15 WriteCmd(0x10); //00,Horizontal Addressing Mode;01,Vertical Addressing Mode;10,Page Addressing Mode (RESET);11,Invalid16 WriteCmd(0xb0); //Set Page Start Address for Page Addressing Mode,0-717 WriteCmd(0xc8); //Set COM Output Scan Direction18 WriteCmd(0x00); //---set low column address19 WriteCmd(0x10); //---set high column address20 WriteCmd(0x40); //--set start line address21 WriteCmd(0x81); //--set contrast control register22 WriteCmd(0xff); //亮度调节 0x00~0xff23 WriteCmd(0xa1); //--set segment re-map 0 to 12724 WriteCmd(0xa6); //--set normal display25 WriteCmd(0xa8); //--set multiplex ratio(1 to 64)26 WriteCmd(0x3F); //27 WriteCmd(0xa4); //0xa4,Output follows RAM content;0xa5,Output ignores RAM content28 WriteCmd(0xd3); //-set display offset29 WriteCmd(0x00); //-not offset30 WriteCmd(0xd5); //--set display clock divide ratio/oscillator frequency31 WriteCmd(0xf0); //--set divide ratio32 WriteCmd(0xd9); //--set pre-charge period33 WriteCmd(0x22); //34 WriteCmd(0xda); //--set com pins hardware configuration35 WriteCmd(0x12);36 WriteCmd(0xdb); //--set vcomh37 WriteCmd(0x20); //0x20,0.77xVcc38 WriteCmd(0x8d); //--set DC-DC enable39 WriteCmd(0x14); //40 WriteCmd(0xaf); //--turn on oled panel41#endif42 }这⾥使⽤默认是刷新⽅式,按照页写数据没有问题,使⽤DMA时需要把照寻址⽅式修改为了⽔平寻址时就出现了刷新数据不对的问题为此,我直接使⽤了⽹络上默认的⽅式对DMA发送指令进⾏初始化const uint8_t OLED_Init_CMD[] ={0xAE,0x00,0x10,0x40,0xB0,0x81,0xFF,0xA1,0xA6,0xA8,0x3F,0xC8,0xD3,0x00,0xD5,0x80,0xD8,0x05,0xD9,0xF1,0xDA,0x12,0xDB,0x30,0x8D,0x14,0xAF,0x20,0x00};发现使⽤改⽅式刷新SSD1315类型的OLED时会出问题,对其进⾏修改:const uint8_t OLED_Init_CMD[] ={ 0xae,0x00,0x10,0x40,0x81,0xcf,0xa1,0xc8,0xa6,0xa8, 0x3f,0xd3,0x00,0xd5,0x80,0xd9,0xf1,0xda,0x12,0xdb, 0x40,0x20,0x00,0x8d,0x14,0xa4,0xa6,0xaf};⽴刻正常,看来两个⽚⼦的⼯作模式还是有些区别的。
简介SSD1306是一个单片CMOS OLED/PLED驱动芯片可以驱动有机/聚合发光二极管点阵图形显示系统。
由128 segments 和64 Commons组成。
该芯片专为共阴极OLED面板设计。
SSD1306中嵌入了对比度控制器、显示RAM和晶振,并因此减少了外部器件和功耗。
有256级亮度控制。
数据/命令的发送有三种接口可选择:6800/8000串口,I2C接口或SPI接口。
适用于多数简介的应用,注入移动的屏显,MP3播放器和计算器等。
特性1.分辨率:128 * 64 点阵面板2.电源:a)VDD = 1.65V to 3.3V 用于IC逻辑b)VCC = 7V to 15V 用于面板驱动3.点阵显示a)OLED驱动输出电压,最大15Vb)Segment最大电流:100uAc)常见最大反向电流:15mAd)256级对比亮度电流控制4.嵌入式128 * 64位SRAM显示缓存5.引脚选择MCU接口a)8位6800/8000串口b)3/4线SPI接口c)I2C接口6.水平和垂直两个方向的屏幕保存连续滚动功能。
7.RAM写同步信号8.可编程的帧率和多重比率9.行重映射和列冲映射10.片上晶振11.两种封装COG和COF12.工作温度围广:-40℃to 85℃订购信息暂不翻译结构方框图功能块描述MCU接口选择SSD1306MCU接口由8个数据引脚和5个控制引脚组成。
引脚分配由不同的接口选择决定,详情如下表。
不同的MCU模块可以通过BS[2:0]引脚的硬件选择设置。
MCU 并口6800系列接口不翻译MCU 并口8080系列接口不翻译MCU串口(4-wire SPI)不翻译MCU串口(3-wire SPI)不翻译MCU I2C 接口I2C通讯接口由从机地址为SA0,I2C总线数据信号(SDAout/D2输出和SDAin/D1输入)和I2C总线时钟信号SCL(D0)组成。
数据和时钟信号线都必须接上上拉电阻。
7.6 系统显示设计控制系统显示常用的显示器件有数码管、LCD、OLED等。
OLED即有机发光二极管(Organic Light Emitting Diode),其同时具备自发光,不需背光源、对比度高、制程较简单等优异之特性,被认为是下一代的平面显示器新兴应用技术。
本节主要介绍OLED的工作原理、底层驱动代码编写以及如何通过取模软件显示任何自己想要显示的文字或者图片。
7.6.1 OLED显示原理如图4所示为0.96寸OLED显示模块,其分辨率为128*64,采用4线SPI接口方式,模块的接口定义如表1所示。
图4 0.96寸OLED显示模块种并行接口方式、3线或4线SPI接口方式、IIC接口方式。
这里介绍OLED模块4线SPI 通信方式,只需4根通信线就能实现对OLED模块的显示控制,这4根线为:D0、D1、DC、CS。
如图5所示为4线SPI写操作时序图,在4线SPI模式下,每个数据长度均为8位,也即为1个字节。
每次发送该字节数据前,如果该字节数据为指令号,则将DC管脚拉低;如果该字节数据为普通数据,则将DC管脚置高。
在SCLK上升沿,数据从SDIN移入SSD1306,并且高位在前。
SSD1306的显存总共为128*64bit大小,SSD1306将这些显存分为8页,其对应关系如表2所示。
可见OLED水平像素分为128段,即SEG0~SEG127;垂直像素平分为8页,也即垂直方向每8个像素点为1页。
从而可见,在确定显示的位置后,通过往显存中写入一个字节数据,则相应的SEG将按照数据进行显示,位数据为1时,相应像素点被点亮,位数据为0时,相应的像素点熄灭。
图5 4线SPI写操作时序图令较多,具体的可以参考相关手册,这里介绍如表3所示几个比较常用的指令。
命令,随后发送的一个字节为要设置的对比度的值。
这个值设置得越大屏幕就越亮。
第二个命令为 0XAE/0XAF。
0XAE 为关闭显示命令; 0XAF 为开启显示命令。
oled中文手册OLED(Organic Light Emitting Diodes,有机发光二极管)是一种基于有机材料的发光显示技术。
由于其具有自发光、高对比度、低功耗、快速响应等优点,OLED显示器在手机、电视、平板电脑等领域得到了广泛应用。
以下是OLED中文手册的一些基本概念和操作说明:1. OLED结构:OLED主要由玻璃基板、ITO(铟锡氧化物)阳极、有机发光层、阴极和封装层组成。
2. OLED工作原理:当电流通过有机发光层时,正负电荷在有机材料中复合,释放出能量,使有机材料发光。
3. OLED驱动方式:OLED采用被动矩阵(PMOLED)或主动矩阵(AMOLED)驱动方式。
PMOLED采用分立的驱动电路,每个像素由一个TFT(薄膜晶体管)控制;AMOLED采用集成的驱动电路,每个像素由多个TFT共享一个驱动电路。
4. OLED显示模式:OLED支持多种显示模式,如静态显示、动态显示、滚动显示等。
5. OLED颜色:OLED可以显示红、绿、蓝三种基本颜色,通过调节这三种颜色的亮度比例,可以实现各种颜色的组合。
6. OLED亮度调节:OLED可以通过PWM(脉宽调制)技术调节亮度,实现低功耗和高对比度的显示效果。
7. OLED电源管理:OLED需要稳定的电源电压和电流,通常采用DC-DC转换器将外部电源转换为适合OLED工作的电压和电流。
8. OLED驱动芯片:市场上有多种OLED驱动芯片可供选择,如SSD1306、SSD1327、ILI9341等。
这些驱动芯片提供了丰富的功能和接口,方便用户进行二次开发。
9. OLED编程:用户可以通过编程控制OLED的显示内容、颜色、亮度等参数,实现自定义的显示效果。
常用的编程语言有C语言、Python 等。
精品文档简介SSD1306是一个单片CMOS OLED/PLED驱动芯片可以驱动有机/聚合发光二极管点阵图形显示系统。
由128 segments 和64 Commons组成。
该芯片专为共阴极OLED面板设计。
SSD1306中嵌入了对比度控制器、显示RAM和晶振,并因此减少了外部器件和功耗。
有256级亮度控制。
数据/命令的发送有三种接口可选择:6800/8000串口,I2C接口或SPI接口。
适用于多数简介的应用,注入移动电话的屏显,MP3播放器和计算器等。
特性1.分辨率:128 * 64 点阵面板2.电源:a)VDD = 1.65V to 3.3V 用于IC逻辑b)VCC = 7V to 15V 用于面板驱动3.点阵显示a)OLED驱动输出电压,最大15Vb)Segment最大电流:100uAc)常见最大反向电流:15mAd)256级对比亮度电流控制4.嵌入式128 * 64位SRAM显示缓存5.引脚选择MCU接口a)8位6800/8000串口b)3/4线SPI接口c)I2C接口6.水平和垂直两个方向的屏幕保存连续滚动功能。
7.RAM写同步信号8.可编程的帧率和多重比率9.行重映射和列冲映射10.片上晶振11.两种封装COG和COF12.工作温度范围广:-40℃to 85℃订购信息暂不翻译精品文档.精品文档结构方框图功能块描述接口选择MCU个控制引脚组成。
引脚分配由不同的接口选择决定,个数据引脚和5SSD1306MCU接口由8 BS[2:0]引脚的硬件选择设置。
模块可以通过详情如下表。
不同的MCU精品文档.精品文档接控制信ER/W#CS#D2D1D0D/C#RES#D4D3RES#RD#CS#WR#D/C#RES#CS#ED/C#R/W#RES#SDINSCLKCS#Tie LOWTieNCLOWRES#D/C#Tie LOWCS#NCSDINSCLKRES#Tie LOWSDAoutSClSDAinSA0MCU 并口6800系列接口不翻译MCU 并口8080系列接口不翻译MCU串口(4-wire SPI)不翻译MCU串口(3-wire SPI)不翻译MCU I2C 接口I2C通讯接口由从机地址为SA0,I2C总线数据信号(SDAout/D2输出和SDAin/D1输入)和I2C总线时钟信号SCL(D0)组成。
SSD1306驱动显示命令命令表单(D/C#=0, R/W#(WR#) = 0, E(RD#=1) 特殊状态除外) 1、基本命令D/C Hex D7 D6 D5 D4 D3 D2 D1 D0 命令描述0 81A[7:0] 1A7A6A5A4A3A2A11A0设置对比度双字节命令,1~256级对比度可选,对比度随值增加。
(复位值 = 0x7f)0 A4/A5 1 0 0 0 0 1 0 X0全部显示开A4h,X0 = 0 :恢复内存内容显示(默认),输出内存中的内容A5h,X0= 1 :开显示,输出无视内存的内容0 A6/A7 1 0 0 0 0 1 1 X0设置正常/逆显示A6,X[0]= 0:正常显示(默认) RAM为0:显示面板关RAM为1:显示面板开A7 X[0]= 1:逆显示RAM为0:显示面板开RAM为1:显示面板关0 AE/AF 1 0 0 0 1 1 1 X0设置显示开/关AE:X[0]= 0:关显示(默认) AF:X[0]= 1:在正常模式显示2、滚动命令表D/C Hex D7 D6 D5 D4 D3 D2 D1 D0 命令描述0 0 0 0 0 0 0 26/27A[7:0]B[2:0]C[2:0]D[2:0]E[7:0]F[7:0]***1***11***1***1***11B2C2D211B1C1D11X0B0C0D01连续水平滚动设置26小时,X[0]= 0,右向水平滚动27 h,X[0]= 1,左向水平滚动(水平滚动1列)[7:0]:虚拟字节(设置为00 h)B(2:0):定义开始页面地址0~7 PAGE0~ PAGE7C(2:0):设置每个滚动步骤之间的时间间隔的帧频000 b - 5帧100 b - 3帧001 b - 64帧101 b - 4帧010 b - 128帧110 b - 25帧011 b - 256帧111 b - 2帧D(2:0):定义最终页面地址0~7 PAGE0~ PAGE7D(2:0)的值必须大于或等于B(2:0)E[7:0]:虚拟字节(设置为00 h)F[7:0]:虚拟字节(设置为FFh)0 0 0 0 29/2AA[2:0]B[2:0]C[2:0]****1****1**B2C2X1B1C1X0B0C0连续垂直和水平滚动设置29H,X1X0 = 01 :垂直和水平滚动2AH,X1X0 = 10 :垂直和水平滚动(水平滚动1列)[7:0]:虚拟字节0 0 D[2:0]E[5:0]***E5*E4*E3D2E2D1E1D0E0B(2:0):定义开始页面地址0~7 PAGE0~ PAGE7C(2:0):设置每个滚动步骤之间的时间间隔的帧频000 b - 5帧100 b - 3帧001 b - 64帧101 b - 4帧010 b - 128帧110 b - 25帧011 b - 256帧111 b - 2帧D(2:0):定义最终页面地址0~7 PAGE0~ PAGE7D(2:0)的值必须大于或等于B(2:0)E[5:0]:垂直滚动偏移量例如E[5:0]= 01 h指抵消= 1行E(5:0)= 3跳频是指抵消= 63行请注意(1)没有可用连续垂直滚动。
2SD1306Silicon NPN EpitaxialREJ03G0784-0200(Previous ADE-208-1144)Rev.2.00Aug.10.2005ApplicationLow frequency amplifier, MutingOutlineAbsolute Maximum Ratings(Ta = 25°C)UnitRatingsItem SymbolCollector to base voltage V CBO 30 VCollector to emitter voltage V CEO 15 VEmitter to base voltage V EBO 5 VCollector current I C 0.7 ACollector power dissipation P C 150 mWJunction temperature Tj 150 °CStorage temperature Tstg –55 to +150 °CElectrical Characteristics(Ta = 25°C)UnitMaxconditionsTestMinItem SymbolTypCollector to base breakdown voltage V(BR)CBO 30 — — V I C = 10 µA, I E = 0Collector to emitter breakdown voltage V(BR)CEO 15 — — V I C = 1 mA, R BE = ∞Emitter to base breakdown voltage V(BR)EBO 5 — — V I E = 10 µA, I C = 0Collector cutoff current I CBO — — 1.0 µA V CB = 20 V, I E = 0DC current transfer ratio h FE*1 250 — 800 V CE = 1 V, I C = 150 mA*2V CE = 1 V, I C = 150 mA*2Base to emitter voltage V BE — — 1.0 VCollector to emitter saturation voltage V CE(sat) — — 0.5 V I C = 500 mA, I B = 50 mA*2V CE = 1 V, I C = 150 mA*2MHz250Gain bandwidth product f T ——Notes: 1. The 2SD1306 is grouped by h FE as follows.testPulse2.Grade D EMark NDNEh FE250 to 500 400 to 800Main CharacteristicsPackage DimensionsOrdering InformationPart Name Quantity Shipping Container3000 φ 178 mm Reel, 8 mm Emboss Taping2SD1306NDTL-E2SD1306NETL-ENote: For some grades, production may be terminated. Please contact the Renesas sales office to check the state of production before ordering the product. RENESAS SALES OFFICESRefer to "/en/network" for the latest and detailed information.Renesas Technology America, Inc.450 Holger Way, San Jose, CA 95134-1368, U.S.ATel: <1> (408) 382-7500, Fax: <1> (408) 382-7501Renesas Technology Europe LimitedDukes Meadow, Millboard Road, Bourne End, Buckinghamshire, SL8 5FH, U.K.Tel: <44> (1628) 585-100, Fax: <44> (1628) 585-900Renesas Technology Hong Kong Ltd.7th Floor, North Tower, World Finance Centre, Harbour City, 1 Canton Road, Tsimshatsui, Kowloon, Hong KongTel: <852> 2265-6688, Fax: <852> 2730-6071Renesas Technology Taiwan Co., Ltd.10th Floor, No.99, Fushing North Road, Taipei, TaiwanTel: <886> (2) 2715-2888, Fax: <886> (2) 2713-2999Renesas Technology (Shanghai) Co., Ltd.Unit2607 Ruijing Building, No.205 Maoming Road (S), Shanghai 200020, ChinaTel: <86> (21) 6472-1001, Fax: <86> (21) 6415-2952Renesas Technology Singapore Pte. Ltd.1 Harbour Front Avenue, #06-10, Keppel Bay Tower, Singapore 098632Tel: <65> 6213-0200, Fax: <65> 6278-8001Renesas Technology Korea Co., Ltd.Kukje Center Bldg. 18th Fl., 191, 2-ka, Hangang-ro, Yongsan-ku, Seoul 140-702, KoreaTel: <82> 2-796-3115, Fax: <82> 2-796-2145Renesas Technology Malaysia Sdn. Bhd.Unit 906, Block B, Menara Amcorp, Amcorp Trade Centre, No.18, Jalan Persiaran Barat, 46050 Petaling Jaya, Selangor Darul Ehsan, MalaysiaTel: <603> 7955-9390, Fax: <603> 7955-9510。
0.96⼨OLED显⽰屏IIC接⼝(SSD1306)IIC接⼝引脚分配SSD1306在I2C总线模式下的接⼝分配数据/命令引脚控制引脚[D7:D3]D2D1D0E R/W#CS#D/C#RES#共阴SDA OUT SDA IN SCL共阴SA0RES#IIC通信接⼝由总线的数据信号SDA(SDA OUT和SDA IN)和总线的时钟信号SCL组成。
数据和时钟信号必须连接上拉电阻。
SA0 为从机地址引脚,RES#为设备的初始化引脚。
1.SDA 数据信号线 SDA是主机和从机间进⾏数据收发和应答的通道。
需注意的是,SDA引脚的ITO 电阻和上拉电阻有⼀个潜在的分压,结果就是,SDA线上的应答信号可能达不到有效的低电平。
SDA OUT和SDA IN连接在⼀起由数据信号线SDA引出,SDA IN引脚必须连接以充当SDA。
SDA OUT引脚可能断开。
当SDA OUT引脚断开时,I2C总线中的应答信号将被忽略。
2.SCL 时钟信号线 信息在IIC总线中的传输遵循时钟信号SCL。
数据位的每次传输都是在SCL的单个时钟周期内进⾏的。
3.SA0 丛机地址位在IIC总线发送或接收任何信息之前,SSD1306必须先识别从机地址。
设备将响应具有以下字节格式的字节:bit7bit6bit5bit4bit3bit2bit1bit0011110SA0R/W#”D/C#“作为SA0⽤于从地址选择。
SA0位为从机地址提供扩展位。
“0111100”或“0111101”均可作为SSD1306的从机地址。
“R/W#”⽤于确定IIC总线接⼝的操作模式。
R/W#=1,为读取模式。
R/W#=0,为写⼊模式。
写数据I2C总线接⼝允许将数据和命令写⼊设备,以下为I2C总线的写⼊模式按时序图。
IIC总线写⼊数据格式IIC写⼊模式1.主机通过启动条件启动数据通信。
启动条件是在SCL保持⾼电平期间捕获到SDA的⼀个下降沿,见下图:IIC通信启动和停⽌条件2.开始通信后⾸先发送⼀个字节:从机地址和读写控制位R/W#。
SSD1306(OLED驱动芯⽚)指令详解基础命令:1.页地址模式下设置列起始地址低位(Set Lower Column Start Address For Page Addressing Mode)(00h~0Fh)此指令⽤于在页地址模式下设置GDDRAM的列起始地址(8位)的低4位, 页地址会在数据访问后递增2.页地址模式下设置列起始地址⾼位(Set Higher Column Start Address For Page Addressing Mode)(10h~1Fh)此指令⽤于在页地址模式下设置GDDRAM的列起始地址(8位)的⾼4位, 页地址会在数据访问后递增3.设置内存地址模式(Set Memory Addressing Mode)(20h)在SSD1306中有三种地址模式: 页地址模式, ⽔平地址模式和垂直地址模式, 此命令⽤于将地址模式设置为以上三种之⼀'COL'的含义是GDDRAM列(column)页地址模式(A[1:0]=10b)当处于此模式时, 在GDDRAM访问后(读/写), 列地址指针将⾃动增加1。
如果列地址指针到达列终⽌地址, 列地址指针将复位到列起始地址, 但页地址指针不会改变。
为了访问GDDRAM中下⼀页的内容, ⽤户必须设置新的页地址和列地址。
页地址模式下页以及列地址指针的⾏为如下图所⽰通常在页地址模式下访问GDDRAM, 需要如下步骤来定义起始RAM访问指针指向:-通过命令(B0h-B7h)设置⽬标显⽰位置页起始地址-通过命令(00h-0Fh)设置列起始地址低位-通过命令(10h-1Fh)设置列起始地址⾼位例如, 如果页地址是B2h, 列地址低位是03h, 列地址⾼位是10h, 起始列将为PAGE2的SEG3, GDDRAM访问指针的指向如下图所⽰⽔平地址模式(A[1:0]=00b)当处于此模式时, 在GDDRAM访问后(读/写), 列地址指针将⾃动增加1。
0.96寸4脚oled显示屏驱动原理0.96寸4脚OLED(有机发光二极管)显示屏通常是基于 SSD1306 驱动芯片的。
SSD1306 是一种常用于驱动OLED显示器的控制器芯片。
以下是其基本工作原理:电源供应: OLED显示屏通常需要3.3V或5V的电源供应。
供电后,OLED屏幕就开始工作。
通信接口:SSD1306芯片支持I2C或SPI等通信接口,具体取决于显示屏的设计。
I2C通信是常见的选择,因为它使用的引脚较少。
初始化:在使用OLED显示屏之前,需要通过通信接口对SSD1306进行初始化。
这通常涉及将一系列控制命令发送到芯片,以设置显示参数、亮度等。
数据传输:一旦初始化完成,可以通过通信接口向SSD1306发送图像数据或文本数据。
SSD1306的内存结构是一个图形缓冲区,你可以在其中绘制要显示的内容。
刷新屏幕:绘制完成后,需要通过命令刷新OLED屏幕,将缓冲区的内容实际显示在屏幕上。
这通常涉及到发送一些刷新屏幕的控制命令。
显示控制:SSD1306芯片允许设置显示的方向(横向或纵向)、翻转显示等。
这可以通过控制命令进行配置。
以下是一个简单的基于Python的使用Adafruit SSD1306库的例子(需要安装相应的库):import boardimport busioimport adafruit_ssd1306from PIL import Image, ImageDraw, ImageFont# 创建I2C总线i2c = busio.I2C(board.SCL, board.SDA)# 创建SSD1306显示器对象oled = adafruit_ssd1306.SSD1306_I2C(128, 64, i2c)# 创建图像对象image = Image.new("1", (oled.width, oled.height))draw = ImageDraw.Draw(image)# 绘制文本font = ImageFont.load_default()draw.text((10, 10), "Hello, OLED!", font=font, fill=255)# 显示图像oled.image(image)oled.show()这只是一个简单的例子,实际的应用可能需要更多的功能,例如动画、图形绘制等。
简介SSD1306是一个单片CMOS OLED/PLED驱动芯片可以驱动有机/聚合发光二极管点阵图形显示系统。
由128 segments 和64 Commons组成。
该芯片专为共阴极OLED面板设计。
SSD1306中嵌入了对比度控制器、显示RAM和晶振,并因此减少了外部器件和功耗。
有256级亮度控制。
数据/命令的发送有三种接口可选择:6800/8000串口,I2C接口或SPI接口。
适用于多数简介的应用,注入移动电话的屏显,MP3播放器和计算器等。
特性1.分辨率:128 * 64 点阵面板2.电源:a)VDD = 1.65V to 3.3V 用于IC逻辑b)VCC = 7V to 15V 用于面板驱动3.点阵显示a)OLED驱动输出电压,最大15Vb)Segment最大电流:100uAc)常见最大反向电流:15mAd)256级对比亮度电流控制4.嵌入式128 * 64位SRAM显示缓存5.引脚选择MCU接口a)8位6800/8000串口b)3/4线SPI接口c)I2C接口6.水平和垂直两个方向的屏幕保存连续滚动功能。
7.RAM写同步信号8.可编程的帧率和多重比率9.行重映射和列冲映射10.片上晶振11.两种封装 COG和COF12.工作温度范围广:‐40℃ to 85℃订购信息暂不翻译结构方框图功能块描述MCU接口选择SSD1306MCU接口由8个数据引脚和5个控制引脚组成。
引脚分配由不同的接口选择决定,详情如下表。
不同的MCU模块可以通过BS[2:0]引脚的硬件选择设置。
MCU 并口 6800系列接口不翻译MCU 并口8080系列接口不翻译MCU串口(4‐wire SPI)不翻译MCU串口(3‐wire SPI)不翻译MCU I2C 接口I2C通讯接口由从机地址为SA0,I2C总线数据信号(SDAout/D2输出和SDAin/D1输入)和I2C 总线时钟信号SCL(D0)组成。
数据和时钟信号线都必须接上上拉电阻。
0.96inch OLEDUser Manual 1.Driver Chip SSD1306Interface 3-wire SPI、4-wire SPI、I2CResolution 128x64Display Size 0.96 inchDimension 29mm*33mmColors Yellow, BlueVisible Angle >160°Operating Temp. (℃) -20℃~70℃Storage Temp. (℃) -30℃~80℃2.We will illustrate the usage of the module with an example of 4-wire SPI mode (defaultworking mode) by connecting Waveshare Open103R development board (STM32V MCU onboard).2.1.Hardware configurationThis module provides 3 kinds of driver interfaces; they are 3-wire SPI, 4-wire SPI and I2C interface. In its factory settings, BS0/BS1 pins are set to 0/0 and 4-wire SPI is selected as default.Different working mode and pin function of the module can be set by hardware selection on BS0/BS1 pins. (Notice: In this operation, welding is required. Any changes under no guidance from Waveshare will be considered as a waiver of warranty).Table 1: Working mode setting122.2.Software configurationOpen the project file .\IDE\ OLED.uvproj in Keil, navigate to the following text, delete the ‘//’ (Double slash) before #define INTERFACE_4WIRE_SPI After compiling successfully, download the project to Open103R development board. Note: You should delete the ‘//’ (Double slash) corresponding to the mode selection2.3. Hardware connectionsConnect module to the SPI2 interface of Open103R development board, power up. OLED displays information as Figure 1 shows.Figure 1: OLED information display3. 4-wire SPI and I2C interfaces of SSD1306 OLEDThis module provides 3 kinds of driver interfaces. We introduce 4-wire SPI and I2C interfaceshere. You can read Chap. 8.1 from SSD1306-Revision_1.1.pdf for more details.The 4-wire serial interface consists of serial clock: SCLK, serial data: SDIN, D/C#, CS#. In 4-wire SPI mode,D0 acts as SCLK, D1 acts as SDIN. For the unused data pins, D2 should be left open. The pins from D3 to D7, E and R/W# (WR#)# can be connected to an external ground.Table 2: 4-wire SPI Control pins of 4-wire Serial interfaceNote(1) H stands for HIGH in signal(2) L stands for LOW in signalSDIN is shifted into an 8-bit shift register on every rising edge of SCLK in the order of D7, D6 0D/C# is sampled on every eighth clock and the data byte in the shift register is written to the Graphic Display Data RAM (GDDRAM) or command register in the same clock.Under serial mode, only write operations are allowed.Figure 2: Write procedure in 4-wire Serial interface modeThe I2C-bus interface gives access to write data and command into the device. Please referto Figure 2 for the write mode of I2C-bus in chronological order.a)Slave address bit (SA0)SSD1306 has to recognize the slave address before transmitting or receiving any information by the I2C-bus. The device will respond to the slave address following by the slave address bit (“SA0”bit) and the read/write select bit (“R/W#” bit) with the following byte format,b7 b6 b5 b4 b6 b2 b1 b00 1 1 1 1 0 SA0 R/W#“SA0” bit provides an extension bit for the slave address. Either “0111100” or3“0111101”, can be selected as the slave address of SSD1306. D/C# pin acts as SA0 for slave address selection. “R/W#” bit is used to determine the operation mode of the I2C-bus interface.R/W#=1, it is in read mode. R/W#=0, it is in write mode.b)I2C-bus data signal (SDA)SDA acts as a communication channel between the transmitter and the receiver. The data and the acknowledgement are sent through the SDA.It should be noticed that the ITO track resistance and the pulled-up resistance at “SDA” pinbecomes a voltage potential divider. As a result, the acknowledgement would not be possible to attain a valid logic 0 level in “SDA””SDAIN” and “SDAOUT” are tied together and serve as SDA. The “SDAIN” pin must be connected to act as SDA. The “SDAOUT” pin may be disconnected. When “SDAOUT” pin is disconnected, the acknowledgement signal will be ignored in the I2C-bus.c)I2C-bus clock signal (SCL)The transmission of information in the I2C-bus is following a clock signal, SCL. Each transmission of data bit is taken place during a single clock period of SCL.Table 3. I2C I2C-bus data format1)The slave address is following the start condition for recognition use. For the SSD1306, the slaveaddress is either “b0111100” or “b0111101” by changing the SA0 to LOW or HIGH (D/C pin acts as SA0).2)The write mode is established by setting the R/W# bit to logic “0”43)An acknowledgement signal will be generated after receiving one byte of data, including theslave address and the R/W# bit.4)After the transmission of the slave address, either the control byte or the data byte may be sentacross the SDA. A control byte mainly consists of Co and D/C# bits following by six “0” ‘s.a)If the Co bit is set as logic “0”, the transmission of the following information will containdata bytes only.b)The D/C# bit determines the next data byte is acted as a command or a data. If the D/C# bitis set to logic “0”, it defines the following data byte as a command. If the D/C# bit is set tologic “1”, it defines the following data byte as a data which will be stored at the GDDRAM.The GDDRAM column address pointer will be increased by one automatically after eachdata write.5)Acknowledge bit will be generated after receiving each control byte or data byte.5。
特点:1、实时时钟计数秒、分、时、周、日、月、年,一年闰年补偿有效期至2100,96字节的非易失性RAM的数据存储,Day报警的两个时间 - 可编程几秒钟,几分钟,几小时,并组合一周中的天。
2、1 Hz和32.768 kHz的时钟输出3、串行接口支持摩托罗拉串行外设接口(SPI)串行数据端口或标准的3线接口4、突发模式读取/写入连续时钟/ RAM地址5、双电源引脚初级和备用电源,可选的涓流充电输出到备份,供应2.0 - 5.5V操作,可选的工业温度范围-40°C至+85°C6、可在空间效率的20引脚TSSOP封装包说明:1、可通过简单串行口与单片机通信;2、可提供秒、分、时、星期、日、月、年的信息;3、每月的天数和闰年的天数可自动调整;4、可通过 AM/PM 指示决定采用 24 或 12 小时格式;5、提供96字节非易失性RAM,用于数据存储。
6、VCCIF允许DS1306接2路电源和一个备用电池电源,其中VCC2可编程涓流充电;7、DS1306工作范围电源范围2.0~5.5V;8、两路报警时间,可自由编程组合;9、提供1Hz和32KHz时钟输出;10、提供标准的4线和标准的3线接口SPI接口,可一次传输多个字节;引脚:下图为DS1306的引脚引脚说明:VCC1 - 主电源引脚。
VCC2 - 次级电源引脚。
可使用涓流充电,充电系统能量源连接到该管脚。
VBAT - 电池输入,标准3伏锂电池或其它电源(不能充电)。
VCCIF - 确定使用哪路电源;SERMODE-串行接口模式选择,当连接到GND,3线通信。
当连接到VCC,4线通信;SCLK - 同步时钟源;SDI - 当选择4线通信,SDI 引脚是串行数据输入总线。
当选择3线通信,该引脚必须连接到SDO 引脚(SDI 和绑在一起SDO 引脚功能作为一个单一的I / O 引脚)。
SDO - 当选择4线通信,SDO 引脚是串行数据输出总线。