/*************************************************
FUNCTION : Program of Samsung PM16FF004A(1.7inch 128x160 262K)
OLED Driver with LD50C6128 and LD50R6128
AUTHOR : Ouyang Liren
DATE : 2005.06.27
**************************************************/
#include <reg52.h>
#include <intrins.h>
#include <160_128RGB.h>
//#include <160_128BGR.h>
//#include <Picture11.h>
//#include <Picture27.h>
//#include <PictureTCL.h>
//#include <Picture29.h>
sbit CSB = P3^5; //cs
sbit A0 = P3^0; //RSTB
sbit WRB = P3^1; //wr
sbit RDB = P3^4; //rd
sbit RSTB = P3^6; //reset
sbit TR=P3^7; //T/R
unsigned char Br=5,Bg=5,Bb=5;
void delay(void)
{
unsigned int i,j,k;
for(i=0;i<255;i++)
for(j=0;j<255;j++);
}
void DelayMs(unsigned int number)
{
unsigned char temp;
for(;number!=0;number--)
{
for(temp=112;temp!=0;temp--){}
}
}
/*void delaynop(void)
{
unsigned char i,j;
for(i = 0; i < 10; i++)
j = i;
}*/
//write OLED
void WriteInstruction(unsigned char oleddata,bit dir)
{
A0= dir;
CSB = 0;
WRB = 0;
P1 = oleddata;
_nop_();
WRB = 1;
CSB = 1;
}
//initial OLED
void InitOLED(void)
{
//power
WriteInstruction(0x01, 0);//reset
DelayMs(2000);
WriteInstruction(0x02, 0);
WriteInstruction(0x00, 1);
WriteInstruction(0x03, 0);
WriteInstruction(0x01, 1);
WriteInstruction(0x0b, 0);
WriteInstruction(0x01, 1);
//WriteInstruction(0x16, 0);
//WriteInstruction(0x0a, 1);
//WriteInstruction(0x17, 0);
//WriteInstruction(0x0a, 1);
//WriteInstruction(0x18, 0);
//WriteInstruction(0x0a, 1);
WriteInstruction(0x19, 0);
//WriteInstruction(0x06, 1);
//WriteInstruction(0x00, 1);
WriteInstruction(0x0a, 1);
WriteInstruction(0x0f, 1);
WriteInstruction(0x1a, 0);
//WriteInstruction(0x0a, 1);
//WriteInstruction(0x0f, 1);
WriteInstruction(0x0e, 1);
WriteInstruction(0x0f, 1);
WriteInstruction(0x1b, 0);
//WriteInstruction(0x0f, 1);
//WriteInstruction(0x0f, 1);
WriteInstruction(0xff, 1);
WriteInstruction(0xff, 1);
WriteInstruction(0x13, 0);
WriteInstruction(0x05, 1);
//WriteInstruction(0x1e, 0);
//WriteInstruction(0x03, 1);
/*WriteInstruction(0x07, 0);
WriteInstruction(0x00, 1);
WriteInstruction(0x00, 1);
WriteInstruction(0x03, 1);
WriteInstruction(0x0f, 1);
WriteInstruction(0x08, 0);
WriteInstruction(0x00, 1);
WriteInstruction(0x00, 1);
WriteInstruction(0x05, 1);
WriteInstruction(0x0f, 1); */
}
//void DisPic(unsigned char * Picdata,unsigned char column ,unsigned char row,unsigned char startx,unsigned char starty)
//{
void DisPic(unsigned char * Picdata,unsigned char dispcode)
{
unsigned char i,j;
WriteInstruction(0x0f, 0);
WriteInstruction(0x00, 1);
WriteInstruction(0x00, 1);
WriteInstruction(0x10, 0);
WriteInstruction(0x09, 1);
WriteInstruction(0x0f, 1);
WriteInstruction(0x11, 0);
WriteInstruction(0x00, 1);
WriteInstruction(0x00, 1);
WriteInstruction(0x12, 0);
WriteInstruction(0x07, 1);
WriteInstruction(0x0f, 1);
WriteInstruction(0x14, 0);
switch(dispcode)
{
case 0:{
for(i=0;i<160;i++)
{
for(j=0;j<128;j++)
{
WriteInstruction(Picdata[2*(i*128+j)],1);
WriteInstruction(Picdata[2*(i*128+j)+1],1 );
}
}
}
case 1:{
for(i=0;i<160;i++)
{
for(j=0;j<128;j++)
{
WriteInstruction(0xf8,1);
WriteInstruction(0x00,1);
}
}
}
case 2:{
for(i=0;i<160;i++)
{
for(j=0;j<128;j++)
{
WriteInstruction(0x07,1);
WriteInstruction(0xe0,1);
}
}
}
case 3:{
for(i=0;i<160;i++)
{
for(j=0;j<128;j++)
{
WriteInstruction(0x00,1);
WriteInstruction(0x1e,1);
}
}
}
}
DelayMs(20000);
}
void main(void)
{
TR=1;
IE=0x85;
IP=0x01;
TCON=0x05;
InitOLED();
while(1)
{
DisPic(Picture160_128RGB,0);
DisPic(Picture160_128RGB,1);
DisPic(Picture160_128RGB,2);
DisPic(Picture160_128RGB,3);
}
}