SSD1305控制器68时序测试程序

发布时间:2016/11/23 13:34:51

#include <reg52.h>
#include <intrins.h>
#include <math.h>
#include <stdio.h>


#define   lcddata P1
#define   uchar  unsigned char
#define   uint   unsigned char


sbit  _WR=P3^1;
sbit  _RD=P3^3;
sbit  CS=P3^4;
sbit  DC=P3^0;
sbit  RES=P3^5;
sbit  BS1=P3^6;
sbit  BS2=P3^7;




/* 取模软件:PCtoLCD2002
   取模方式:列行式
   取模走向:逆向(低位在前)
   C51格式 */
uchar code tab8[][8]={


0x00,0x3E,0x41,0x41,0x3E,0x00,0x00,0x00,/*"0",0*/


0x00,0x42,0x7F,0x40,0x00,0x00,0x00,0x00,/*"1",1*/


0x00,0x62,0x51,0x49,0x46,0x00,0x00,0x00,/*"2",2*/


0x00,0x22,0x49,0x49,0x36,0x00,0x00,0x00,/*"3",3*/


0x00,0x38,0x26,0x7F,0x20,0x00,0x00,0x00,/*"4",4*/


0x00,0x4F,0x49,0x49,0x31,0x00,0x00,0x00,/*"5",5*/


0x00,0x3E,0x49,0x49,0x32,0x00,0x00,0x00,/*"6",6*/


0x00,0x03,0x71,0x09,0x07,0x00,0x00,0x00,/*"7",7*/


0x00,0x36,0x49,0x49,0x36,0x00,0x00,0x00,/*"8",8*/


0x00,0x26,0x49,0x49,0x3E,0x00,0x00,0x00,/*"9",9*/


0x00,0x7E,0x11,0x11,0x7E,0x00,0x00,0x00,/*"A",10*/


0x00,0x7F,0x49,0x49,0x36,0x00,0x00,0x00,/*"B",11*/


0x00,0x3E,0x41,0x41,0x22,0x00,0x00,0x00,/*"C",12*/


0x00,0x7F,0x41,0x41,0x3E,0x00,0x00,0x00,/*"D",13*/


0x00,0x7F,0x49,0x49,0x41,0x00,0x00,0x00,/*"E",14*/


0x00,0x7F,0x09,0x09,0x01,0x00,0x00,0x00,/*"F",15*/


0x00,0x01,0x7F,0x01,0x01,0x00,0x00,0x00,/*"T",0*/


0x00,0x26,0x49,0x49,0x32,0x00,0x00,0x00,/*"S",1*/


0x00,0x41,0x7F,0x41,0x00,0x00,0x00,0x00,/*"I",2*/


0x00,0x7F,0x06,0x18,0x7F,0x00,0x00,0x00,/*"N",3*/


0x00,0x3E,0x41,0x49,0x3A,0x00,0x00,0x00,/*"G",4*/


0x00,0x01,0x7F,0x01,0x01,0x00,0x00,0x00,/*"T",5*/


0x00,0x7F,0x49,0x49,0x41,0x00,0x00,0x00,/*"E",6*/


0x00,0x7F,0x08,0x14,0x63,0x00,0x00,0x00,/*"K",7*/


0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*" ",8*/


0x00,0x7F,0x41,0x41,0x3E,0x00,0x00,0x00,/*"D",9*/


0x00,0x41,0x7F,0x41,0x00,0x00,0x00,0x00,/*"I",10*/


0x00,0x26,0x49,0x49,0x32,0x00,0x00,0x00,/*"S",11*/


0x00,0x7F,0x09,0x09,0x06,0x00,0x00,0x00,/*"P",12*/


0x00,0x7F,0x40,0x40,0x40,0x00,0x00,0x00,/*"L",13*/


0x00,0x7E,0x11,0x11,0x7E,0x00,0x00,0x00,/*"A",14*/


0x03,0x04,0x78,0x04,0x03,0x00,0x00,0x00,/*"Y",15*/


0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*" ",16*/


0x00,0x42,0x7F,0x40,0x00,0x00,0x00,0x00,/*"1",17*/


0x00,0x62,0x51,0x49,0x46,0x00,0x00,0x00,/*"2",18*/


0x00,0x36,0x49,0x49,0x36,0x00,0x00,0x00,/*"8",19*/


0x00,0x1C,0x3E,0x1C,0x00,0x00,0x00,0x00,/*"*",20*/


0x00,0x3E,0x49,0x49,0x32,0x00,0x00,0x00,/*"6",21*/


0x00,0x38,0x26,0x7F,0x20,0x00,0x00,0x00,/*"4",22*/


0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*" ",23*/


0x00,0x7F,0x41,0x41,0x3E,0x00,0x00,0x00,/*"D",24*/


0x00,0x7F,0x41,0x41,0x7F,0x00,0x00,0x00,/*"O",25*/


0x00,0x01,0x7F,0x01,0x01,0x00,0x00,0x00,/*"T",26*/


0x00,0x26,0x49,0x49,0x32,0x00,0x00,0x00,/*"S",27*/
};


uchar code tab16[][32]={


0x10,0x61,0x06,0xE0,0x18,0x20,0xAA,0xAA,
0xAA,0xBF,0xAA,0xAA,0xAA,0x2A,0x00,0x00,
0x04,0x04,0xFF,0x00,0x00,0x00,0xFF,0x0A,
0x0A,0x0A,0x4A,0x8A,0x7F,0x00,0x00,0x00,/*"清",0*/


0x80,0x82,0x84,0x0C,0x10,0x10,0x10,0x10,
0xFE,0x10,0x10,0x10,0x10,0x10,0x00,0x00,
0x40,0x20,0x1F,0x20,0x50,0x48,0x44,0x43,
0x40,0x41,0x42,0x44,0x5C,0x48,0x20,0x00,/*"达",1*/


0x00,0x40,0x42,0x44,0x5C,0xC8,0x40,0x7F,
0x40,0xC0,0x50,0x4E,0x44,0x60,0x40,0x00,
0x00,0x80,0x40,0x20,0x18,0x07,0x00,0x00,
0x00,0x3F,0x40,0x40,0x40,0x40,0x78,0x00,/*"光",2*/


0x00,0x00,0xF8,0x48,0x48,0x48,0x48,0xFF,
0x48,0x48,0x48,0x48,0xF8,0x00,0x00,0x00,
0x00,0x00,0x0F,0x04,0x04,0x04,0x04,0x3F,
0x44,0x44,0x44,0x44,0x4F,0x40,0x70,0x00,/*"电",3*/


0x00,0x00,0x00,0x10,0x10,0x10,0x10,0xF0,
0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x20,0x20,0x20,0x20,0x3F,
0x3F,0x20,0x20,0x20,0x20,0x00,0x00,0x00,/*"1",0*/


0x00,0x00,0x60,0x50,0x10,0x08,0x08,0x08,
0x08,0x08,0x08,0x98,0xF0,0x70,0x00,0x00,
0x00,0x00,0x20,0x30,0x28,0x28,0x24,0x24,
0x22,0x22,0x21,0x20,0x30,0x18,0x00,0x00,/*"2",1*/


0x00,0x00,0x70,0x70,0xD8,0x88,0x88,0x08,
0x08,0x08,0x08,0x98,0x70,0x70,0x00,0x00,
0x00,0x0C,0x1E,0x12,0x21,0x21,0x20,0x21,
0x21,0x21,0x23,0x12,0x1E,0x0C,0x00,0x00,/*"8",2*/


0x00,0x00,0x40,0x40,0x40,0x80,0x80,0x90,
0xF0,0x90,0x80,0x40,0x40,0x40,0x40,0x00,
0x00,0x00,0x02,0x02,0x02,0x02,0x01,0x09,
0x0F,0x09,0x01,0x02,0x02,0x02,0x02,0x00,/*"*",3*/


0x00,0x00,0x80,0xE0,0x30,0x10,0x98,0x88,
0x88,0x88,0x88,0x88,0x98,0x10,0x00,0x00,
0x00,0x00,0x07,0x0F,0x19,0x31,0x20,0x20,
0x20,0x20,0x20,0x20,0x11,0x1F,0x0E,0x00,/*"6",4*/


0x00,0x00,0x00,0x00,0x00,0x80,0x40,0x20,
0x10,0xF0,0xF8,0xF8,0x00,0x00,0x00,0x00,
0x00,0x04,0x06,0x05,0x05,0x04,0x24,0x24,
0x24,0x3F,0x3F,0x3F,0x24,0x24,0x24,0x00,/*"4",5*/
};
/************延时*********************/
void uDelay(uchar n)
{
while(n--);
}


void Delayms(uchar n) //N=1,延时1ms
{  uchar i,j;
    for(j=n;j>0;j--)
    for(i=112;i>0;i--);
}


void delay(uchar n)
{
uchar i,k;
for(k=0;k<n;k++)
{
for(i=0;i<131;i++)
{
 uDelay(50);
}
}
}


/******************************************
 写数据、写指令
******************************************/
void  Writecom(uchar com) //写指令
{
DC=0;
CS=0;


   _WR=0;
   lcddata=com;
   _RD=1;
   _RD=0;


  CS=1;
DC=1;
}  


void Writedata(uchar dat) //写数据
{
DC=1;
CS=0;   
    _WR=0;
    lcddata=dat;
    _RD=1;
   _RD=0;
  CS=1;
DC=1;

/************起始页地址设置*********************/
void startpage(uchar page)
{
 page=page&0x0f;//定义低4位
 page=page|0xb0;//页
 Writecom(page);
}
/************起始列地址设置*********************/
/*The beginning of seg is 0x1000*/
void startcolumn(uchar column)
{


 uchar temp1,temp2,col;


col=column+2;
temp1=col&0x0f;
temp2=(col>>4)&0x0f;;


Writecom(temp1);

Writecom(0x10|temp2); 




}


/************全屏、清屏*********************/
void fill(uchar m)
{
uchar i,j;
for(i=0;i<8;i++)
{
startpage(0x00+i);
startcolumn(0x00);
for(j=0;j<128;j++)
 {
 Writedata(m);
 }
}
}
/************隔列、隔点*********************/
void g_d(uchar m)
{
unsigned char i,j;


for(i=0;i<8;i++)

 startpage(0x00+i);
 startcolumn(0x00);
 for(j=0;j<64;j++)
 { 
   Writedata(m);
   Writedata(~m);
 }
 }
 }
/************初始化*********************/
void INT()
{
RES=0;
uDelay(5);
RES=1;
uDelay(200);  //初始化之前必须延时大于110


//BS1=1;BS2=1;


//Delayms(50);
/*Set Display ON/OFF :0xae-> Display OFF*/
Writecom(0xae);


/*对比度设置*/
Writecom(0x81);
Writecom(0x7f);/*对比度设置为中 */


/*Entire Display ON: oXA4->Output follows RAM content*/
Writecom(0xa4);


/*Set Normal/Inverse Display:OXA6->Normal display*/
Writecom(0xa6);


/*Set Lower Column Start Address for Page Addressing Mode*/
Writecom(0x00);
/*Set Higher Column Start Address for Page Addressing Mode*/
Writecom(0x10);


/*Set Memory Addressing Mode */
Writecom(0x20);
Writecom(0x02);


/*Set Page Start Address for Page Addressing Mode*/
Writecom(0xb0);


/*Set Display Start Line*/
 Writecom(0x40);


/*Set Segment Remap:0xa1->column address 127 is mapped to SEG0*/
 Writecom(0xa1);


/*Set Multiplex Ratio:0x3f->64*/
Writecom(0xa8);
Writecom(0x3f);


/*Set COM Output Scan Direction:0xc8->remapped mode. Scan from COM[N-1] to COM0*/ 
Writecom(0xc8);


/*set display offset*/
Writecom(0xd3);
Writecom(0x00);


/*Set COM Pins Hardware Configuration*/
Writecom(0xda);
Writecom(0x12);


/*Set VCOMH Deselect Level:0x34->0.78 x VCC (RESET)*/
Writecom(0xdb);
Writecom(0x34);


fill(0x00);//清屏


/* Display ON in normal mode*/
Writecom(0xaf);


fill(0x00);//清屏


}
/******8*8单个字符显示:x列地址,y页地址,coder,字符序号****************/
void display88(uchar x,uchar y,uchar coder)
{
  uchar i;
  startpage(y);
  startcolumn(x);
  for(i=0;i<8;i++)
  {
    Writedata(tab8[coder][i]);
   }
}
/**8*8(n个)字符显示, 从第m个开始连续写n个:x列地址,y页地址**/
void display_8(uchar x,uchar y,uchar m,uchar n)
{
  uchar i;
  for(i=m;i<m+n;i++)
  {display88(x,y,i);
   x=x+8;
  }
}
/******16*16单个字符显示:x列地址,y页地址,coder,字符序号****************/
void display1616(uchar x,uchar y,uchar coder)
{
  uchar i;
  startpage(y);
  startcolumn(x);
  for(i=0;i<16;i++)
  {
   Writedata(tab16[coder][i]);
   }
  startpage(y+1);
  startcolumn(x);
  for(i=0;i<16;i++)
  {
   Writedata(tab16[coder][i+16]);
   }
}
/**16*16(n个)字符显示, 从第m个开始连续写n个:x列地址,y页地址**/
void display_16(uchar x,uchar y,uchar m,uchar n)
{
  uchar i;
  for(i=m;i<m+n;i++)
  {display1616(x,y,i);
   x=x+16;
  }
}
/***************边框*******************/


void Frame()
{
  uchar i,j;
 //上边框
  startpage(0x00);
  startcolumn(0x00);
  for(i=0;i<128;i++)
  {
  Writedata(0x01);
  }
  //下边框
  startpage(0x07);
  startcolumn(0x00);
  for(i=0;i<128;i++)
 {
  Writedata(0x80);
  }
  //左边框
  for(j=0;j<8;j++)
 {
  startpage(0x00+j);
  startcolumn(0x00);
  Writedata(0xff);
  }
  //右边框
  for(j=0;j<8;j++)
 {
  startpage(0x00+j);
  startcolumn(0x7f);
  Writedata(0xff);
  }
}
/************主函数*********************/
void main(void)
{
    uchar i;
INT();//初始化
  while(1)
{
fill(0x00);//清屏
fill(0xff);//全屏
delay(12);
fill(0x55);//隔行
delay(12);
fill(0xaa);//隔行
delay(12);
g_d(0xff);//隔列
delay(12);
g_d(0x00);//隔列
delay(12);
g_d(0x55);//隔点
delay(12);
g_d(0xaa);//隔点
delay(12); 
fill(0x00);//清屏
    for(i=0;i<8;i++)
    {
display_8(0,i,0,16);//显示“0123456789ABCDEF”
}
delay(12);
fill(0x00);//清屏
display_16(32,1,0,4);//显示“清达光电”
display_16(16,4,4,6);//显示“128*64”
Frame(); //边框
delay(12);
}
}


上一篇:UART串口测试程序
下一篇:低温-40度OLED测试程序