for(j=0;j<10;j++);
}
voidCheckState()
{
chardat;
LCDRs=0;
LCDRw=1;
do
{
dat=0x00;
LCDEn=1;
LCDDelay
(2);
LCDEn=0;
dat=0x80&dat;
}while(!
(dat==0x00));
}
voidwrite_com(charcmdcode)
{
CheckState();
LCDRs=0;
LCDRw=0;
LCDData=cmdcode;
LCDDelay
(2);
LCDEn=1;
LCDDelay
(2);
LCDEn=0;
}
voidwrite_data(charLCDDispdata)
{
CheckState();
LCDRs=1;
LCDRw=0;
LCDData=LCDDispdata;
LCDDelay
(2);
LCDEn=1;
LCDDelay
(2);
LCDEn=0;
}
voidLCDInit()
{
LCDDelay(100);
LCDCs1=1;
LCDCs2=1;
LCDDelay(100);
write_com(LCDDispOff);
write_com(PageAdd+0);
write_com(StartLine+0);
write_com(LCDColAdd+0);
write_com(LCDDispOn);
}
voidLCDClear()
{
chark,j;
LCDCs1=0;
LCDCs2=0;
write_com(PageAdd+0);
write_com(LCDColAdd+0);
for(k=0;k<8;k++)
{
write_com(PageAdd+k);
for(j=0;j<64;j++)
{
write_com(LCDColAdd+j);
write_data(0x00);
}
}
}
voidLCDWriteChinese(charleftright,charpage,charcolumn,charchinese[])
{
chari=0,j=0;
if(leftright=='L')
{
LCDCs1=0;
LCDCs2=1;
}
elseif(leftright=='R')
{
LCDCs1=1;
LCDCs2=0;
}
for(i=0;i<2;i++)
{
write_com(PageAdd+page+i);
write_com(LCDColAdd+column);
for(j=0;j<16;j++)
{
write_data(chinese[16*i+j]);
}
}
}
voidLCDWriteChineseBlack(charleftright,charpage,charcolumn,charchinese[])
{
chari=0,j=0;
if(leftright=='L')
{
LCDCs1=0;LCDCs2=1;
}
elseif(leftright=='R')
{
LCDCs1=1;
LCDCs2=0;
}
for(i=0;i<2;i++)
{
write_com(PageAdd+page+i);
write_com(LCDColAdd+column);
for(j=0;j<16;j++)
{
write_data(~chinese[16*i+j]);
}
}
}
voidLCDWriteNum(charleftright,charpage,charcolumn,charnum[])
{
chari=0,j=0;
if(leftright=='L')
{
LCDCs1=0;LCDCs2=1;
}
elseif(leftright=='R')
{
LCDCs1=1;
LCDCs2=0;
}
for(i=0;i<2;i++)
{
write_com(PageAdd+page+i);
write_com(LCDColAdd+column);
for(j=0;j<8;j++)
{
write_data(num[8*i+j]);
}
}
}
voidLCDWriteNumBlack(charleftright,charpage,charcolumn,charnum[])
{
chari=0,j=0;
if(leftright=='L')
{
LCDCs1=0;
LCDCs2=1;
}
elseif(leftright=='R')
{
LCDCs1=1;
LCDCs2=0;
}
for(i=0;i<2;i++)
{
write_com(PageAdd+page+i);
write_com(LCDColAdd+column);
for(j=0;j<8;j++)
{
write_data(~num[8*i+j]);
}
}
}
Lcd12864.h
#ifndef__LCD12864_H
#define__LCD12864_H
#include
#defineLCDDispOff0x3e
#defineLCDDispOn0x3f
#definePageAdd0xb8//页地址
#defineLCDColAdd0x40//列地址
#defineStartLine0xc0//行地址
#defineLCDDataP0
sbitLCDCs1=P2^0;//片选1
sbitLCDCs2=P2^1;//片选2
sbitLCDRet=P2^2;//复位端
sbitLCDRw=P2^3;//“数据/指令”选择
sbitLCDRs=P2^4;//“读/写”选择
sbitLCDEn=P2^5;//“读/写”使能
/*函数声明,供模块内部使用*/
staticvoidLCDDelay(chart);//延时函数
staticvoidCheckState();//检测忙标志
staticvoidwrite_com(charcmdcode);//写指定
staticvoidwrite_data(charLCDDispdata);//写数据
/*函数声明,外部调用*/
voidLCDInit();//12864初始化
voidLCDClear();//12864清屏
voidLCDWriteChinese(charleftright,charpage,charcolumn,charchinese[]);//12864指定页指定列显示一个汉字
voidLCDWriteChineseBlack(charleftright,charpage,charcolumn,charchinese[]);//12864指定页指定列显示一个汉字,以黑色背景白色文本显示
voidLCDWriteNum(charleftright,charpage,charcolumn,charnum[]);//12864指定屏指定页指定列显示一个数字
voidLCDWriteNumBlack(charleftright,charpage,charcolumn,charnum[]);//12864指定屏指定页指定列显示一个数字,以黑色背景白色文本显示
#endif
Main.c
#include"lcd12864.h"
charcodesan1[]={
0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
charcodesan2[]={
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01,
0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
charcodesin1[]={
0x00,0x00,0x00,0xE0,0x18,0x04,0x02,0x01,
0x01,0x02,0x04,0x18,0xE0,0x00,0x00,0x00,
0xE0,0x1C,0x03,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x03,0x1C,0xE0};
charcodesin2[]={
0x07,0x38,0xC0,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0xC0,0x38,0x07,
0x00,0x00,0x00,0x07,0x18,0x20,0x40,0x80,
0x80,0x40,0x20,0x18,0x07,0x00,0x00,0x00};
charcoderec[]={
0x01,0x01,0x01,0x01,0x01,0x01,0x01,0xFF,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xFF};
voiddelay(intt)
{
inti,j;
for(i=t;i>0;i--)
for(j=125;j>0;j--);
}
voidmain(void)
{
LCDInit();
LCDClear();
while
(1)
{
LCDWriteChinese('L',0,0,san1);
LCDWriteChinese('L',0,16,san2);
LCDWriteChinese('L',0,32,san1);
LCDWriteChinese('L',0,48,san2);
LCDWriteChinese('R',0,0,san1);
LCDWriteChinese('R',0,16,san2);
LCDWriteChinese('R',0,32,san1);
LCDWriteChinese('R',0,48,san2);
LCDWriteChinese('L',2,0,rec);
LCDWriteChinese('L',2,16,rec);
LCDWriteChinese('L',2,32,rec);
LCDWriteChinese('L',2,48,rec);
LCDWriteChinese('R',2,0,rec);
LCDWriteChinese('R',2,16,rec);
LCDWriteChinese('R',2,32,rec);
LCDWriteChinese('R',2,48,rec);
LCDWriteChinese('L',4,0,sin1);
LCDWriteChinese('L',6,16,sin2);
LCDWriteChinese('L',4,32,sin1);
LCDWriteChinese('L',6,48,sin2);
LCDWriteChinese('R',4,0,sin1);
LCDWriteChinese('R',6,16,sin2);
LCDWriteChinese('R',4,32,sin1);
LCDWriteChinese('R',6,48,sin2);
delay(1000);
LCDClear();
}
}