×
嵌入式 > 嵌入式开发 > 详情

SSD1963示例程序

发布时间:2020-08-26 发布时间:
|
本程序是C8051f360 + ssd1963驱动4.3寸彩屏的初始化程序.,用的是16位数据输入 ,图片显示是565RGB格式显示.

/*

、****************************************************************************************

* 数据类型

*

****************************************************************************************

*/

typedef unsigned char uchar; /* Unsigned 8 bit quantity */

typedef signed char schar; /* Signed 8 bit quantity */

typedef unsigned int uint; /* Unsigned 16 bit quantity */

typedef signed int sint; /* Signed 16 bit quantity */

//===============================

//Data type

//===============================

typedef union {

unsigned char UByte[2];

unsigned int UInt;

} UWORD;

void SSD1963Data_16(uchar sdataH,uchar sdataL);

void SSD1963Data1_16(uint dat);

void SSD1963Command_16(uint cmd);

void SetPixel(uint Col,uint Page,uint color); //显示一个相素点

uint GetPixel(uint Col,uint Page);//得到一个像素点

/******************************************************

SSD1963的Conf脚,用来控制读写的方式,

如果为0 则为6800总线MODE

如果位1 ,则为8080总线。

下面的定义是8080 MODE(默认情况下为8080),可以通过修改Conf 跳点来修改读写方式。

******************************************************/

void SSD1963Command_8(uchar cmd);

void SSD1963Data_8(uchar sdata);

void SSD1963Init();

uchar GetSSD1963Data_8();

uint GetSSD1963Data_16();

void ReadSSD1963Set();

#define SetSSD1963RD() SetBit(P4,4)

#define SetSSD1963WR() SetBit(P4,5)

#define SetSSD1963CS() SetBit(P4,2)

#define SetSSD1963DC() SetBit(P4,3)

#define SetSSD1963Reset() SetBit(P4,1)

#define SetSSD1963Wait() SetBit(p4,0)

#define ClrSSD1963RD() ClrBit(P4,4)

#define ClrSSD1963WR() ClrBit(P4,5)

#define ClrSSD1963CS() ClrBit(P4,2)

#define ClrSSD1963DC() ClrBit(P4,3)

#define ClrSSD1963Reset() ClrBit(P4,1)

#define ClrSSD1963Wait() ClrBit(p4,0)

#define DataPortL P1

#define DataPortH P2

//UWORD 是一个结构体

//注意在给1963写命令时,只能用数据线的低8位来传输数据。

void SSD1963Command_16(uint cmd)

{

UWORD temp;

temp.UInt=cmd;

ClrSSD1963DC();

SetSSD1963RD();

ClrSSD1963CS();

ClrSSD1963WR();

DataPortL=temp.UByte[1];

DataPortH=temp.UByte[0];

SetSSD1963WR();

SetSSD1963CS();

}

void SSD1963Data1_16(uint dat)

{

UWORD temp;

temp.UInt=dat;

SetSSD1963DC();

SetSSD1963RD();

ClrSSD1963CS();

ClrSSD1963WR();

DataPortL=temp.UByte[1];

DataPortH=temp.UByte[0];

SetSSD1963WR();

SetSSD1963CS();

}

void SSD1963Data_16(uchar sdataH,uchar sdataL)

{

SetSSD1963DC();

SetSSD1963RD();

ClrSSD1963CS();

ClrSSD1963WR();

DataPortL=sdataL;//temp.UByte[1];

DataPortH=sdataH;//temp.UByte[0];

SetSSD1963WR();

SetSSD1963CS();

}

void SSD1963Command_8(uchar cmd)

{

ClrSSD1963DC();

SetSSD1963RD();

ClrSSD1963CS();

ClrSSD1963WR();

DataPortL=cmd;

DataPortH=0X00;

SetSSD1963WR();

SetSSD1963CS();

}

void SSD1963Data_8(uchar sdata)

{

SetSSD1963DC();

SetSSD1963RD();

ClrSSD1963CS();

ClrSSD1963WR();

DataPortL=sdata;

DataPortH=0X00;

SetSSD1963WR();

SetSSD1963CS();

}

/*void SSD1963Data_16(uchar sdataL,uchar sdataH)

{

SetSSD1963DC();

SetSSD1963RD();

ClrSSD1963WR();

ClrSSD1963CS();

DataPortL=sdataL;

DataPortH=sdataH;

nop();nop();nop(); nop();nop();nop();

SetSSD1963WR();

SetSSD1963CS();

}*/

uchar GetSSD1963Data_8()

{

uchar sdata;

ClrSSD1963RD();

SetSSD1963WR();

SetSSD1963DC();

ClrSSD1963CS();

sdata=DataPortL;

nop();nop();nop();nop();nop();nop();

SetSSD1963RD();

SetSSD1963CS();

return sdata;

}

uint GetSSD1963Data_16()

{

uint sdata;

unsigned char SFRPAGE_save = SFRPAGE; // Save the current SFRPAGE

SFRPAGE = CONFIG_PAGE; //设置输入输出

P1MDOUT=0x00; ///输出设置为 高阻

P2MDOUT=0x00;

SFRPAGE = SFRPAGE_save; // Restore the SFRPAGE

P1=0xff;

P2=0xff;

ClrSSD1963RD();

SetSSD1963WR();

SetSSD1963DC();

ClrSSD1963CS();

nop();

nop();

sdata=DataPortH;

sdata=sdata<<8;

sdata|=DataPortL;

SetSSD1963RD();

SetSSD1963CS();

SFRPAGE = CONFIG_PAGE;

P1MDOUT=0xff;//设置为 上拉 输出 。

P2MDOUT=0xff;

SFRPAGE = SFRPAGE_save; // Restore the SFRPAGE

return sdata;

}

uint GetPixel(uint Col,uint Page)

{

uint temp;

uint color;

SSD1963Command_8(0x2a); //设置行开始和结束的位置

SSD1963Data_8(Col/256);

SSD1963Data_8(Col%256);

temp=Col;

SSD1963Data_8(temp/256);

SSD1963Data_8(temp%256);

SSD1963Command_8(0x2b);

SSD1963Data_8(Page/256);

SSD1963Data_8(Page%256);

temp=Page;

SSD1963Data_8(temp/256);

SSD1963Data_8(temp%256);

SSD1963Command_8(0x2E);

color=GetSSD1963Data_16();

return color;

}

void SetPixel(uint Col,uint Page,uint color)

{

uint temp;

SSD1963Command_8(0x2a); //设置行开始和结束的位置

temp=Col;

SSD1963Data_8(temp/256);

SSD1963Data_8(temp%256);

temp=Col;

SSD1963Data_8(temp/256);

SSD1963Data_8(temp%256);

SSD1963Command_8(0x2b);

temp=Page;

SSD1963Data_8(temp/256);

SSD1963Data_8(temp%256);

temp=Page;

SSD1963Data_8(temp/256);

SSD1963Data_8(temp%256);

SSD1963Command_8(0x2c);

// for(i=0;i<9;i++)

// {

SSD1963Data1_16(color);

// }

}

//初始化程序

void SSD1963Init()

{

//software reset

SSD1963Command_8(0x01);

Delay_Ms(400);

SSD1963Command_8(0x01);

Delay_Ms(400);

//enable pll

SSD1963Command_8(0xe0);

Delay_Ms(400);

SSD1963Data_8(0x01);

Delay_Ms(400);

SSD1963Command_8(0xe0);

Delay_Ms(400);

SSD1963Data_8(0x03);

Delay_Ms(400);

//pll: n= 34 m= 3

SSD1963Command_8(0xe2);

SSD1963Data_8(0x14);

SSD1963Data_8(0x03);

SSD1963Data_8(0x54);

//dotclk setting

SSD1963Command_8(0xe6);

SSD1963Data_8(0x03);

SSD1963Data_8(0xa0);

SSD1963Data_8(0x00);

//panel setting

SSD1963Command_8(0xb0);

Delay_Us(100);

SSD1963Data_8(0x38);

SSD1963Data_8(0x20);

SSD1963Data_8(0x01);

SSD1963Data_8(0xdf);

SSD1963Data_8(0x01);

SSD1963Data_8(0x0f);

SSD1963Data_8(0x00);

//pixel format

SSD1963Command_8(0x3a);

SSD1963Data_8(0x50);

//hsync setting

SSD1963Command_8(0xb4);

SSD1963Data_8(0x02);

SSD1963Data_8(0x0D);

SSD1963Data_8(0x00);

SSD1963Data_8(0x25);

SSD1963Data_8(0x02);

SSD1963Data_8(0x00);

SSD1963Data_8(0x00);

SSD1963Data_8(0x00);

//vsync setting

SSD1963Command_8(0xb6);

SSD1963Data_8(0x01);

SSD1963Data_8(0x1E);

SSD1963Data_8(0x00);

SSD1963Data_8(0x08);

SSD1963Data_8(0x01);

SSD1963Data_8(0x00);

SSD1963Data_8(0x00);

//col start_end

SSD1963Command_8(0x2a);

SSD1963Data_8(0x00);

SSD1963Data_8(0x00);

SSD1963Data_8(0x01);

SSD1963Data_8(0xdf);//480

//row start_end

SSD1963Command_8(0x2b);

SSD1963Data_8(0x00);

SSD1963Data_8(0x00);

SSD1963Data_8(0x01);

SSD1963Data_8(0x0f);//272

SSD1963Command_8(0x36);

SSD1963Data_8(0x00);

//MCU IF setting

//SSD1963Command_8(13);

SSD1963Command_8(0xf0);

SSD1963Data_8(0x03); //02

//SSD1963Command_8(0x35);

//display on

SSD1963Command_8(0x29);

SSD1963Command_8(0xbe);//设置PWM

SSD1963Data_8(0X0E);

SSD1963Data_8(0XFF);

SSD1963Data_8(0X09);

SSD1963Data_8(0XFF);

SSD1963Data_8(0X00);

SSD1963Data_8(0X00);

SSD1963Command_8(0xD4);//(Define the threshold value)

SSD1963Data_8(0X00);

SSD1963Data_8(0X09);

SSD1963Data_8(0X90);

SSD1963Data_8(0X00);

SSD1963Data_8(0X17);

SSD1963Data_8(0XE8);

SSD1963Data_8(0X00);

SSD1963Data_8(0X39);

SSD1963Data_8(0X60);

SSD1963Command_8(0xd0);

SSD1963Data_8(0x0d);

// ReadSSD1963Set();

}



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
PIC 如何设置更省电