📄 lcm12864.c
字号:
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit RSPIN = P2^3;
sbit RWPIN = P2^4;
sbit EPIN = P2^5;
sbit CS1PIN = P2^1;
sbit CS2PIN = P2^0;
sbit LCMBUSY = P0^7;
sfr LCMDATA = 0x80; //P2
void LCMREST(void);
void WAITIDLE(bit ChipChoice);
void LCMWRITECONTROLWORDS(uchar ControlWords, bit ChipChoice);
void LCMWRITEDISPDATA(uchar DispData, bit ChipChoice);
void MuchPageDisp(uchar *DataPoint, uchar StartPage, uchar StartRow,uchar DispLenth,uchar Pagesum); //多页显示函数
uchar Temp0,Temp1,Temp2,Temp3,Temp4,Temp5;
uchar XPosition,YPosition; //XPosition: 列方向地址指针 YPosition: 行方向地址指针
void LCM12864(uchar LcmDispData, uchar LcmFirstPage, uchar CharacterStartRow, uchar CharacterRowSum, bit IfNotRest)
{
bit CsChoice;
if(IfNotRest)
{
LCMREST();
}
Temp0=0xc0; //(LcmFirstPage*8)|0xc0; //写起始点控制字
LCMWRITECONTROLWORDS(Temp0,0); //写片1
LCMWRITECONTROLWORDS(Temp0,1); //写片2
for(Temp1=0;Temp1<CharacterRowSum;Temp1++)
{
if(CharacterStartRow<64) CsChoice=0;
else CsChoice=1;
Temp0=CharacterStartRow&0x3f|0x40; //写列码 定位
LCMWRITECONTROLWORDS(Temp0,CsChoice);
Temp0=LcmFirstPage&0x07|0xb8; //写页码 定位
LCMWRITECONTROLWORDS(Temp0,CsChoice);
LCMWRITEDISPDATA(LcmDispData, CsChoice); //写数据
CharacterStartRow++;
}
}
void LCMREST(void)
{
Temp0=0x3f; //写开LCM控制字
LCMWRITECONTROLWORDS(Temp0,0); //写片1
LCMWRITECONTROLWORDS(Temp0,1); //写片2
}
void LCMWRITECONTROLWORDS(uchar ControlWords, bit ChipChoice) //写LCM控制字
{
ET0=0;
WAITIDLE(ChipChoice);
LCMDATA=ControlWords; //RS=0 RW=0 CS1=1 E=高脉冲
RSPIN=0;
RWPIN=0;
if(ChipChoice) CS2PIN=1;
else CS1PIN=1;
EPIN=1;
EPIN=1;
CS1PIN=0;
CS2PIN=0;
EPIN=0;
ET0=1;
}
void LCMWRITEDISPDATA(uchar DispData, bit ChipChoice) //写LCM显示数据
{
ET0=0;
WAITIDLE(ChipChoice);
LCMDATA=DispData;
RSPIN=1;
RWPIN=0;
if(ChipChoice) CS2PIN=1;
else CS1PIN=1;
EPIN=1;
EPIN=1;
CS1PIN=0;
CS2PIN=0;
EPIN=0;
ET0=1;
}
void WAITIDLE(bit ChipChoice) //空闲检测
{
LCMDATA=0xff;
RSPIN=0; //RS=0 RW=1 CS1/CS2=1 E=高电平
RWPIN=1;
if(ChipChoice) CS2PIN=1;
else CS1PIN=1;
EPIN=1;
EPIN=1; //=nop;
while(LCMBUSY);
CS1PIN=0;
CS2PIN=0;
EPIN=0;
}
void MuchPageDisp(uchar *DataPoint, uchar StartPage, uchar StartRow,uchar DispLenth,uchar Pagesum) //汉字显示函数
{
uchar TTemp1,TTemp2,TTemp3;
char i;
for(i=Pagesum-1;i>=0;i--)
{
TTemp3=StartPage+i;
TTemp2=StartRow;
for(TTemp1=0;TTemp1<DispLenth;TTemp1+=1)
{
LCM12864(*(DataPoint+DispLenth*i+TTemp1),TTemp3,TTemp2,1,0);
TTemp2++;
}
}
/* TTemp3=StartPage+1;
TTemp2=StartRow;
for(TTemp1=1;TTemp1<DispLenth;TTemp1+=1)
{
LCM12864(*(DataPoint+DispLenth+TTemp1),TTemp3,TTemp2,1,0);
TTemp2++;
}*/
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -