T6963芯片驱动的12864液晶模块的C语言程序
//来自电子开发者论坛// T6963驱动芯片 12864 液晶模块
//***************************************************************************
//连线表:CPU=89C52 *
//C/D=P2.0 /CE=P2.7 FS=P3.5 /WR=/WR /RD=/RD*
//FOSC=12MHz D0-D7=P0.0-P0.7 /RSET=/(CPU RSET) *
//***************************************************************************
#include <reg52.h>
#include <intrins.h>
#include <stdio.h>
#define uintunsigned int
#define uchar unsigned char
#define Graphic 1
#define TXT0
#define LcmLengthDots 128
#define LcmWidthDots 64
void Delay(uint MS);
sbit CSP = P2^7;
sbit RSP = P2^0;
sbit WRP = P3^6;
sbit RDP = P3^7;
sbit RES = P2^1;
#define LcmDataBus P0
char xdata LcmDataPort _at_ 0x0000;
char xdata LcmCmdPort_at_ 0x0100;
sbit FS = P3^5;
uchar code bmp1[];
uchar code str1[];
//来自电子开发者论坛
//指令&数据读写状态
void CheckRWCD(void)
{
CSP = 0;
WRP = 1;
RSP = 1;
LcmDataBus = 0xff;
RDP = 0;
while((LcmDataBus & 0x03) != 0x03);
RDP = 1;
CSP = 1;
// while((LcmCmdPort & 0x03) != 0x03); //低电平忙
}
//数据自动写状态
void CheckAutoWrite(void)
{
CSP = 0;
WRP = 1;
RSP = 1;
LcmDataBus = 0xff;
RDP = 0;
while((LcmDataBus & 0x08) ==0 );
RDP = 1;
CSP = 1;
// while((LcmCmdPort & 0x08) == 0); //低电平忙
}
//一个数据子写入函数
void LcmWriteData(uchar uData)
{
CSP = 0;
RDP = 1;
RSP = 0;
LcmDataBus = uData;
WRP = 0;
WRP = 1;
CSP = 1;
LcmDataBus = 0xff;
// LcmDataPort = uData;
}
//一个数据读出函数
uchar LcmReadData( void )
{
uchar uData;
CSP = 0;
WRP = 1;
RSP = 0;
LcmDataBus = 0xff;
RDP = 0;
uData = LcmDataBus;
RDP = 1;
CSP = 1;
// uData = LcmDataPort;
return uData;
}
//来自电子开发者论坛
//无参数指令写入函数
void LcmWriteCommand(uchar Command)
{
CheckRWCD(); //检测指令读写状态
CSP = 0;
RDP = 1;
RSP = 1;
LcmDataBus = Command;
WRP = 0;
WRP = 1;
CSP = 1;
LcmDataBus = 0xff;
// LcmCmdPort = Command;
}
//单参数指令写入函数
void LcmWriteCommandWith1Par(uchar Parameter,uchar Command)
{
LcmWriteData(Parameter);
LcmWriteCommand(Command);
// CheckRWCD(); //检测指令读写状态
// LcmDataPort = Parameter;
// CheckRWCD();
// LcmCmdPort = Command;
}
//双参数指令写入函数
void LcmWriteCommandWith2Par(uchar Parameter1,uchar Parameter2,uchar Command)
{
LcmWriteData(Parameter1);
LcmWriteData(Parameter2);
LcmWriteCommand(Command);
// CheckRWCD(); //检测指令读写状态
// LcmDataPort = Parameter1;
// CheckRWCD();
// LcmDataPort = Parameter2;
// CheckRWCD();
// LcmCmdPort = Command;
}
//LCM初始化函数
void LcmInit( void )
{
RES = 0;
Delay(10);
RES = 1;
Delay(30);
LcmWriteCommandWith2Par(0x00,0x00,0x40); //设置文本显示区首地址
LcmWriteCommandWith2Par(LcmLengthDots/8,0x00,0x41); //设置文本显示区宽度
LcmWriteCommandWith2Par(0x00,0x08,0x42); //设置图形显示区首地址0x0800
LcmWriteCommandWith2Par(LcmLengthDots/8,0x00,0x43); //设置图形显示区宽度
LcmWriteCommand(0xA7); //设置光标形状 8x8方块
LcmWriteCommand(0x81); //显示方式设置 文本xor图形(异或)
LcmWriteCommand(0x9C); //显示开关设置 文本开,图形开,光标闪烁关
}
//延时函数
void Delay(uint MS)
{
uchar us,usn;
while(MS!=0) //12M Crystal
{
usn = 2;
while(usn!=0)
{
us=0xf2;
while (us!=0){us--;};
usn--;
}
MS--;
}
}
//通过按键设定延时函数
void DelayKey(unsigned char HalfSecond)
{ //Delay_key加入时间参数0.5秒一级
unsigned int i;
for(i=0;i<50*HalfSecond;i++)//12M Crystal
{
Delay(10);
}
}
//清显示存储器函数
void LcmClear( uchar FillByte )
{
uint i = 8192; //此处仅清8K RAM,如果您32K RAM都使用,请修改i=32768(后面也要改)
if(FillByte)//注意如果填充ff时,如果RAM仅使用了8K,那么8192次会写入到文本区
{ //会形成乱码.(24064出厂时候默认将R7断开,即默认使用8KRAM)
i -= 2*1024;//所以如果填入ff时候要扣除2K的文本区
LcmWriteCommandWith2Par(0x00,0x08,0x24); //填充0xff时候要在图形区
}
else
LcmWriteCommandWith2Par(0x00,0x00,0x24);
LcmWriteCommand(0xB0); //进入自动写
while(i--)
{
CheckAutoWrite();
LcmWriteData( FillByte );
}
LcmWriteCommand(0xB2); //退出自动写
}
//设定显示地址函数
void LocateXY(uchar x,uchar y,uchar mode)
{
uinttemp;
temp= LcmLengthDots/8*y + x;
if(mode) //mode=1为Graphic
{ //如果图形模式要加上图形区首地址0x0800
temp+=0x0800;
}
LcmWriteCommandWith2Par(temp&0xff,temp/256,0x24);
}
//显示一个ASCII码函数
void PutChar(uchar x,uchar y,uchar CharByte)
{
LocateXY(x,y,TXT);
LcmWriteCommandWith1Par(CharByte,0xC4);
}
//显示一个字符串函数
void PutString(uchar x,uchar y,uchar *str)
{
while(*str != 0)
{
if(x> 15)//自动换行
{
x=0;
y++;
}
PutChar(x,y,*str);
++x;
++str;
}
}
//显示一副图片函数
void DisplayOneBmp(uchar *puts)
{
uchar i,j;
uintX=0;
LocateXY(0,0,Graphic);
LcmWriteCommand(0xB0); //进入自动写
for(i=0;i<LcmWidthDots;i++)
{
for(j=0;j<LcmLengthDots/8;j++)
{
CheckAutoWrite();
LcmWriteData(puts);
X++;
}
}
LcmWriteCommand(0xB2); //退出自动写
}
//反显一副图片函数
void ReverseOneBmp( void )
{ //利用数据一次读写操作
uchar i,j,X;//只能对一段RAM取反
LocateXY(0,0,Graphic);
for(i=0;i<LcmWidthDots;i++)
{
for(j=0;j<LcmLengthDots/8;j++)
{
LcmWriteCommand(0xC5); //读数据,地址不变
CheckRWCD();
X = LcmReadData();
X = ~X;
LcmWriteCommandWith1Par(X,0xC0);
}
}
}
//显示点阵子函数
void DisplayDots(uchar DotByte,uchar n)
{
uchar i,j;
LocateXY(0,0,Graphic);
LcmWriteCommand(0xB0); //进入自动写
for(i=0;i<LcmWidthDots/n;i++)
{
for(j=0;j<LcmLengthDots/8*n;j++)
{
CheckAutoWrite();
LcmWriteData(DotByte);
}
DotByte=~DotByte;
}
LcmWriteCommand(0xB2); //退出自动写
}
//来自电子开发者论坛
//主函数
void main(void)
{
uchar i;
FS =0;
Delay(60);
LcmInit();
LcmClear(0);
while(1)
{
DisplayOneBmp(bmp1); //显示一副图片
DelayKey(3);
ReverseOneBmp();//反显当前图片
DelayKey(3);
LcmClear(0);//清屏,此处不清屏可观察文本xor图形的显示效果
for(i=0;i<8;i++) //显示一屏字符串
PutString(0,i,str1);
DelayKey(3);
LcmClear(0);
LcmClear(0xff);//全黑检测
DelayKey(3);
DisplayDots(0x55,1);
DelayKey(3);
DisplayDots(0xaa,1);
DelayKey(3);
DisplayDots(0x33,2);
DelayKey(3);
DisplayDots(0xcc,2);
DelayKey(3);
DisplayDots(0xF0,4);
DelayKey(3);
DisplayDots(0x0F,4);
DelayKey(3);
}
}
//代码区
uchar code str0[]= "Welcome to use lcm 12864 ! ";
uchar code str1[]= {
0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,
0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,0x40,0x41
};
uchar code bmp1[]={
//********************************************************//
//***** 源图形宽度 * 高度:128 * 64
//***** 调整后宽度 * 高度:128 * 64
//***** 字模格式:横向取模,冗余模式,字节正序,正色取模,
//***** 位图点阵占用1024字节
//********************************************************//
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x01,0x80,0x00,0x00,0x06,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x01,0x80,0x30,0xDF,0x06,0x0C,0x01,0xFF,0xF0,0x00,0x00,0x00,0x00,
0x00,0x00,0x01,0xF9,0x80,0x33,0xDF,0x06,0xFF,0xE1,0xFF,0xF0,0x00,0x00,0x00,0x00,
0x00,0x00,0x01,0xF9,0xFC,0x33,0x1B,0x0C,0xFF,0xE1,0x8C,0x30,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x1B,0xFC,0x03,0x1B,0x0C,0x0C,0x01,0x8C,0x30,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0xDB,0x0C,0x03,0x1B,0x1C,0xFF,0xC1,0xFF,0xF0,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0xDB,0x6C,0x7B,0x1B,0x1C,0xFF,0xC1,0xFF,0xF0,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x71,0x60,0x7B,0x1B,0x1C,0xCC,0xC1,0x8C,0x30,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x30,0x60,0x1B,0x1B,0x0C,0xFF,0xC1,0x8C,0x30,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x30,0x60,0x1B,0x5F,0x0C,0xFF,0xC1,0xFF,0xF0,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x78,0x60,0x1B,0xDF,0x0C,0x0C,0x01,0xFF,0xF0,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x6C,0xF0,0x1B,0x98,0x0C,0x6C,0x01,0x8C,0x30,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0xC9,0xD8,0x18,0x18,0x0C,0x78,0x01,0x8C,0x30,0x00,0x00,0x00,0x00,
0x00,0x00,0x01,0xC3,0x9C,0x3C,0x18,0x0C,0x1E,0x03,0x0C,0x30,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x8F,0x0E,0x77,0xFF,0x8D,0xF7,0xE3,0x0C,0xF0,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x06,0x04,0x23,0xFF,0x8C,0xE1,0xC6,0x0C,0xE0,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x18,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x3F,0x18,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xFE,0x3F,0x7F,0xC0,0x00,0x00,0x00,
0x00,0x00,0x02,0x03,0x81,0xC0,0xF0,0x18,0x03,0xFE,0x33,0x7F,0xC0,0x00,0x00,0x00,
0x00,0x00,0x06,0x04,0x42,0x21,0x08,0x18,0x03,0x00,0x36,0x30,0x00,0x00,0x00,0x00,
0x00,0x00,0x0E,0x08,0x24,0x11,0x08,0x28,0x03,0x00,0x36,0x6C,0x00,0x00,0x00,0x00,
0x00,0x00,0x02,0x08,0x24,0x12,0x00,0x28,0x3F,0xFC,0x36,0x6C,0x00,0x00,0x00,0x00,
0x00,0x00,0x02,0x00,0x22,0x22,0xE0,0x48,0x3F,0xFC,0x33,0x7F,0x80,0x00,0x00,0x00,
0x00,0x00,0x02,0x00,0x41,0xC3,0x10,0x88,0x30,0x0C,0x33,0x7F,0x80,0x00,0x00,0x00,
0x00,0x00,0x02,0x00,0x82,0x22,0x08,0x88,0x30,0x0C,0x33,0x0C,0x00,0x00,0x00,0x00,
0x00,0x00,0x02,0x01,0x04,0x12,0x09,0x08,0x3F,0xFC,0x37,0x0C,0x00,0x00,0x00,0x00,
0x00,0x00,0x02,0x02,0x04,0x12,0x09,0xFC,0x3F,0xFC,0x36,0xFF,0xC0,0x00,0x00,0x00,
0x00,0x00,0x02,0x04,0x04,0x12,0x08,0x08,0x60,0x06,0x30,0xFF,0xC0,0x00,0x00,0x00,
0x00,0x00,0x02,0x08,0x02,0x21,0x10,0x08,0x66,0x66,0x30,0x0C,0x00,0x00,0x00,0x00,
0x00,0x00,0x02,0x0F,0xE1,0xC0,0xE0,0x08,0xC6,0x63,0x30,0x0C,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC6,0x63,0x30,0x0C,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
};
页:
[1]