oled初始化程序
FPGA驱动OLED动态显示(Verilog代码)——OLED初始化

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};。
OLED模块使用说明

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 为开启显示命令。
2.42寸OLED显示屏1309驱动编程指南 程序 说明书

2015-02-26
0.2xVDD V 0.3 mA
图 4. 从 CPU 写到 SSD1306(Writing Data from CPU to SSD1306)
6.2 串行接口:时序要求(AC 参数):
写数据到 SSD1306 的时序要求:
表 4.
项目
符号
测试条件
极限值
单位
MIN
TYPE MAX
4线 SPI串口时钟周期
●128*64 点阵单色图片; ●可选用 16*16 点阵或其他点阵的图片来自编汉字,按照 16*16 点阵汉字来计算可显示 8 字/行*4 行。按照 12*12 点阵汉字来计算可显示 10 字/行*4 行。 2.5 指令功能强:可组合成各种输入、显示、移位方式以满足不同的要求; 2.6 接口方式: 3 线 SPI 串行接口、4 线 SPI 串行接口、并口、I2C 接口。 2.7 工作温度宽:-20℃ - 70℃; 2.8 储存温度宽:-30℃-80℃; 2.9 底色可选:蓝色、白色、黄色、绿色。
11
000001 6 位电压值数据,0~63 共 64 级
101110 1
100011
设置内部电阻微调,可以理解为微调对比度 值,此两个指令需紧接着使用。上面一条指 令 0x81 是不改的,下面一条指令可设置范 围为:0x00~0xFF,数值越大对比度越浓, 越小越淡 静态图标的开关设置: 0xAE: 关, 0xAF: 开。 此指令在进入及退出睡眠模式时起作用 省电模式,此非一条指令,是由“(10)显示 全部点阵”、 (19)静态图标显示:开/关等 指令合成一个“省电功能”。详细看 IC 规 格书 “POWER SAVE”部分 空操作
Tscyc
引脚:SCK
stm32oled初始化代码

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屏应用笔记

维信诺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一样,上述两条命令在给出写入地址的同时,也将相应的行指针和列指针调整到给出的起始地址位置。
在写入时,当地址设置好后,就可对相应区域写入数据了,每字节数据的高半和低半四位二进制数分别对应一个像素点,每个像素点可通过此四位二进制数实现十六级灰度,根据上述每个列地址对应四个像素列,每个像素需要四位二进制数来点亮,那么,也就是说,每写入两个字节的数据,列地址指针自动加一。
OLED显示屏 SH1106的初始化数据

/***********************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时代来了】一提到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屏幕,现在只要几十元。
还有各种尺寸大小、颜色和分辨率。
液晶初始化程序

/*******************************************
函数名称:write_cmd
功能:向液晶中写控制命令
参数:cmd--控制命令
返回值:无
********************************************/
void write_cmd(uchar cmd)
void Clear_GDRAM(void)
{
uchar i,j,k;
write_cmd(0x34); //打开扩展指令集,关闭绘图显示
i = 0x80;
for(j = 0;j < 32;j++)
{
write_cmd(i++); //写入垂直坐标Y,垂直坐标共有32个(0—31);
write_cmd(0x80); //写入水平坐标X,水平坐标共有8个(0-7),每次只能写一半,所以要循环16次。
LCD_EN=0;
}
/*******************************************
函数名称:write_data
功能:向液晶中写显示数据
参数:dat--显示数据
返回值:无
********************************************/
void write_data(uchar dat)
应用程序初始化失败无法初始化应用程序应用程序正常初始化lcd初始化程序应用程序初始化安装程序无法初始化程序初始化失败cf应用程序初始化运用程序初始化失败lcd1602初始化程序
#include<reg52.h>
#define uchar unsigned char
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
// 0xA6 (0x00) => Normal Display
// 0xA7 (0x01) => Inverse Display On
}
void Set_Multiplex_Ratio(unsigned char d)
{
Write_Command(0xA8); // Set Multiplex Ratio
{
Write_Command(0x20); // Set Memory Addressing Mode
Write_Command(d); // Default => 0x02
// 0x00 => Horizontal Addressing Mode
// 0x01 => Vertical Addressing Mode
// D[3:0] => Display Clock Divider
// D[7:4] => Oscillator Frequency
}
void Set_Area_Color(unsigned char d)
{
Write_Command(0xD8); // Set Area Color Mode On/Off & Low Power Display Mode
// 0xC8 (0x08) => Scan from COM63 to 0
}
void Set_Display_Offset(unsigned char d)
{
Write_Command(0xD3); // Set Display Offset
Write_Command(d); // Default => 0x00
Write_Command(0xAC); // Set Display On in Dim Mode
}
void Set_Master_Config(unsigned char d)
{
Write_Command(0xAD); // Set Master Configuration
Write_Command(0x8E|d); // Default => 0x8E
// 0xA1 (0x01) => Column Address 0 Mapped to SEG131
}
void Set_Entire_Display(unsigned char d)
{
Write_Command(0xA4|d); // Set Entire Display On / Off
// Default => 0xA4
}
void Set_Read_Modify_Write(unsigned char d)
// 0x02 => Page Addressing Mode
}
void Set_Column_Address(unsigned char a, uns0x21); // Set Column Address
Write_Command(a); // Default => 0x00 (Column Start Address)
Write_Command(0X00); // => (Dummy Write for First Parameter)
Write_Command(a); // Default => 0x80 (Contrast Control for Bank 0)
Write_Command(b); // Default => 0x80 (Brightness for Area Color Banks)
}
void Set_Display_Clock(unsigned char d)
{
Write_Command(0xD5); // Set Display Clock Divide Ratio / Oscillator Frequency
Write_Command(d); // Default => 0x70
// 0xA4 (0x00) => Normal Display
// 0xA5 (0x01) => Entire Display On
}
void Set_Inverse_Display(unsigned char d)
{
Write_Command(0xA6|d); // Set Inverse Display On/Off
// Disable COM Left/Right Re-Map
}
void Set_VCOMH(unsigned char d)
{
Write_Command(0xDB); // Set VCOMH Deselect Level
Write_Command(d); // Default => 0x34 (0.77*VCC)
// Patterns
//=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
void Write_Command(unsigned char Command) //OLED_IP WRITE COMMAND
Write_Command(0x40|d); // Set Display Start Line
// Default => 0x40 (0x00)
}
void Set_Contrast_Control(unsigned char d)
{
Write_Command(0x81); // Set Contrast Control for Bank 0
}
void Set_Common_Config(unsigned char d)
{
Write_Command(0xDA); // Set COM Pins Hardware Configuration
Write_Command(0x02|d); // Default => 0x12 (0x10)
// Alternative COM Pin Configuration
Write_Command(d); // Default => 0x3F (1/64 Duty)
}
void Set_Dim_Mode(unsigned char a, unsigned char b)
{
Write_Command(0xAB); // Set Dim Mode Configuration
{
IOWR(OLED_BASE,0,Command);
}
void Write_Data(unsigned char data) //OLED_IP WRITE DATA
{
IOWR(OLED_BASE,1, data);
}
void uDelay(unsigned char l)
{
while(l--)
usleep(1);
}
void Set_Segment_Remap(unsigned char d)
{
Write_Command(0xA0|d); // Set Segment Re-Map
// Default => 0xA0
// 0xA0 (0x00) => Column Address 0 Mapped to SEG0
Write_Command(d); // Default => 0x00 (Monochrome Mode & Normal Power Display Mode)
}
void Set_Precharge_Period(unsigned char d)
{
Write_Command(0xD9); // Set Pre-Charge Period
// Default => 0xB0 (0x00)
}
void Set_Common_Remap(unsigned char d)
{
Write_Command(0xC0|d); // Set COM Output Scan Direction
// Default => 0xC0
// 0xC0 (0x00) => Scan from COM0 to 63
// Default => 0x00
Write_Command(0x10+d/16); // Set Higher Column Start Address for Page Addressing Mode
// Default => 0x10
}
void Set_Addressing_Mode(unsigned char d)
// 0x8E (0x00) => Select External VCC Supply
// 0x8F (0x01) => Select Internal DC/DC Voltage Converter
}
void Set_Display_On_Off(unsigned char d)
{
Write_Command(0xAE|d); // Set Display On/Off
// Instruction Setting
//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
void Set_Start_Column(unsigned char d)
{
Write_Command(0x00+d%16); // Set Lower Column Start Address for Page Addressing Mode