📄 lcm12864.h
字号:
//*************************************************************
sbit DIPIN = P1^0; //用户自定义DI对应引脚
sbit CLKPIN = P1^1; //用户自定义CLK对应引脚
void WriteCom_Dat(unsigned char cmd_dat, unsigned char cd); // 第一行AC 0x80~0x87
void Transmit4Byte(unsigned char ucBuffer); // 第2行AC 0x90-0x97
void DdramClear(void); // WriteCom_Dat(0x88,0); // 第三行AC 0x88-0x8F
void InitLcm(void); // 第四行AC 0x98-0x9F
void DisplayInt(unsigned int CounterLeft);
void Display1Decimal(unsigned int CounterLeft);
void DisplayChar(unsigned char CounterLeft);
unsigned char StringDigit[11]="0123456789 ";
//*********************** Gdram **********************************
void Draw_Rectangle();
void Draw_Half_Rectangle();
void Setup_Expand_Mode();
void Gdram_Write_Word(unsigned char Gdram_Cur_X,unsigned char Gdram_Cur_Y,unsigned char High8,unsigned char Low8);
void Clear_Gdram();
//*********************************************************************************
void Delay(unsigned int a);
//*********************************************************************************
//--------------------------------------------------------------------------------------------
void Delay(unsigned int a)
{
unsigned int i;
while(--a!= 0)
{
for(i = 0; i < 125; i++); //一个 ; 表示空语句,CPU空转。
} //i 从0加到125,CPU大概就耗时1 毫秒
}
void Setup_Basic_Mode()
{
WriteCom_Dat(0x30,0); // 8-bit控制界面,基本指令集动作
}
void InitLcm(void)
{
Delay(4);
Setup_Basic_Mode(); // 功能设定 0 0 1 DL X 0 X X ; DL=1 8-bit控制界面 DL=0 4-bit控制界面
// WriteCom_Dat(0x30,0); // RE RE=1 扩充指令集动作 RE=0 基本指令集动作
// WriteCom_Dat(0x36,0); // 8-bit控制界面,扩充指令集动作, 绘图显示ON
WriteCom_Dat(0x0c,0); //显示状态 00001DCB ; D=1:整体显示ON C=1游标ON B=1游标位僮显示反白ON--将光标所在处的资料反白显示
WriteCom_Dat(0x01,0); //清除显示,4.6ms
WriteCom_Dat(0x06,0); //进入点设定 00000 1 I/D S I/D=1:光标右移,DDRAM位址计数器+1; I/D=0:光标左移DDRAM位址计数器-1; S=1 画面整体反向移动
}
void WriteCom_Dat(unsigned char cmd_dat, unsigned char cd)
{ // cd=0:写指令;cd=1:写数据;
unsigned int iTemp;
unsigned char ucDB;
/*写入5个连续 "1" */
DIPIN = 1; // SID=1
for(iTemp=0;iTemp<5;iTemp++)
{
CLKPIN = 0;
CLKPIN = 1;
}
/* WRite "RW" */
CLKPIN = 0; // SCLK=0
DIPIN = 0; // SID=0 ;
CLKPIN = 1; // SCLK=1
/* WRite "RS" */
CLKPIN = 0; // SCLK=0
if(cd==1)DIPIN = 1; // SID=1 写数据 else SID=0写命令
CLKPIN = 1; // SCLK=1
/* 第八位写入0 */
CLKPIN = 0; // SCLK=0
DIPIN = 0; // SID=0 ;
CLKPIN = 1; // SCLK=1
/*接收到起始位元组后,每个指令/数据将分为二组接收到:较高4位元(DB7~DB4)的指令资料将会
被放在第一组的LSB部分,而较低4位元(DB3~DB0)的指令资料则会被放在第二组的LSB部分,
至于相关的另4位则都为0 */
/* 传送高4位及4个0 */
ucDB=cmd_dat;
Transmit4Byte(ucDB);
/* 传送低4位及4个0 */
ucDB=cmd_dat<<4;
Transmit4Byte(ucDB);
// Delay(10);
}
void Transmit4Byte(unsigned char ucBuffer)
{
unsigned int iTemp; //串行移位
for(iTemp=0;iTemp<4;iTemp++)
{
CLKPIN = 0; // SCLK=0
if(ucBuffer&0x80)DIPIN = 1;
else DIPIN = 0;
CLKPIN = 1; // SCLK=1
ucBuffer=ucBuffer<<0x1;
}
/* 传送4个"0" */
DIPIN = 0; // SID=0
for(iTemp=0;iTemp<4;iTemp++)
{
CLKPIN = 0; // SCLK=0
CLKPIN = 1; // SCLK=1
}
}
//-----------------------------------------------------
void DisplayInt(unsigned int CounterLeft)
{ // CounterLeft 可做次数
int iTemp;
unsigned char ucLCDBuffer[4];
ucLCDBuffer[3]=CounterLeft%10;
ucLCDBuffer[2]=(CounterLeft%100)/10;
ucLCDBuffer[1]=(CounterLeft/100)%10;
ucLCDBuffer[0]=(CounterLeft/1000)%10;
if((ucLCDBuffer[2] == 0)&&(ucLCDBuffer[1] == 0)&&(ucLCDBuffer[0] == 0)) ucLCDBuffer[2] = 10;
if((ucLCDBuffer[1] == 0)&&(ucLCDBuffer[0] == 0)) ucLCDBuffer[1] = 10;
if(ucLCDBuffer[0] == 0) ucLCDBuffer[0] = 10;
// WriteCom_Dat(0x95,0); // 第2行AC
for(iTemp=0;iTemp<4;iTemp++){WriteCom_Dat(StringDigit[ucLCDBuffer[iTemp]],1);}
}
//-----------------------------------------------------
void Display1Decimal(unsigned int CounterLeft)
{ // CounterLeft 可做次数
int iTemp;
unsigned char ucLCDBuffer[4];
ucLCDBuffer[3]=CounterLeft%10;
ucLCDBuffer[2]=(CounterLeft%100)/10;
ucLCDBuffer[1]=(CounterLeft/100)%10;
ucLCDBuffer[0]=(CounterLeft/1000)%10;
// if((ucLCDBuffer[2] == 0)&&(ucLCDBuffer[1] == 0)&&(ucLCDBuffer[0] == 0)) ucLCDBuffer[2] = 10;
if((ucLCDBuffer[1] == 0)&&(ucLCDBuffer[0] == 0)) ucLCDBuffer[1] = 10;
if(ucLCDBuffer[0] == 0) ucLCDBuffer[0] = 10;
for(iTemp=0;iTemp<3;iTemp++){WriteCom_Dat(StringDigit[ucLCDBuffer[iTemp]],1);}
WriteCom_Dat('.',1); WriteCom_Dat(StringDigit[ucLCDBuffer[3]],1);
}
void DisplayChar(unsigned char CounterLeft)
{ // CounterLeft 可做次数
int iTemp;
unsigned char ucLCDBuffer[2];
unsigned char MaoHao[2]=":";
ucLCDBuffer[1]=(CounterLeft)%10;
ucLCDBuffer[0]=(CounterLeft)/10;
// if(ucLCDBuffer[0] == 0) ucLCDBuffer[0] = 10;
// WriteCom_Dat(0x95,0); // 第2行AC
for(iTemp=0;iTemp<2;iTemp++){WriteCom_Dat(StringDigit[ucLCDBuffer[iTemp]],1);}
// for(iTemp=0;iTemp<2;iTemp++){WriteCom_Dat(MaoHao[iTemp],1);} //":"
}
//*********************************************************************************
void Setup_Expand_Mode()
{
WriteCom_Dat(0x34,0); // 8-bit控制界面,扩充指令集动作, 绘图显示OFF
}
void Gdram_Write_Word(unsigned char Gdram_Cur_X,unsigned char Gdram_Cur_Y,unsigned char High8,unsigned char Low8)
{
Setup_Expand_Mode();
WriteCom_Dat(Gdram_Cur_Y|0x80,0);
WriteCom_Dat(Gdram_Cur_X|0x80,0);
WriteCom_Dat(High8,1);
WriteCom_Dat(Low8,1);
WriteCom_Dat(0x36,0);
}
void Clear_Gdram()
{
unsigned char i,j;
WriteCom_Dat(0x08,0);// 整体显示OFF
Setup_Expand_Mode();
for(j=0;j<32;j++){for(i=0;i<8;i++) Gdram_Write_Word(i,j,0x0,0x0);} // 设定GDRAM位址
for(j=0;j<32;j++){for(i=8;i<16;i++) Gdram_Write_Word(i,j,0x0,0x0);} // 设定GDRAM位址
WriteCom_Dat(0x0C,0);// 整体显示ON
}
void Draw_Rectangle()
{
unsigned char i;
for(i=0;i<8;i++) Gdram_Write_Word(i,0,0xff,0xff); // 设定GDRAM位址
for(i=1;i<32;i++) Gdram_Write_Word(0,i,0x80,0x00); // 设定GDRAM位址
for(i=0;i<31;i++) Gdram_Write_Word(8,i,0x80,0x00); // 设定GDRAM位址
for(i=1;i<32;i++) Gdram_Write_Word(7,i,0x00,0x01); // 设定GDRAM位址
for(i=0;i<31;i++) Gdram_Write_Word(15,i,0x00,0x01); // 设定GDRAM位址
for(i=8;i<16;i++) Gdram_Write_Word(i,31,0xff,0xff); // 设定GDRAM位址
}
void Draw_Half_Rectangle()
{
unsigned char i;
for(i=1;i<32;i++) Gdram_Write_Word(0,i,0x80,0x00); // 设定GDRAM位址
for(i=0;i<31;i++) Gdram_Write_Word(8,i,0x80,0x00); // 设定GDRAM位址
for(i=8;i<16;i++) Gdram_Write_Word(i,31,0xff,0xff); // 设定GDRAM位址
}
void Draw2(unsigned char cur_x,unsigned char cur_y,bit Flag)
{
if(!Flag){Gdram_Write_Word(cur_x,cur_y+0,0x06,0x00);Gdram_Write_Word(cur_x,cur_y+1,0x09,0x00);Gdram_Write_Word(cur_x,cur_y+2,0x02,0x00);
Gdram_Write_Word(cur_x,cur_y+3,0x04,0x00);Gdram_Write_Word(cur_x,cur_y+4,0x0f,0x00);}
else {Gdram_Write_Word(cur_x,cur_y+0,0x80|0x06,0x00);Gdram_Write_Word(cur_x,cur_y+1,0x80|0x09,0x00);Gdram_Write_Word(cur_x,cur_y+2,0x80|0x02,0x00);
Gdram_Write_Word(cur_x,cur_y+3,0x80|0x04,0x00);Gdram_Write_Word(cur_x,cur_y+4,0x80|0x0f,0x00);}
}
void Draw4(unsigned char cur_x,unsigned char cur_y,bit Flag)
{
if(!Flag){Gdram_Write_Word(cur_x,cur_y+0,0x09,0x00);Gdram_Write_Word(cur_x,cur_y+1,0x09,0x00);Gdram_Write_Word(cur_x,cur_y+2,0x0f,0x00);
Gdram_Write_Word(cur_x,cur_y+3,0x09,0x00);Gdram_Write_Word(cur_x,cur_y+4,0x06,0x00);}
else {Gdram_Write_Word(cur_x,cur_y+0,0x80|0x09,0x00);Gdram_Write_Word(cur_x,cur_y+1,0x80|0x09,0x00);Gdram_Write_Word(cur_x,cur_y+2,0x80|0x0f,0x00);
Gdram_Write_Word(cur_x,cur_y+3,0x80|0x01,0x00);Gdram_Write_Word(cur_x,cur_y+4,0x80|0x01,0x00);}
}
void Draw6(unsigned char cur_x,unsigned char cur_y,bit Flag)
{
if(!Flag){Gdram_Write_Word(cur_x,cur_y+0,0x0f,0x00);Gdram_Write_Word(cur_x,cur_y+1,0x08,0x00);Gdram_Write_Word(cur_x,cur_y+2,0x0f,0x00);
Gdram_Write_Word(cur_x,cur_y+3,0x09,0x00);Gdram_Write_Word(cur_x,cur_y+4,0x0f,0x00);}
else {Gdram_Write_Word(cur_x,cur_y+0,0x80|0x0f,0x00);Gdram_Write_Word(cur_x,cur_y+1,0x80|0x08,0x00);Gdram_Write_Word(cur_x,cur_y+2,0x80|0x0f,0x00);
Gdram_Write_Word(cur_x,cur_y+3,0x80|0x09,0x00);Gdram_Write_Word(cur_x,cur_y+4,0x80|0x0f,0x00);}
}
void Draw8(unsigned char cur_x,unsigned char cur_y,bit Flag)
{
if(!Flag){Gdram_Write_Word(cur_x,cur_y+0,0x0f,0x00);Gdram_Write_Word(cur_x,cur_y+1,0x09,0x00);Gdram_Write_Word(cur_x,cur_y+2,0x0f,0x00);
Gdram_Write_Word(cur_x,cur_y+3,0x09,0x00);Gdram_Write_Word(cur_x,cur_y+4,0x0f,0x00);}
else {Gdram_Write_Word(cur_x,cur_y+0,0x80|0x0f,0x00);Gdram_Write_Word(cur_x,cur_y+1,0x80|0x09,0x00);Gdram_Write_Word(cur_x,cur_y+2,0x80|0x0f,0x00);
Gdram_Write_Word(cur_x,cur_y+3,0x80|0x09,0x00);Gdram_Write_Word(cur_x,cur_y+4,0x80|0x0f,0x00);}
}
void Draw0(unsigned char cur_x,unsigned char cur_y,bit Flag)
{
if(!Flag){Gdram_Write_Word(cur_x,cur_y+0,0x0f,0x00);Gdram_Write_Word(cur_x,cur_y+1,0x09,0x00);Gdram_Write_Word(cur_x,cur_y+2,0x09,0x00);
Gdram_Write_Word(cur_x,cur_y+3,0x09,0x00);Gdram_Write_Word(cur_x,cur_y+4,0x0f,0x00);}
else {Gdram_Write_Word(cur_x,cur_y+0,0x80|0x0f,0x00);Gdram_Write_Word(cur_x,cur_y+1,0x80|0x09,0x00);Gdram_Write_Word(cur_x,cur_y+2,0x80|0x09,0x00);
Gdram_Write_Word(cur_x,cur_y+3,0x80|0x09,0x00);Gdram_Write_Word(cur_x,cur_y+4,0x80|0x0f,0x00);}
}
void Draw10(unsigned char cur_x,unsigned char cur_y,bit Flag)
{
if(!Flag){Gdram_Write_Word(cur_x,cur_y+0,0xaf,0x00);Gdram_Write_Word(cur_x,cur_y+1,0xa9,0x00);Gdram_Write_Word(cur_x,cur_y+2,0xa9,0x00);
Gdram_Write_Word(cur_x,cur_y+3,0xa9,0x00);Gdram_Write_Word(cur_x,cur_y+4,0xaf,0x00);}
else {Gdram_Write_Word(cur_x,cur_y+0,0xa0|0x0f,0x00);Gdram_Write_Word(cur_x,cur_y+1,0xa0|0x09,0x00);Gdram_Write_Word(cur_x,cur_y+2,0xa0|0x09,0x00);
Gdram_Write_Word(cur_x,cur_y+3,0xa0|0x09,0x00);Gdram_Write_Word(cur_x,cur_y+4,0xa0|0x0f,0x00);}
}
void Draw12(unsigned char cur_x,unsigned char cur_y,bit Flag)
{
if(!Flag){Gdram_Write_Word(cur_x,cur_y+0,0x26,0x00);Gdram_Write_Word(cur_x,cur_y+1,0x29,0x00);Gdram_Write_Word(cur_x,cur_y+2,0x22,0x00);
Gdram_Write_Word(cur_x,cur_y+3,0x24,0x00);Gdram_Write_Word(cur_x,cur_y+4,0x2f,0x00);}
else {Gdram_Write_Word(cur_x,cur_y+0,0x80|0x26,0x00);Gdram_Write_Word(cur_x,cur_y+1,0x80|0x29,0x00);Gdram_Write_Word(cur_x,cur_y+2,0x80|0x22,0x00);
Gdram_Write_Word(cur_x,cur_y+3,0x80|0x24,0x00);Gdram_Write_Word(cur_x,cur_y+4,0x80|0x2f,0x00);}
}
void Draw14(unsigned char cur_x,unsigned char cur_y,bit Flag)
{
if(!Flag){Gdram_Write_Word(cur_x,cur_y+0,0x29,0x00);Gdram_Write_Word(cur_x,cur_y+1,0x29,0x00);Gdram_Write_Word(cur_x,cur_y+2,0x2f,0x00);
Gdram_Write_Word(cur_x,cur_y+3,0x21,0x00);Gdram_Write_Word(cur_x,cur_y+4,0x21,0x00);}
else {Gdram_Write_Word(cur_x,cur_y+0,0x80|0x29,0x00);Gdram_Write_Word(cur_x,cur_y+1,0x80|0x29,0x00);Gdram_Write_Word(cur_x,cur_y+2,0x80|0x2f,0x00);
Gdram_Write_Word(cur_x,cur_y+3,0x80|0x21,0x00);Gdram_Write_Word(cur_x,cur_y+4,0x80|0x21,0x00);}
}
void Draw16(unsigned char cur_x,unsigned char cur_y,bit Flag)
{
if(!Flag){Gdram_Write_Word(cur_x,cur_y+0,0x2f,0x00);Gdram_Write_Word(cur_x,cur_y+1,0x28,0x00);Gdram_Write_Word(cur_x,cur_y+2,0x2f,0x00);
Gdram_Write_Word(cur_x,cur_y+3,0x29,0x00);Gdram_Write_Word(cur_x,cur_y+4,0x2f,0x00);}
else {Gdram_Write_Word(cur_x,cur_y+0,0x80|0x2f,0x00);Gdram_Write_Word(cur_x,cur_y+1,0x80|0x28,0x00);Gdram_Write_Word(cur_x,cur_y+2,0x80|0x2f,0x00);
Gdram_Write_Word(cur_x,cur_y+3,0x80|0x29,0x00);Gdram_Write_Word(cur_x,cur_y+4,0x80|0x2f,0x00);}
}
//*********************************************************************************
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -