OLED SSD1303显示驱动 For MSP430
[复制链接]
RiTdisplay公司128*64点阵OLED(RGS101280640W003) SSD1303显示驱动 for MSP430,文中仅列出驱动接口、控制文档和函数声明,详细的源代码请看附件,开发环境IAR C。其中MSP430 MCLK需与SSD1303控制时序匹配,建议不大于8MHz。下面是SSD1303 8080 8080系列接口的控制时序图: /* 128*64点阵OLED(RGS101280640W003)信号引脚与MSP430对应引脚定义
使BS1和BS2为高,即选择MCU接口形式为8080系列接口
OLED引脚 名称 对应MSP430引脚
15 CS# P2.0
17 D/C# P2.1
18 WR# P2.2
19 RD# P2.3
20 D0 P1.0
21 D1 P1.1
22 D2 P1.2
23 D3 P1.3
24 D4 P1.4
25 D5 P1.5
26 D6 P1.6
27 D7 P1.7
SSD1303 Area Color Decoder
_______________________________________________________
Page0 |b1 |b2 |b3 |b4 |b5 |b6 |b7 |b8 |b9 |b10|b11|b12|b13|b14|b15|b16|
|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|
Page1 |b17|b18|b19|b20|b21|b22|b23|b24|b25|b26|b27|b28|b29|b30|b31|b32|
|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|
Page2 | bank0 |
|______________________________________________________|
Page3 | bank0 |
|______________________________________________________|
Page4 | bank0 |
|________________________ ______________________________|
Page5 | bank0 |
|______________________________________________________|
Page6 | bank0 |
|______________________________________________________|
Page7 | bank0 |
|______________________________________________________|
当WriteCommand(0xC8)时,OLED(RGS101280640W003)的行列的正方向如下图1所示,否则默认为图2所示:
__________________
|__________________| <--------黄色
| |
| | <--------蓝色
|__________________|
行的正方向(page0-page7)
--------------->列的正方向(0-127) ^
| |
| |
| |
| |
| |
V --------------->列的正方向(0-127)
行的正方向(page0-page7)
图1 图2
OLED操作指令说明(见SSD1303数据手册P21~):
1、OLED_WR_PORT=0000xxxxb;//设置OLED列地址低4位,POR复位后该字节为0x00
2、OLED_WR_PORT=0001xxxxb;//设置OLED列地址高4位,POR复位后该字节为0x00
3、OLED_WR_PORT=00100110b;//进入水平滚动设置
OLED_WR_PORT=xxxxxA2A1A0b;//设置每步滚动的列数,A[2:0]合法的数值为:001b,010b,011b,100b
OLED_WR_PORT=xxxxxB2B1B0b;//设置起始页地址
OLED_WR_PORT=xxxxxxC1C0b;//以帧周期为单位,设置每步滚动的时间间隔。C[1:0]:00b-12帧,01b-64帧,10b-128帧,11b-256帧
OLED_WR_PORT=xxxxxD2D1D0b;//设置终止页地址,该值须大于或等于起始页地址
4、OLED_WR_PORT=00101111b;//启动水平滚动
5、OLED_WR_PORT=00101110b;//停止水平滚动
6、OLED_WR_PORT=01xxxxxxb;//设置显示开始行,POR后该字节为01000000b
7、OLED_WR_PORT=10000001b;//设置对比度控制寄存器(双字节指令)
OLED_WR_PORT=xxxxxxxxb;//设置对比度,对比度随该值的增大而增强,POR后该字节为10000000b
8、OLED_WR_PORT=10000010b;//设置亮度控制寄存器(双字节指令)
OLED_WR_PORT=xxxxxxxxb;//设置亮度,亮度随该值的增大而增强,POR后该字节为10000000b
9、OLED_WR_PORT=10010001b;//设置Bank0,Color A,Color B,Color C的驱动电流脉宽
OLED_WR_PORT=xxX5X4X3X2X1X0b;//Bank0:X[5:0]=0~63;对应脉宽为1~64个时钟周期,该值POR后为110001b
OLED_WR_PORT=xxA5A4A3A2A1A0b;//Color A:A[5:0]=0~63;对应脉宽为1~64个时钟周期,该值POR后为111111b
OLED_WR_PORT=xxB5B4B3B2B1B0b;//Color B:B[5:0]=0~63;对应脉宽为1~64个时钟周期,该值POR后为111111b
OLED_WR_PORT=xxC5C4C3C2C1C0b;//Color C:C[5:0]=0~63;对应脉宽为1~64个时钟周期,该值POR后为111111b
注:Color D的脉宽固定为64个时钟周期
10、OLED_WR_PORT=10010010b;//设置Bank1~Bank16(Page0)的颜色
OLED_WR_PORT=A7A6A5A4A3A2A1A0b;//A[1:0]值为00,01,10,11时,Bank1的颜色分别为A,B,C,D
OLED_WR_PORT=B7B6B5B4B3B2B1B0b;//A[3:2]值为00,01,10,11时,Bank2的颜色分别为A,B,C,D
OLED_WR_PORT=C7C6C5C4C3C2C1C0b;//.........................................
OLED_WR_PORT=D7D6D5D4D3D2D1D0b;//D[7:6]值为00,01,10,11时,Bank16的颜色分别为A,B,C,D
11、OLED_WR_PORT=10010011b;//设置Bank17~Bank32(Page1)的颜色
OLED_WR_PORT=A7A6A5A4A3A2A1A0b;//A[1:0]值为00,01,10,11时,Bank17的颜色分别为A,B,C,D
OLED_WR_PORT=B7B6B5B4B3B2B1B0b;//A[3:2]值为00,01,10,11时,Bank18的颜色分别为A,B,C,D
OLED_WR_PORT=C7C6C5C4C3C2C1C0b;//.........................................
OLED_WR_PORT=D7D6D5D4D3D2D1D0b;//D[7:6]值为00,01,10,11时,Bank32的颜色分别为A,B,C,D
12、OLED_WR_PORT=1010000X0b;//X0=0:0列地址映射SEG0(POR后也为该值),X0=1:131列地址映射SEG0
13、OLED_WR_PORT=1010010X0b;//设置完整显示开/关。X0=0:正常显示(POR后也为该值),X0=1:完整显示开
14、OLED_WR_PORT=1010011X0b;//设置正常/反相显示。X0=0:正常显示(POR后也为该值),X0=1:反相显示
15、OLED_WR_PORT=10101000b;//设置Multiplex Ratio
OLED_WR_PORT=xxA5A4A3A2A1A0b;//A[5:0]决定Multiplex Ratio,16MUX~64MUX,POR后为64MUX
16、OLED_WR_PORT=10101101b;//设置DC-DC开/关
OLED_WR_PORT=1000101X0b;//X0=1,当显示开时DC-DC开(POR后为该值)。X0=0,DC-DC禁止
17、OLED_WR_PORT=1010111X0b;//设置显示开/关。X0=0:关OLED显示(POR后为该值),X0=1:开OLED显示
18、OLED_WR_PORT=1011X3X2X1X0b;//设置页地址。设置用于读写操作的GDDRAM页地址。
19、 OLED_WR_PORT=1100X3xxxb;//设置COM输出扫描方向。X3=0(POR后为该值),正常模式扫描(从COM0->COM[N- 1]扫描)。X3=1,重映射模式,扫描方向为COM[N-1]->COM0,N为Multiplex Ratio
20、OLED_WR_PORT=11010011b;//设置显示偏移
OLED_WR_PORT=xxA5A4A3A2A1A0b;//垂直偏移0-63,POR后被复位为00H
21、OLED_WR_PORT=11010101b;//设置显示时钟分频率/晶振频率
OLED_WR_PORT=A7A6A5A4A3A2A1A0b;//A[3:0]:定义显示时钟分频率,值为A[3:0]+1,POR后A[3:0]为0000b,分频率为1。A[7:4]设置晶振频率,POR后为0111b
22、OLED_WR_PORT=11010101b;//设置颜色模式开关和低功耗显示模式
OLED_WR_PORT=00X5X40X20X0b;//X5X4=00(POR):单色模式。X5X4=11区域颜色使能,X2=0,X0=0正常功耗模式(POR),X2=1,X0=1低功耗模式
23、OLED_WR_PORT=11011001b;//设置预充周期,A[3:0]设置阶段1周期,最大为15个dclk(POR后为02h,0值为无效值)。A[7:4]设置阶段2周期,最大为15个dclk(POR后为02h,0值为无效值)
24、OLED_WR_PORT=11011010b;//设置COM引脚配置
OLED_WR_PORT=000X40010b;//X4=0,顺序COM引脚配置 (如:COM31,30,29...0;SEG0-132;COM31,32...62,63)。X4=1(POR),可选COM引脚配置 (如:COM62,60,58...2,0;SEG0-132;COM1,3,5...61,63)。
25、OLED_WR_PORT=11011011b;//设置VCOM Deselect level
OLED_WR_PORT=xA6A5A4A3A2A1A0b;
*/
#define uint unsigned int
#define uchar unsigned char
#define OLED_CTRL_PORT P2OUT//OLED控制端口定义
#define OLED_BUS_PORT_DIR P1DIR//OLED数据总线端口方向定义
#define OLED_WR_PORT P1OUT//OLED写端口定义
#define OLED_RD_PORT P1IN//OLED读端口定义
#define OLED_WR_DIR 0xFF//OLED数据总线为写方向
#define OLED_RD_DIR 0x00//OLED数据总线为读方向
#define OLED_CS (P2OUT&0xFE)//OLED有效片选操作定义
#define OLED_NOR_CS (P2OUT|0x01)//OLED取消片选操作定义
#define OLED_DATA_SEL (P2OUT|0x02)//OLED数据操作定义
#define OLED_COMMAND_SEL (P2OUT&0xFD)//OLED指令操作定义
#define OLED_WR (P2OUT&0xFB)//OLED写操作定义
#define OLED_NOR_WR (P2OUT|0x04)//OLED取消写操作定义
#define OLED_RD (P2OUT&0xF7)//OLED读操作定义
#define OLED_NOR_RD (P2OUT|0x08)//OLED取消读操作定义
#define OLED_CtrlBusInit (P2OUT|0x0F)//OLED控制信号初始化
/*
程序指令说明:
OLED_CTRL_PORT=OLED_RD;//OLED读操作
OLED_CTRL_PORT=OLED_NOR_RD;//OLED禁止读操作
OLED_CTRL_PORT=OLED_COMMAND_SEL;//OLED指令选通操作
OLED_CTRL_PORT=OLED_DATA_SEL;//OLED数据选通操作
OLED_CTRL_PORT=OLED_WR;//OLED写操作
OLED_CTRL_PORT=OLED_NOR_WR;//OLED禁止写操作
OLED_CTRL_PORT=OLED_CS;//OLED片选操作
OLED_CTRL_PORT=OLED_NOR_CS;//OLED禁止片选操作
OLED_WR_PORT=xxxxxxxxb;//写指令或数据
A=OLED_RD_PORT;//读指令或数据
OLED_CTRL_PORT=OLED_CtrlBusInit;//OLED控制信号初始化
*/
/****************************************************************************************
*NAME: void CtrlBusInit(void)
*FUNCTION: OLED控制信号初始化函数
*Parameter: 无参数
*RETURN: 无返回值
*****************************************************************************************/
函数声明:void CtrlBusInit(void);
/****************************************************************************************
*NAME: void WriteCommand(uchar Command)
*FUNCTION: OLED写指令函数
*Parameter: Command参数,uchar型,8位指令码;
*RETURN: 无返回值
*****************************************************************************************/
函数声明:void WriteCommand(uchar Command);
/**************************************************************************************** *NAME: void WriteData(uchar Data)
*FUNCTION: OLED写数据函数
*Parameter: Data参数,uchar型,8位数据码;
*RETURN: 无返回值
*****************************************************************************************/
函数声明:void WriteData(uchar Data);
/****************************************************************************************
*NAME: uchar ReadStatus(void)
*FUNCTION: OLED读状态函数
*Parameter: 无参数
*RETURN: 返回状态值,uchar型。D6 : “1” for display OFF / “0” for display ON(SSD1303数据手册P24)
*****************************************************************************************/
函数声明:uchar ReadStatus(void);
/**************************************************************************************** *NAME: uchar ReadData(void)
*FUNCTION: OLED读数据函数
*Parameter: 无参数
*RETURN: 返回状态值,uchar型。
*****************************************************************************************/
函数声明:uchar ReadData(void);
/**************************************************************************************** *NAME: void OLEDinit(void)
*FUNCTION: OLED初始化函数
*Parameter: 无参数
*RETURN: 无返回值
*****************************************************************************************/
函数声明:void OLEDinit(void);
/**************************************************************************************** *NAME: void OLEDDisplayClear(void)
*FUNCTION: OLED显示清屏函数
*Parameter: 无参数
*RETURN: 无返回值
*****************************************************************************************/
函数声明:void OLEDDisplayClear(void);
/**************************************************************************************** *NAME: void OLEDDisplay(uchar x0,uchar y0,uchar x1,uchar y1,uchar const *data_adr,uchar Inverse,uchar Overlap)
*FUNCTION: OLED显示函数。x以位为单位,共64个位,y以位为单位,共128位,以(0,0)为坐标原点,竖直向下为x轴正方向,水平向右为y轴正方向
*Parameter: x0参数:显示矩形区域左上角点x坐标;y0参数:显示矩形区域左上角点y坐标;
* x1参数:显示矩形区域右下角点x坐标;y1参数:显示矩形区域右下角点y坐标;
* data_adr:显示对象源地址;Inverse:显示反向控制字,0为正常显示,非0为反相显示;
* Overlap:显示重叠控制字,0为覆盖显示,非0为重叠显示;
*RETURN: 无返回值
*****************************************************************************************/ 函数声明:void OLEDDisplay(uchar x0,uchar y0,uchar x1,uchar y1,uchar const *data_adr,uchar Inverse,uchar Overlap); 字模可采用字模软件生成,格式为:单色点阵,纵向取模,字节倒序。
|