oled初始化程序
- 格式:docx
- 大小:21.68 KB
- 文档页数:17
FPGA驱动OLED动态显⽰(Verilog代码)——OLED初始化/*--------------------------------------------------------------*\Filename : initial_control.vAuthor : CwangDescription :Revision History : 2017-10-16Revision 1.0Email : wangcp@Company : Micro nano instituteCopyright(c) 2017,Micro nano institute,All right resered\*---------------------------------------------------------------*/module initial_control(clk_1m,rst_n,initial_start,spi_write_done,spi_write_start,spi_data,initial_done,res_oled //OLED的RES脚⽤来复位,低电平复位);input clk_1m;input rst_n;input initial_start;input spi_write_done;output spi_write_start;output [9:0] spi_data;output initial_done;output reg res_oled;//--------------------------------------//复位OLEDparameter RES100MS = 20'd100000;reg [19:0] count;reg res_done;always @(posedge clk_1m or negedge rst_n)beginif(!rst_n)begincount <= 20'd0;res_oled <= 1'b0;res_done <= 1'b0;endelseif(count == RES100MS)beginres_oled <= 1'b1;res_done <= 1'b1;count <= RES100MS;endelsebegincount <= count + 1'b1;res_oled <= 1'b0;res_done <= 1'b0;endend//--------------------------------------reg [7:0] i;reg start;reg [9:0] data;reg isdone;//--------------------------------------------------------always@(posedge clk_1m or negedge rst_n)beginif(!rst_n)begini <= 8'd0;start <= 1'b0;isdone <= 1'b0;data <= {2'b11,8'd0};endelsebeginif(initial_start && res_done)begincase(i)//------------------------------------------------------------------------------------- 8'd0:if(spi_write_done) begin start <= 1'b0; i <= i + 1'b1;endelse begin data <= {2'b00,8'hae}; start <= 1'b1;end8'd1:if(spi_write_done) begin start <= 1'b0; i <= i + 1'b1;endelse begin data <= {2'b00,8'h00}; start <= 1'b1;end 8'd2:if(spi_write_done) begin start <= 1'b0; i <= i + 1'b1;endelse begin data <= {2'b00,8'h10}; start <= 1'b1;end8'd3:if(spi_write_done) begin start <= 1'b0; i <= i + 1'b1;endelse begin data <= {2'b00,8'h40}; start <= 1'b1;end8'd4:if(spi_write_done) begin start <= 1'b0; i <= i + 1'b1;endelse begin data <= {2'b00,8'h81}; start <= 1'b1;end8'd5:if(spi_write_done) begin start <= 1'b0; i <= i + 1'b1;endelse begin data <= {2'b00,8'hCF}; start <= 1'b1;end8'd6:if(spi_write_done) begin start <= 1'b0; i <= i + 1'b1;endelse begin data <= {2'b00,8'hA1}; start <= 1'b1;end8'd7:if(spi_write_done) begin start <= 1'b0; i <= i + 1'b1;endelse begin data <= {2'b00,8'hC8}; start <= 1'b1;end8'd8:if(spi_write_done) begin start <= 1'b0; i <= i + 1'b1;endelse begin data <= {2'b00,8'hA6}; start <= 1'b1;end8'd9:if(spi_write_done) begin start <= 1'b0; i <= i + 1'b1;endelse begin data <= {2'b00,8'hA8}; start <= 1'b1;end8'd10:if(spi_write_done) begin start <= 1'b0; i <= i + 1'b1;endelse begin data <= {2'b00,8'h3F}; start <= 1'b1;end8'd11:if(spi_write_done) begin start <= 1'b0; i <= i + 1'b1;endelse begin data <= {2'b00,8'hD3}; start <= 1'b1;end8'd12:if(spi_write_done) begin start <= 1'b0; i <= i + 1'b1;endelse begin data <= {2'b00,8'h00}; start <= 1'b1;end8'd13:if(spi_write_done) begin start <= 1'b0; i <= i + 1'b1;endelse begin data <= {2'b00,8'hD5}; start <= 1'b1;end8'd14:if(spi_write_done) begin start <= 1'b0; i <= i + 1'b1;endelse begin data <= {2'b00,8'h80}; start <= 1'b1;end8'd15:if(spi_write_done) begin start <= 1'b0; i <= i + 1'b1;endelse begin data <= {2'b00,8'hD9}; start <= 1'b1;end8'd16:if(spi_write_done) begin start <= 1'b0; i <= i + 1'b1;endelse begin data <= {2'b00,8'hF1}; start <= 1'b1;end8'd17:if(spi_write_done) begin start <= 1'b0; i <= i + 1'b1;endelse begin data <= {2'b00,8'hDA}; start <= 1'b1;end 8'd18:if(spi_write_done) begin start <= 1'b0; i <= i + 1'b1;endelse begin data <= {2'b00,8'h12}; start <= 1'b1;end8'd19:if(spi_write_done) begin start <= 1'b0; i <= i + 1'b1;endelse begin data <= {2'b00,8'hDB}; start <= 1'b1;end 8'd20:if(spi_write_done) begin start <= 1'b0; i <= i + 1'b1;endelse begin data <= {2'b00,8'h40}; start <= 1'b1;end8'd21:if(spi_write_done) begin start <= 1'b0; i <= i + 1'b1;endelse begin data <= {2'b00,8'h20}; start <= 1'b1;end8'd22:if(spi_write_done) begin start <= 1'b0; i <= i + 1'b1;endelse begin data <= {2'b00,8'h02}; start <= 1'b1;end8'd23:if(spi_write_done) begin start <= 1'b0; i <= i + 1'b1;endelse begin data <= {2'b00,8'h8D}; start <= 1'b1;end8'd24:if(spi_write_done) begin start <= 1'b0; i <= i + 1'b1;endelse begin data <= {2'b00,8'h14}; start <= 1'b1;end8'd25:if(spi_write_done) begin start <= 1'b0; i <= i + 1'b1;endelse begin data <= {2'b00,8'hA4}; start <= 1'b1;end8'd26:if(spi_write_done) begin start <= 1'b0; i <= i + 1'b1;endelse begin data <= {2'b00,8'hA6}; start <= 1'b1;end8'd27:if(spi_write_done) begin start <= 1'b0; i <= i + 1'b1;endelse begin data <= {2'b00,8'hAF}; start <= 1'b1;end//--------------------------------------------------------------------------------8'd28:begindata <= {2'b11,8'd0}; isdone <= 1'b1; i <= i + 1'b1;end8'd29:beginisdone <= 1'b0; i <= 8'd0;endendcaseendendendassign spi_data = data;assign spi_write_start = start;assign initial_done = isdone;endmodule注释:1、以上初始化数据是针对驱动芯⽚SSD1306,128*64的OLED;2、应该先复位OLED;3、初始化之后应该将⽚选CS置⾼,如8'd28:data <= {2'b11,8'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 为开启显示命令。
stm32oled初始化代码以下是STM32OLED屏幕初始化代码的示例(假设使用I2C通信):```c#include <Wire.h>#include <Adafruit_GFX.h>#include <Adafruit_SSD1306.h>#define OLED_RESET 4#define SCREEN_WIDTH 128#define SCREEN_HEIGHT 64Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);void setup() {Wire.begin();display.begin(SSD1306_SWITCHCAPVCC, 0x3C);display.clearDisplay();display.setTextColor(WHITE);display.setCursor(0,0);display.setTextSize(2);display.println("Hello World!");display.display();}void loop() {// Do nothing in the loop}```该代码使用Adafruit_GFX和Adafruit_SSD1306库来与屏幕通信。
我们将Wire对象传递给Adafruit_SSD1306的构造函数,以在I2C通信中传输数据。
在设置函数中,我们使用begin()函数初始化屏幕,并使用SSD1306_SWITCHCAPVCC来设置其工作电压。
接下来,我们清除屏幕并将光标移动到左上角,在打印“Hello World!”时使用setTextColor()和setTextSize()设置文本属性。
最后,我们使用display()函数来显示整个缓冲区中的内容。
在主循环中,我们没有做任何事情,因为显示内容已经显示,并且不需要刷新或更新。
维信诺25664oled屏应用笔记屏的初始化可以参考<维信诺25664IC_Init.c>,特别注意初始化程序在使用Set Re-map & Dual COM Line Mode (A0h)命令时,后跟(0x14)(0x11)设置对应的是屏正视图放置时左上方为起始行和起始列,半字节倒序。
下图所示为GDDRAM布局图,从图中可知,该屏的行(com)布线是反向的,即以厂家给出的(0x14)设置驱动时从屏正视图看去,行COM0在最上方,SEG3~0在最左方,屏幕以水平地址增量模式写入横向取模,字节正序的汉字字模时,字体相对屏正视图正向显示,且行和列的地址指针也相对正向增加;反之以(0x06)设置时行COM0在屏正视图最下方,SEG3~0在屏正视图最右方,如与(0x14)设置时一样以相同的方式取相同的字模,字体相对屏正视图反向显示,且行和列的地址指针也反向增加。
(以数据线和驱动芯片朝下为正视图方向)从上面这段阐述可以得到一个经验,即如何在datasheet中没有明确表述时确定显示屏行和列的分布方式呢?其实一般从厂商给出的初始化代码中对驱动芯片的设置就能看出来了。
从上图中可知,每个行地址(COM)对应一行,每个列地址(Column address)对应四个像素列(SEG),写入时先用set column address确定起始列和终止列,再用set row address确定起始行和终止行。
由于驱动芯片的分辨率大于屏分辨率,所以从厂商初始代码可知,屏的实际行地址范围和列地址范围分别为(0x00,0x3F)、(0x1C,0x5B),转换为十进制数即分别为(0~63)、(28~91)。
同ssd1305一样,上述两条命令在给出写入地址的同时,也将相应的行指针和列指针调整到给出的起始地址位置。
在写入时,当地址设置好后,就可对相应区域写入数据了,每字节数据的高半和低半四位二进制数分别对应一个像素点,每个像素点可通过此四位二进制数实现十六级灰度,根据上述每个列地址对应四个像素列,每个像素需要四位二进制数来点亮,那么,也就是说,每写入两个字节的数据,列地址指针自动加一。
/***********************OLED128*64_SH1106初始化*****************************/void Initial_OLED12864_SH1106() //OLED初始化{delay_50ms(2); //延时100msWrite_IIC_Command(0xAE); //Display OFF/ON//显示关/开(OLED关闭显示:AEH,OLED开启显示:AFH)Write_IIC_Command(0x02); //Set Column Address 4 lower bits 设置列地址低4位(00H--0FH)(0 0 0 0 A3 A2 A1 A0)Write_IIC_Command(0x10); //Set Column Address 4 higher bits 设置列地址高4位(10H--17H)(0 0 0 1 A7 A6 A5 A4)Write_IIC_Command(0xB0); //Set Page Address//设置页面地址(1页:B0H,2页:B1H,3页:B2H,4页:B3H,5页:B4H,6页:B5H,7页:B6H)Write_IIC_Command(0x40); //Set Display Start Line 设置显示开始行Write_IIC_Command(0xA1); //Set Segment Re-map (ADC) 设置段重新映射(ADC)(正向:A0H, 反向A1H)Write_IIC_Command(0xA7); //Set Normal/ Reverse Display//设置正常/反白显示(正常显示:A6H,反白显示:A7H)Write_IIC_Command(0xA8); //Multiplex Ration Mode Set //多路分配模式设置Write_IIC_Command(0x3F); //Multiplex Ratio Data Set//多路复用率数据设置(1:00H, 2:02H,3:03H,······63:3EH,64:3FH)Write_IIC_Command(0xA4); //Set Entire Display OFF/ON//设置全屏显示关/开(正常显示:A4H,全屏显示:A5H)Write_IIC_Command(0xD3); //Display Offset Mode Set 显示偏移模式设置Write_IIC_Command(0x00); //Display Offset Data Set//显示偏移数据设置(COM0:00H, COM1:02H, COM2:03H, ······COM62:3EH, COM63:3FH)Write_IIC_Command(0xD5); //Divide Ratio/Oscillator Frequency Mode Set 分频比/振荡器频率模式设置Write_IIC_Command(0x50); // Divide Ratio/Oscillator Frequency Data Set//分频比/振荡器频率数据设置(80H:+15%, 50H:0%)//(详细介绍参见:中景园1.3寸OLED显示屏_驱动芯片手册.pdf Command15 驱动芯片:SH1106)Write_IIC_Command(0xAD); //DC-DC Control Mode Set 直流-直流转换器电源控制方式设置(打开)Write_IIC_Command(0x8B); //DC-DC ON/OFF Mode Set//直流-直流转换器电源开/关模式设置(直流-直流转换器电源禁用:8AH,显示时直流-直流转换器电源将会打开:8BH)Write_IIC_Command(0xC8); //Set Common Output Scan Direction//设置公用输出扫描方向(从COM0向COM[N-1]扫描:C0H,从COM[N-1]向COM0扫描:C8H)Write_IIC_Command(0xD9); //Pre-charge Period Mode Set 预充电周期模式设置Write_IIC_Command(0x22); //Dis-charge /Pre-charge Period Data Set//无充电/预充电周期数据设置//(详细介绍参见:中景园1.3寸OLED显示屏_驱动芯片手册.pdf Command16 驱动芯片:SH1106)Write_IIC_Command(0xDA); //Common Pads Hardware Configuration Mode Set 常见的引脚硬件配置模式设置Write_IIC_Command(0x12); //Sequential/Alternative Mode Set//顺序/替代模式设置(顺序:02H,替代:12H)//(详细介绍参见:中景园1.3寸OLED显示屏_驱动芯片手册.pdf Command17 驱动芯片:SH1106)Write_IIC_Command(0x81); //The Contrast Control Mode Set 对比度控制模式设置Write_IIC_Command(0x79); //Contrast Data Register Set//对比数据寄存器设置(ISEG Small:00H, Large:FFH, 不使用此功能:80H)Write_IIC_Command(0xDB); //VCOM Deselect Level Mode Set VCOM取消级别模式设置Write_IIC_Command(0x35); //VCOM Deselect Level Data Set//VCOM取消级数据设置(VCOM=0.430*VREF:00H,VCOM=0.770*VREF:35H,VCOM=1*VREF:40H)//(详细介绍参见:中景园1.3寸OLED显示屏_驱动芯片手册.pdf Command18 驱动芯片:SH1106)Write_IIC_Command(0x32); //Set Pump voltage value//设置泵电压值Vpp(30H:6.4V, 31H:7.4V, 32H:8.0V33H:9.0V)delay_1ms(1); //延时1msWrite_IIC_Command(0xAF); //Display OFF/ON//显示关/开(OLED关闭显示:AEH,OLED开启显示:AFH)delay_50ms(2); //延时100ms}。
OLED屏的驱动与使用文/杜洋【OLED时代来了】一提到OLED,我想无人不知。
智能手机的迅猛发展,使得屏幕显示技术不断推陈出新。
虽然最新报出三星将产量更新颖的QLED屏幕,但在没有上市之前智能手机屏幕从显示原理上仍只有LCD和OLED两种。
在三星和LG两家公司的高端手机上都采用了OLED屏幕,其他手机生产商还是采用传统的LCD屏幕。
其两者最大的区别就是:LCD屏幕是由灯管或LED做背光照明,再通过LCD屏通过或阻断光线达到显示目的。
OLED是有机发光二极管,它和我们常用的LED 是近亲。
OLED不需要背光灯,其上面每一个像素点都能独立发光。
综合来看OLED显示技术功耗更低、效果更有优势。
我曾用过一款手机,采用的是SUPER OLED屏幕,无论从色彩还是可视角度都非常出众。
不过现在仅有几家大公司才能生产OLED屏幕,产量不足,价格昂贵。
OLED屏供应手机市场都不足够,作为一名电子爱好者更不敢奢求有一天能亲手把玩它了。
记得3年前,我在北京工作的时候,就曾在电子市场看到久闻未见的OLED屏幕。
之所以让我一眼就识别出来,是因那柜台里每一块屏幕都只是一片薄薄的玻璃,发着光的文字和图案在上面不停切换,周围没有背光灯,没有电路板,只有一片玻璃。
旁人也许并无感想,但对我这个电子发烧友来说,这种震撼不亚于第一次看到没有“大包”的液晶电视。
站在柜台前看了半天,老板见势走过来。
我指着那片1元硬币大小的屏幕问多少钱,老板一本正经地说:“这款小的便宜,你要多少?”我说只要1个。
他有些不太高兴的说:“一个呀,280元”。
听闻此言,二话没说,转身就跑。
只是一块单色的小屏幕,如果是LCD液晶屏顶多80元,就因为是OLED就多出200元。
可是又忍不住对它的神奇所吸引,好想能早点把玩。
时间是把无情刀,能杀人,也能杀价。
如今的OLED技术已经广泛被使用,产量高了,价格自然就降低了。
从前上百元的OLED屏幕,现在只要几十元。
还有各种尺寸大小、颜色和分辨率。
JLX12864OLED-096X-PC-IIC带字库IC的编程说明书目 录序号 内 容 标 题 页码1 概述 22 字型样张: 33 外形尺寸及接口引脚功能 4~54 工作电路框图 55 指令 6~86 字库的调用方法 9~177 硬件设计及例程: 18~尾页1.概述JLX12864OLED-096X-PC-IIC型OLED显示模块既可以当成普通的图像型液晶显示模块使用(即显示普通图像型的单色图片功能),又含有JLX-GB2312字库IC,可以从字库IC中读出内置的字库的点阵数据写入到LCD驱动IC中,以达到显示汉字的目的。
此字库IC存储内容如下表所述:2.字型样张:3.外形尺寸及接口引脚功能3.1外形图:图1.外形尺寸3.2模块的接口引脚功能引 线 号 符 号 名 称功 能1 ROM_IN 字库IC 接口 SI串行数据输入 详见字库 IC:JLX-GB2312 说明 书: ROM_IN 对应字库 IC 接口 SI, ROM_OUT 对应 SO, ROM_SCK 对应 SCLK, ROM_CS 对应 CS#2 ROM_OUT 字库IC 接口 SO 串行数据输出3 ROM_SCK 字库IC 接口 SCLK 串行时钟输入4 ROM_CS 字库IC 接口 CS# 片选输入5 VSS 接地 0V6 VDD 电源电路 2.7V—5.0V7 SCK I/0 串行时钟 8SDAI/0串行数据表1:模块串行接口引脚功能4.基本原理4.1OLED 屏(LCD)在LCD 上排列着128×64 点阵,128个列信号与驱动IC 相连,64个行信号也与驱动IC 相连,IC 邦定在LCD 玻璃上(这种加工工艺叫COG).电路框图图2.JLX12864OLED-096X-PC-IIC5.指令:5.1 字库IC(JLX-GB2312)指令表Read Data Bytes(一般读取):Read Data Bytes at Higher speed(快速读取):5.2 LCD驱动IC指令表详见“JLX12864OLED-096X-PN-IIC”的中文说明书6.4附录6.4.1 GB2312 1区(376字符)6.4.2 8×16点国标扩展字符7. 硬件设计及例程:7.1用户所编的显示程序,开始必须进行初始化,否则模块无法正常显示,过程请参考程序7.1.1硬件接口:下图为串行方式的硬件接口:7.2程序:// OLED演示程序// OLED模块型号:JLX12864OLED-096X-PC-IIC,IIC接口!// 资料(源程序、驱动手册、使用说明书等)销售统一发#include <reg52.H>//======================================================sbit lcd_scl =P1^1; //接口定义:lcd_sclk就是LCD的SCLK //SCLK接到“D0”脚 sbit lcd_sda =P1^0; //接口定义:lcd_sda就是LCD的SDA //SDIN接到“D1”脚sbit Rom_OUT=P1^4; /*字库IC接口定义:Rom_OUT就是字库IC的SO*/sbit Rom_IN=P1^5; /*字库IC接口定义:Rom_IN就是字库IC的SI*/sbit Rom_SCK=P1^3; /*字库IC接口定义:Rom_SCK就是字库IC的SCK*/sbit Rom_CS=P1^2; /*字库IC接口定义Rom_CS就是字库IC的CS#*/sbit key=P2^0; //定义一个按键:P2.0口与GND之间接一个按键//=======================================================#define uchar unsigned char#define uint unsigned int#define ulong unsigned longuchar code jiong1[]={/*-- 文字: 囧 --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x00,0xFE,0x82,0x42,0xA2,0x9E,0x8A,0x82,0x86,0x8A,0xB2,0x62,0x02,0xFE,0x00,0x00, 0x00,0x7F,0x40,0x40,0x7F,0x40,0x40,0x40,0x40,0x40,0x7F,0x40,0x40,0x7F,0x00,0x00}; uchar code lei1[]={/*-- 文字: 畾 --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x80,0x80,0x80,0xBF,0xA5,0xA5,0xA5,0x3F,0xA5,0xA5,0xA5,0xBF,0x80,0x80,0x80,0x00, 0x7F,0x24,0x24,0x3F,0x24,0x24,0x7F,0x00,0x7F,0x24,0x24,0x3F,0x24,0x24,0x7F,0x00}; //延时void delay(int i){int j,k;for(j=0;j<i;j++)for(k=0;k<110;k++);}//短延时void delay_us(int i){int j,k;for(j=0;j<i;j++)for(k=0;k<1;k++);}//等待按键:P2.0口与GND之间接一个按键void waitkey(){repeat: if(key==1) goto repeat;else delay(3000);}void start_flag(){lcd_scl=1;delay_us(1);lcd_sda=1;delay_us(1);lcd_sda=0;delay_us(1);lcd_scl=0;delay_us(1);}void stop_flag(){lcd_scl=0;delay_us(1);lcd_sda=0;lcd_sda=1;delay_us(1);lcd_scl=1;delay_us(1);}//传8位指令或数据到OLED显示模块 void transfer(uchar data1){unsigned char j;for(j=0;j<8;j++){lcd_scl=0;if(data1&0x80) lcd_sda=1; elselcd_sda=0;lcd_scl=1;lcd_scl=0;data1<<=1;// delay_us(1);}lcd_sda=0;lcd_scl=0;lcd_scl=1;}//写指令到OLED显示模块void transfer_command(uchar com) {start_flag();transfer(0x78);transfer(0x00);transfer(com);stop_flag();}//写数据到OLED显示模块void transfer_data(uchar dat){start_flag();transfer(0x78);transfer(0x40);transfer(dat);stop_flag();}//OLED显示模块初始化void initial_lcd(){transfer_command(0xae); //关显示transfer_command(0xd5); //晶振频率transfer_command(0x80);transfer_command(0xa8); //duty设置transfer_command(0x3f); //duty=1/64transfer_command(0xd3); //显示偏移transfer_command(0x00);transfer_command(0x40); //起始行transfer_command(0x8d); //升压允许transfer_command(0x14);transfer_command(0x20); //page address modetransfer_command(0x02);transfer_command(0xc8); //行扫描顺序:从上到下transfer_command(0xa1); //列扫描顺序:从左到右transfer_command(0xda); //sequential configurationtransfer_command(0x12);transfer_command(0x81); //微调对比度,本指令的0x81不要改动,改下面的值transfer_command(0xcf); //微调对比度的值,可设置范围0x00~0xfftransfer_command(0xd9); //Set Pre-Charge Periodtransfer_command(0xf1);transfer_command(0xdb); //Set VCOMH Deselect Leveltransfer_command(0x40);transfer_command(0xaf); //开显示}void lcd_address(uchar page,uchar column){column=column-1; //我们平常所说的第1列,在LCD驱动IC里是第0列。
单片机oled显示程序设计流程下载温馨提示:该文档是我店铺精心编制而成,希望大家下载以后,能够帮助大家解决实际的问题。
文档下载后可定制随意修改,请根据实际需要进行相应的调整和使用,谢谢!并且,本店铺为大家提供各种各样类型的实用资料,如教育随笔、日记赏析、句子摘抄、古诗大全、经典美文、话题作文、工作总结、词语解析、文案摘录、其他资料等等,如想了解不同资料格式和写法,敬请关注!Download tips: This document is carefully compiled by theeditor. I hope that after you download them,they can help yousolve practical problems. The document can be customized andmodified after downloading,please adjust and use it according toactual needs, thank you!In addition, our shop provides you with various types ofpractical materials,such as educational essays, diaryappreciation,sentence excerpts,ancient poems,classic articles,topic composition,work summary,word parsing,copy excerpts,other materials and so on,want to know different data formats andwriting methods,please pay attention!1. 硬件连接:将 OLED 显示屏与单片机连接。
通常,OLED 显示屏使用 SPI 或 I2C 接口与单片机进行通信。