#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);
}
}