点带驱动芯片OLED 屏 例程

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

以430为例:

1.系统初始化,必不可少。主要功能:确定时钟

void sysinit()

{

unsigned char i;

WDTCTL=WDTPW+WDTHOLD; //关看门狗,视情况而定,如果不关,去

//掉WDTHOLD

BCSCTL1 &= ~XT2OFF; //配置时钟ACLK XT2 = HF XTA/*L

do //wait for XT2 stable

{

IFG1 &= ~OFIFG;

for (i = 0xFF; i > 0; i--);

}

while ((IFG1 & OFIFG) != 0);

BCSCTL2 |= SELM1+SELS; //配置时钟MCLK = SCLK = XT2 (safe);

}

430中

BCSCTL2置MCLK(主时钟) SMCLK(子系统时钟),并进行分频

BCSCTL1设置ACLK(辅助时钟)及其分频

2.I/O初始化

设置各I/O口的方向和初始值,根据你用到的I/O口而定,主要包括色度信号,驱动芯片控制信号,供电信号。

可能用到寄存器:

PnDIR--------I/O口方向,1为输出,0为输入

PnIN ---------输入值

PnOUT-------输出值

PnIE----------终端允许eg: P1IE | = 0x80;

PnIES--------中断边沿选择

PnIFG--------中断标志位

3.设置写命令、写数据函数,此处为驱动液晶屏,写数据作准备。

一般驱动芯片都会有一个命令和数据控制引脚,通过高低电平的变换,实现液晶屏的正确显示。选择芯片,给写信号,通过事先确定的I/O口传送数据。结束后,将各控制引脚复位。

4.液晶IC初始化

为液晶屏供电后,先解锁液晶驱动IC,对驱动芯片复位,关显示(详细查看驱动芯片资料);设置多少位彩色模式;显示起始行及显示偏移量的设置;设定桢频率(晶振分频),显示频率;设置亮度及对比度;根据驱动具体芯片和液晶屏而定。

此处差别较大,故不举例;

先是前最好进行一次清屏操作;

液晶显示一般初始化过程

(1)执行功能设置(Function set)

(2)执行显示控制(Display control)

(3)执行回原点(Return home)

(4)执行清除显示(Clear display)

(5)设置DDRAM地址或CGRAM地址

(6)写数据到DDRAM和CGRAM

5.此时便可显示你所需要的信息(液晶驱动芯片SSD1351UR1)

显示时,首先要确定显示范围,发送写命令;

void wr_address(unsigned int xstart,unsigned int xend,unsigned int ystart,unsigned int yend) {

comm_out(0x0015);

data_out(xstart); //Column start address

data_out(xend); //Column end address

comm_out(0x0075);

data_out(ystart); //row start address

data_out(yend); //rou end address

}

使用时,根据液晶屏的分辨率而定,不可大于分辨率值

特别注意,发数据或命令时,首先要确定驱动IC读有效

comm_out(0x005c); //为写RAM命令,此后只需不断向RAM写数据即可,6.几个函数举例

此款液晶屏分辨率为128*96,行值范围0~95,列值范围0~127

(1)显示一条水平直线

wr_address(0,127,50,50); //在显示屏中间显示一条水平直线

comm_out(0x005c); //写RAM命令

for(int i =0 ; i<128 ; i++ )

{

data_out( 0x001f); //显示一条蓝色线

}

选择的是16位真彩色,RGB所占位数为5:6:5;16位数据依次分布;

即红色为:1111 1000 0000 0000B= 0Xf800;

绿色为:0000 0111 1110 0000B = 0x07e0;

蓝色为:0000 0000 0001 1111B = 0x001f;

线条宽度可通过改变y的起始或终止坐标实现;

(2)显示垂直直线

wr_address(50, 50, 0, 95); //在显示屏中间显示一条垂直直线

comm_out(0x005c);

for(int i =0 ; i<96 ; i++ )

{

data_out( 0x001f); //显示一条蓝色线

同样,线条宽度可通过改变x的起始或终止坐标实现;

(3) 显示英文字母

可通过其ASCII码与其在数组中位置的对应关系,来显示一系列字符组合

通过字符取模工具,选择字符的分辨率

显示SETTINGS菜单,分辨率为6*12

void disp_setting( unsigned int fcolor , unsigned int bcolor)

{

for(int i=0;i<8;i++) //菜单行

{

for(int j=0;j<22;j++) //菜单列

{

unsigned int data=menu[i][j]; //需要显示的字符,

wr_address(1+j*6,6+j*6,84-i*12,95-i*12); //6*12

comm_out(0x005c);

for(unsigned int row=12; row>0 ; row-- ) //12行

{

unsigned int temp = 0x80;

unsigned int tempd = ascii[data-0x20][row]; //根据ASCII码与表中位置的关//系确定要显示的字符,此程序中,字符位置与ASCII码差0x20 for(unsigned int col = 0; col < 6; col++ ) //6列

{

if(temp&tempd) //移位比较,为一的位显示前景色

{

data_out(fcolor);

}

Else //为0的位显示后景色

{

data_out(bcolor);

}

temp=temp>>1; //循环右移

}

}

}

}

}

显示小图片,通过Image2Lcd获得图像数据,确定显示区域,输出显示

假设图片分辨率微30*40:

wr_address( 21 , 50 , 11 , 50);

comm._out(0x005C);

for(int i =0; i<1200 ; i++) //此处根据获得的图片数据形式而定

{

data_out( photo[i] );

相关文档
最新文档