12864程序适用于芯片ST7565 NT7534 SSD1815 KS0724等
// 12864 ST7565 NT7534 SSD1815 KS0724 (并口) 8x16 字体
//***************************************************************************
//* Create by :Ssmart *
//***************************************************************************
//80时序连线表:CPU=89C52 *
//A0=P2.0 /CS=P2.7 /WR=/WR /RD=/RD *
//FOSC=12MHz D0-D7=P0.0-P0.7 /RSET=/(CPU RSET) *
//***************************************************************************
//68时序连线表:CPU=89C52 *
//A0=P2.0 /CS=P2.7 RW=P2.1 E=/(WR*RD) *
//FOSC=12MHz D0-D7=P0.0-P0.7 /RSET=/(CPU RSET) *
//***************************************************************************
#include <reg52.h>
#include <intrins.h>
char xdata LcmCmdPort _at_ 0x0000; //Write Cmd A0=0 RW=0
char xdata LcmDatPort _at_ 0x0100; //Write Data A0=1 RW=0
char xdata LcmStatusPort _at_ 0x0200; //Read Status A0=0 RW=1
char xdata LcmReadDatPort _at_ 0x0300; //Read Data A0=1 RW=1
sbit Reset=P3^5;
#define Uchar unsigned char
#define Uint unsigned int
Uchar code ASCIIchardot[];
Uchar code bmp1[];
Uchar code bmp2[];
Uchar code bmp3[];
Uchar code ComTable[]={3,2,1,0,7,6,5,4,};
void CheckBusy( void )
{
while(LcmStatusPort&0x80); //Status Busy =1 , wait...
}
void WriteCommand( Uchar CommandByte )
{
CheckBusy();
LcmCmdPort=CommandByte;
}
void WriteData( Uchar DataByte )
{
CheckBusy();
LcmDatPort=DataByte;
}
Uchar ReadData( void )
{
CheckBusy();
return LcmReadDatPort;
}
void Delay(Uint MS)
{
Uchar us,usn;
while(MS!=0)
{ usn = 4;
while(usn!=0)
{
us=0xf0;
while (us!=0){us--;};
usn--;
}
MS--;
}
}
void LcmClear( void )
{
Uint i,j;
WriteCommand(0x40); //Set Display Start Line = com0
for(i=0;i<8;i++)
{
WriteCommand(0xB0|ComTable); //Set Page Address
WriteCommand(0x10); //Set Column Address = 0
WriteCommand(0x01); //Colum from 1 -> 129 auto add
for(j=0;j<128;j++)
{
WriteData( 0 );
}
}
}
void LcmInit( void )
{
WriteCommand(0xAE); //Display OFF
WriteCommand(0xA2); //1/64 Duty 1/9 Bias
WriteCommand(0xA0); //ADC select --> right
WriteCommand(0xC0); //com1 --> com64
WriteCommand(0x24); //没用,外部Rb/Ra
WriteCommand(0x81); //Sets V0
WriteCommand(0x30); //内部电位器调节对比度
WriteCommand(0x2F); //voltage follower ON regulator ON booster ON
WriteCommand(0xA6); //Normal Display (not reverse dispplay)
WriteCommand(0xA4); //Entire Display Disable
LcmClear();
WriteCommand(0xAF); //Display ON
WriteCommand(0x40); //Set Display Start Line = com0
WriteCommand(0xB0); //Set Page Address = 0
WriteCommand(0x10); //Set Column Address 4 higher bits = 0
WriteCommand(0x01); //Set Column Address 4 lower bits = 1 , from IC SEG1 -> SEG129
}
//显示ASICC字符的函数
void LcmPutChar(Uchar col,Uchar page,Uchar Order)
{
Uchar i;
Uint x;
x = (Order-0x20)*0x10; //ASICC字符从0x20开始,每个16 byte
WriteCommand(ComTable[page&0x07]|0xB0); //Set Page Address
WriteCommand( ((col+1)>>4) | 0x10); //Set Column Address High Byte
WriteCommand( (col+1)&0x0F ); //Low Byte Colum from 1 -> 129 auto add
for(i=0;i<8;i++)
{
WriteData( ASCIIchardot[x] );
x++;
}
page++; //下半字符page+1
WriteCommand(ComTable[page&0x07]|0xB0); //Set Page Address
WriteCommand( ((col+1)>>4) | 0x10); //Set Column Address High Byte
WriteCommand( (col+1)&0x0F ); //Low Byte Colum from 1 -> 129 auto add
for(i=0;i<8;i++)
{
WriteData( ASCIIchardot[x] );
x++;
}
page--; //写完一个字符page还原
}
//显示字符串的函数
/*
为了避免需要LcmPutChar返回page col值,
只能将判断col和paeg的程序放到PutStr中
调用函数的时候需要注意
*/
void LcmPutStr(Uchar col,Uchar page,Uchar *puts)
{
while(*puts != '\0') //判断字符串时候显示完毕
{
if(col>120) //判断行末空间是否足够放一个字符,自动换行
{
page=page+2;
col=0;
}
if(page>6) //到了屏幕最下角,自动返回左上角
{
page=0;
col=0;
}
LcmPutChar(col,page,*puts);
puts++;
Delay(10); //延时演示效果
col=col+8; //下一个字符8列之后
}
}
void LcmDisplayBmp( Uchar *puts )
{
Uchar i,j;
Uint X=0;
WriteCommand(0x40); //Set Display Start Line = com0
for(i=0;i<8;i++)
{
WriteCommand(0xB0|ComTable); //Set Page Address
WriteCommand(0x10); //Set Column Address = 0
WriteCommand(0x01); //Colum from 1 -> 129 auto add
for(j=0;j<128;j++)
{
WriteData( puts[X] );
X++;
}
}
}
void LcmReverseBmp( void )
{
Uchar i,j,X;
WriteCommand(0x40); //Set Display Start Line = com0
for(i=0;i<8;i++)
{
WriteCommand(0xB0|ComTable); //Set Page Address
for(j=0;j<128;j++)
{
WriteCommand( ((j+1)>>4) | 0x10);
WriteCommand( (j+1)&0x0F );
X = ReadData(); //Dummy Read
X = ReadData();
X = ~X;
WriteCommand( ((j+1)>>4) | 0x10);
WriteCommand( (j+1)&0x0F );
WriteData(X);
}
}
}
void LcmDisplayBlack( )
{
Uchar i,j;
WriteCommand(0x40); //Set Display Start Line = com0
for(i=0;i<8;i++)
{
WriteCommand(0xB0|ComTable); //Set Page Address
WriteCommand(0x10); //Set Column Address = 0
WriteCommand(0x01); //Colum from 1 -> 129 auto add
for(j=0;j<128;j++)
WriteData( 0xff );
}
}
void main( void )
{
Delay(10);
Reset = 0;
Delay(200);
Reset = 1;
Delay(50);
LcmInit();
while(1)
{
LcmDisplayBmp(bmp1);
Delay(1000);
LcmReverseBmp();
Delay(1000);
LcmClear();
LcmPutStr(0,0,"http://hi.baidu.com/lcdbbs/ Ssmart");
Delay(1000);
LcmDisplayBlack();
Delay(1000);
}
}
/* ASICC字库代码 8x16点阵 */
unsigned char code ASCIIchardot[16*96] = {
/* */
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
/*! */
0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xCC,0x0C,0x00,0x00,0x00,
/*" */
0x00,0x08,0x30,0x60,0x08,0x30,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
/*# */
0x02,0x03,0x1E,0x02,0x03,0x1E,0x02,0x00,0x20,0xFC,0x20,0x20,0xFC,0x20,0x20,0x00,
/*$ */
0x00,0x0E,0x11,0x3F,0x10,0x0C,0x00,0x00,0x00,0x18,0x04,0xFF,0x84,0x78,0x00,0x00,
/*% */
0x0F,0x10,0x0F,0x00,0x07,0x18,0x00,0x00,0x00,0x84,0x38,0xC0,0x78,0x84,0x78,0x00,
/*& */
0x00,0x0F,0x10,0x11,0x0E,0x00,0x00,0x00,0x78,0x84,0xC4,0x24,0x98,0xE4,0x84,0x08,
/*' */
0x08,0x68,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
/*( */
0x00,0x00,0x00,0x07,0x18,0x20,0x40,0x00,0x00,0x00,0x00,0xE0,0x18,0x04,0x02,0x00,
/*) */
0x00,0x40,0x20,0x18,0x07,0x00,0x00,0x00,0x00,0x02,0x04,0x18,0xE0,0x00,0x00,0x00,
/** */
0x02,0x02,0x01,0x0F,0x01,0x02,0x02,0x00,0x40,0x40,0x80,0xF0,0x80,0x40,0x40,0x00,
/*+ */
0x00,0x00,0x00,0x0F,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0xF8,0x80,0x80,0x80,0x00,
/*, */
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x0D,0x0E,0x00,0x00,0x00,0x00,0x00,
/*- */
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
/*. */
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x0C,0x00,0x00,0x00,0x00,0x00,
/*/ */
0x00,0x00,0x00,0x00,0x01,0x06,0x18,0x20,0x00,0x06,0x18,0x60,0x80,0x00,0x00,0x00,
/*0 */
0x00,0x07,0x08,0x10,0x10,0x08,0x07,0x00,0x00,0xF0,0x08,0x04,0x04,0x08,0xF0,0x00,
/*1 */
0x00,0x08,0x08,0x1F,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0xFC,0x04,0x04,0x00,0x00,
/*2 */
0x00,0x0E,0x10,0x10,0x10,0x11,0x0E,0x00,0x00,0x0C,0x14,0x24,0x44,0x84,0x0C,0x00,
/*3 */
0x00,0x0C,0x10,0x11,0x11,0x12,0x0C,0x00,0x00,0x18,0x04,0x04,0x04,0x88,0x70,0x00,
/*4 */
0x00,0x00,0x03,0x04,0x08,0x1F,0x00,0x00,0x00,0xE0,0x20,0x24,0x24,0xFC,0x24,0x00,
/*5 */
0x00,0x1F,0x10,0x11,0x11,0x10,0x10,0x00,0x00,0x98,0x84,0x04,0x04,0x88,0x70,0x00,
/*6 */
0x00,0x07,0x08,0x11,0x11,0x18,0x00,0x00,0x00,0xF0,0x88,0x04,0x04,0x88,0x70,0x00,
/*7 */
0x00,0x1C,0x10,0x10,0x13,0x1C,0x10,0x00,0x00,0x00,0x00,0xFC,0x00,0x00,0x00,0x00,
/*8 */
0x00,0x0E,0x11,0x10,0x10,0x11,0x0E,0x00,0x00,0x38,0x44,0x84,0x84,0x44,0x38,0x00,
/*9 */
0x00,0x07,0x08,0x10,0x10,0x08,0x07,0x00,0x00,0x00,0x8C,0x44,0x44,0x88,0xF0,0x00,
/*: */
0x00,0x00,0x00,0x03,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x0C,0x00,0x00,0x00,
/*; */
0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x06,0x00,0x00,0x00,0x00,
/*< */
0x00,0x00,0x01,0x02,0x04,0x08,0x10,0x00,0x00,0x80,0x40,0x20,0x10,0x08,0x04,0x00,
/*= */
0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00,
/*> */
0x00,0x10,0x08,0x04,0x02,0x01,0x00,0x00,0x00,0x04,0x08,0x10,0x20,0x40,0x80,0x00,
/*? */
0x00,0x0E,0x12,0x10,0x10,0x10,0x0F,0x00,0x00,0x00,0x00,0x0C,0x6C,0x80,0x00,0x00,
/*@ */
0x03,0x0C,0x13,0x14,0x17,0x08,0x07,0x00,0xE0,0x18,0xE4,0x24,0xC4,0x28,0xD0,0x00,
/*A */
0x00,0x00,0x03,0x1C,0x07,0x00,0x00,0x00,0x04,0x3C,0xC4,0x40,0x40,0xE4,0x1C,0x04,
/*B */
0x10,0x1F,0x11,0x11,0x11,0x0E,0x00,0x00,0x04,0xFC,0x04,0x04,0x04,0x88,0x70,0x00,
/*C */
0x03,0x0C,0x10,0x10,0x10,0x10,0x1C,0x00,0xE0,0x18,0x04,0x04,0x04,0x08,0x10,0x00,
/*D */
0x10,0x1F,0x10,0x10,0x10,0x08,0x07,0x00,0x04,0xFC,0x04,0x04,0x04,0x08,0xF0,0x00,
/*E */
0x10,0x1F,0x11,0x11,0x17,0x10,0x08,0x00,0x04,0xFC,0x04,0x04,0xC4,0x04,0x18,0x00,
/*F */
0x10,0x1F,0x11,0x11,0x17,0x10,0x08,0x00,0x04,0xFC,0x04,0x00,0xC0,0x00,0x00,0x00,
/*G */
0x03,0x0C,0x10,0x10,0x10,0x1C,0x00,0x00,0xE0,0x18,0x04,0x04,0x44,0x78,0x40,0x00,
/*H */
0x10,0x1F,0x10,0x00,0x00,0x10,0x1F,0x10,0x04,0xFC,0x84,0x80,0x80,0x84,0xFC,0x04,
/*I */
0x00,0x10,0x10,0x1F,0x10,0x10,0x00,0x00,0x00,0x04,0x04,0xFC,0x04,0x04,0x00,0x00,
/*J */
0x00,0x00,0x10,0x10,0x1F,0x10,0x10,0x00,0x03,0x01,0x01,0x01,0xFE,0x00,0x00,0x00,
/*K */
0x10,0x1F,0x11,0x03,0x14,0x18,0x10,0x00,0x04,0xFC,0x04,0x80,0x64,0x1C,0x04,0x00,
/*L */
0x10,0x1F,0x10,0x00,0x00,0x00,0x00,0x00,0x04,0xFC,0x04,0x04,0x04,0x04,0x0C,0x00,
/*M */
0x10,0x1F,0x1F,0x00,0x1F,0x1F,0x10,0x00,0x04,0xFC,0x00,0xFC,0x00,0xFC,0x04,0x00,
/*N */
0x10,0x1F,0x0C,0x03,0x00,0x10,0x1F,0x10,0x04,0xFC,0x04,0x00,0xE0,0x18,0xFC,0x00,
/*O */
0x07,0x08,0x10,0x10,0x10,0x08,0x07,0x00,0xF0,0x08,0x04,0x04,0x04,0x08,0xF0,0x00,
/*P */
0x10,0x1F,0x10,0x10,0x10,0x10,0x0F,0x00,0x04,0xFC,0x84,0x80,0x80,0x80,0x00,0x00,
/*Q */
0x07,0x08,0x10,0x10,0x10,0x08,0x07,0x00,0xF0,0x18,0x24,0x24,0x1C,0x0A,0xF2,0x00,
/*R */
0x10,0x1F,0x11,0x11,0x11,0x11,0x0E,0x00,0x04,0xFC,0x04,0x00,0xC0,0x30,0x0C,0x04,
/*S */
0x00,0x0E,0x11,0x10,0x10,0x10,0x1C,0x00,0x00,0x1C,0x04,0x84,0x84,0x44,0x38,0x00,
/*T */
0x18,0x10,0x10,0x1F,0x10,0x10,0x18,0x00,0x00,0x00,0x04,0xFC,0x04,0x00,0x00,0x00,
/*U */
0x10,0x1F,0x10,0x00,0x00,0x10,0x1F,0x10,0x00,0xF8,0x04,0x04,0x04,0x04,0xF8,0x00,
/*V */
0x10,0x1E,0x11,0x00,0x00,0x13,0x1C,0x10,0x00,0x00,0xE0,0x1C,0x70,0x80,0x00,0x00,
/*W */
0x1F,0x10,0x00,0x1F,0x00,0x10,0x1F,0x00,0xC0,0x3C,0xE0,0x00,0xE0,0x3C,0xC0,0x00,
/*X */
0x10,0x18,0x16,0x01,0x01,0x16,0x18,0x10,0x04,0x0C,0x34,0xC0,0xC0,0x34,0x0C,0x04,
/*Y */
0x10,0x1C,0x13,0x00,0x13,0x1C,0x10,0x00,0x00,0x00,0x04,0xFC,0x04,0x00,0x00,0x00,
/*Z */
0x08,0x10,0x10,0x10,0x13,0x1C,0x10,0x00,0x04,0x1C,0x64,0x84,0x04,0x04,0x18,0x00,
/*[ */
0x00,0x00,0x00,0x7F,0x40,0x40,0x40,0x00,0x00,0x00,0x00,0xFE,0x02,0x02,0x02,0x00,
/*\ */
0x00,0x30,0x0C,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x60,0x1C,0x03,0x00,
/*] */
0x00,0x40,0x40,0x40,0x7F,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0xFE,0x00,0x00,0x00,
/*^ */
0x00,0x00,0x20,0x40,0x40,0x40,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
/*_ */
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,
/*` */
0x00,0x40,0x40,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
/*a */
0x00,0x00,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x98,0x24,0x44,0x44,0x44,0xFC,0x04,
/*b */
0x10,0x1F,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0xFC,0x88,0x04,0x04,0x88,0x70,0x00,
/*c */
0x00,0x00,0x00,0x01,0x01,0x01,0x00,0x00,0x00,0x70,0x88,0x04,0x04,0x04,0x88,0x00,
/*d */
0x00,0x00,0x00,0x01,0x01,0x11,0x1F,0x00,0x00,0x70,0x88,0x04,0x04,0x08,0xFC,0x04,
/*e */
0x00,0x00,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0xF8,0x44,0x44,0x44,0x44,0xC8,0x00,
/*f */
0x00,0x01,0x01,0x0F,0x11,0x11,0x11,0x18,0x00,0x04,0x04,0xFC,0x04,0x04,0x00,0x00,
/*g */
0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0xD6,0x29,0x29,0x29,0xC9,0x06,0x00,
/*h */
0x10,0x1F,0x00,0x01,0x01,0x01,0x00,0x00,0x04,0xFC,0x84,0x00,0x00,0x04,0xFC,0x04,
/*i */
0x00,0x01,0x19,0x19,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0xFC,0x04,0x04,0x00,0x00,
/*j */
0x00,0x00,0x00,0x01,0x19,0x19,0x00,0x00,0x00,0x03,0x01,0x01,0x01,0xFE,0x00,0x00,
/*k */
0x10,0x1F,0x00,0x00,0x01,0x01,0x01,0x00,0x04,0xFC,0x24,0x40,0xB4,0x0C,0x04,0x00,
/*l */
0x00,0x10,0x10,0x1F,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0xFC,0x04,0x04,0x00,0x00,
/*m */
0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x04,0xFC,0x04,0x00,0xFC,0x04,0x00,0xFC,
/*n */
0x01,0x01,0x00,0x01,0x01,0x01,0x00,0x00,0x04,0xFC,0x84,0x00,0x00,0x04,0xFC,0x04,
/*o */
0x00,0x00,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0xF8,0x04,0x04,0x04,0x04,0xF8,0x00,
/*p */
0x01,0x01,0x00,0x01,0x01,0x00,0x00,0x00,0x01,0xFF,0x85,0x04,0x04,0x88,0x70,0x00,
/*q */
0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x00,0x00,0x70,0x88,0x04,0x04,0x05,0xFF,0x01,
/*r */
0x01,0x01,0x01,0x00,0x01,0x01,0x01,0x00,0x04,0x04,0xFC,0x84,0x04,0x00,0x80,0x00,
/*s */
0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0xCC,0x24,0x24,0x24,0x24,0x98,0x00,
/*t */
0x00,0x01,0x01,0x07,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0xF8,0x04,0x04,0x00,0x00,
/*u */
0x01,0x01,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0xF8,0x04,0x04,0x04,0x08,0xFC,0x04,
/*v */
0x01,0x01,0x01,0x00,0x00,0x01,0x01,0x01,0x00,0x80,0x70,0x0C,0x10,0x60,0x80,0x00,
/*w */
0x01,0x01,0x00,0x01,0x00,0x01,0x01,0x01,0xF0,0x0C,0x30,0xC0,0x30,0x0C,0xF0,0x00,
/*x */
0x00,0x01,0x01,0x00,0x01,0x01,0x01,0x00,0x00,0x04,0x8C,0x74,0x70,0x8C,0x04,0x00,
/*y */
0x01,0x01,0x01,0x00,0x00,0x01,0x01,0x01,0x01,0x81,0x71,0x0E,0x18,0x60,0x80,0x00,
/*z */
0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x84,0x0C,0x34,0x44,0x84,0x0C,0x00,
/*{ */
0x00,0x00,0x00,0x00,0x01,0x3E,0x40,0x40,0x00,0x00,0x00,0x00,0x00,0xFC,0x02,0x02,
/*| */
0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,
/*} */
0x00,0x40,0x40,0x3E,0x01,0x00,0x00,0x00,0x00,0x02,0x02,0xFC,0x00,0x00,0x00,0x00,
/*~ */
0x00,0x60,0x80,0x80,0x40,0x40,0x20,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
/* */
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
Uchar code bmp1[]={
//一幅12864图片的纵向取模的数据
};