📄 ca12864.txt
字号:
//***************************************************************************
//连线表: CPU=89C52 *
//RS=P2.0 R/W=P2.1 CS1=P2.7 CS2=P2.6 *
//SysClock=12MHz DB0-DB7=P0.0-P0.7 E=/(WR*RD) /Reset=InBoard *
//***************************************************************************
#include <reg52.h>
#include <stdlib.h>
#include <intrins.h>
#include <stdio.h>
/********************接口定义********************/
char xdata LcmWriteCmdPort1 _at_ 0x8000; //CS1=1 RW=0 RS=0
char xdata LcmWriteCmdPort2 _at_ 0x4000; //CS2=1 RW=0 RS=0
char xdata LcmWriteDataPort1 _at_ 0x8100; //CS1=1 RW=0 RS=1
char xdata LcmWriteDataPort2 _at_ 0x4100; //CS2=1 RW=0 RS=1
char xdata LcmReadStatusPort1 _at_ 0x8200; //CS1=1 RW=1 RS=0
char xdata LcmReadStatusPort2 _at_ 0x4200; //CS2=1 RW=1 RS=0
sbit Key =P3^4;
unsigned char Page; //页 地址
unsigned char Col; //列 地址
unsigned char code BMP1[];
unsigned char code HZ1[];
void Delay(unsigned int MS);
/***************************/
/*检查Busy */
/***************************/
void Busy1(void)
{
_nop_();
while(LcmReadStatusPort1 & 0x80); //Status Read Bit7 = BUSY
_nop_();
}
void Busy2(void)
{
_nop_();
while(LcmReadStatusPort2 & 0x80); //Status Read Bit7 = BUSY
_nop_();
}
/***************************/
/*写指令 */
/***************************/
void WriteCommand1( unsigned char CommandByte )
{
Busy1();
LcmWriteCmdPort1 = CommandByte;
_nop_();
}
void WriteCommand2( unsigned char CommandByte )
{
Busy2();
LcmWriteCmdPort2 = CommandByte;
_nop_();
}
/***************************/
/*写数据 */
/***************************/
void WriteData( unsigned char DataByte )
{
unsigned char x,y;
switch (Col&0xc0) /* col.and.0xC0 */
{ /*条件分支执行 */
case 0:
{
x = Col&0x3F|0x40; /* col.and.0x3f.or.Set Y Address*/
y = Page&0x07|0xB8; /* row.and.0x07.or.set Page */
WriteCommand1(y); //设置页面地址
WriteCommand1(x); //设置列地址
Busy1();
LcmWriteDataPort1 = DataByte;
_nop_();
break; //完成case分支
}
case 0x40:
{
x = Col&0x3F|0x40; /* col.and.0x3f.or.Set Y Address*/
y = Page&0x07|0xB8; /* row.and.0x07.or.set Page */
WriteCommand2(y); //设置页面地址
WriteCommand2(x); //设置列地址
Busy2();
LcmWriteDataPort2 = DataByte;
_nop_();
break; //完成case分支
}
}
}
void LcmClear( void )
{
Page = 0;
Col = 0;
for(Page=0;Page<8;Page++)
for(Col=0;Col<128;Col++)
WriteData(0);
}
void LcmInit( void )
{
WriteCommand1(0x3f); //开显示
WriteCommand2(0x3f);
WriteCommand1(0xc0); //设置起始地址=0
WriteCommand2(0xc0);
WriteCommand1(0x3f); //开显示
WriteCommand2(0x3f);
LcmClear();
Col = 0;
Page= 0;
}
void LcmPutDots( unsigned char DotByte , unsigned char n)
{
unsigned char i,j;
Page = 0;
Col = 0;
for(Page=0;Page<8;Page++)
{
Col = 0;
for(i=0;i<128/n;i++)
{
for(j=0;j<n;j++)
{
WriteData( DotByte );
Col++;
}
DotByte = ~DotByte;
}
if(DotByte ==0||DotByte==0xff) DotByte=~DotByte; //12864在显示8x8点阵时候需要换页时候取反
}
}
void LcmPutBMP( unsigned char *puts )
{
unsigned int X=0;
Page = 0;
Col = 0;
for(Page=0;Page<8;Page++)
{
for(Col=0;Col<128;Col++)
{
WriteData( puts[X] );
X++;
}
}
}
void LcmPutHZ( unsigned char HZcode )
{
unsigned char i,j;
unsigned int x;
x = 0x20*HZcode;
for(i=0;i<2;i++)
{
for(j=0;j<16;j++)
{
WriteData(HZ1[x]);
x++;
Col++;
}
Page++;
Col = Col-16; //恢复位置
}
Page = Page-2; //修正下一个汉字的起始位置
Col = Col+16; //下一个汉字接在这个汉字后面
}
void Delay(unsigned int MS)
{
unsigned char us,usn;
while(MS!=0)
{
usn = 2; //for 12M
while(usn!=0)
{
us=0xf6;
while (us!=0){us--;};
usn--;
}
MS--;
}
}
void DelayKey(unsigned int Second , unsigned int MS100)
{ //输入精确到0.1S,是用,
unsigned int i;
for(i=0;i<Second*100+MS100*10;i++)
{
if(Key==0)
{
Delay(20);
while(Key==0) {Delay(20);}
break;
}
else Delay(10);
}
}
void Main( void )
{
unsigned char HZ;
Delay(20); //等待复位
LcmInit();
LcmClear();
while(1)
{
LcmPutBMP(BMP1);
DelayKey(1,5);
for(Page=0;Page<8;Page+=2)
{
Col = 0;
for(HZ=0;HZ<8;HZ++) LcmPutHZ(HZ);
}
DelayKey(1,5);
LcmPutDots(0x55,1);
DelayKey(1,5);
LcmPutDots(0xAA,1);
DelayKey(1,5);
LcmPutDots(0x33,2);
DelayKey(1,5);
LcmPutDots(0xCC,2);
DelayKey(1,5);
LcmPutDots(0x0F,4);
DelayKey(1,5);
LcmPutDots(0xF0,4);
DelayKey(1,5);
LcmPutDots(0x00,8);
DelayKey(1,5);
LcmPutDots(0xFF,8);
DelayKey(1,5);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -