📄 lcd12864.h
字号:
//液晶宏定义
#define Disp_On 0x3f // 显示开指令 00111111//
#define Disp_Off 0x3e // 显示关指令 00111110//
#define Col_Add 0x40 // 定位到第0列指令 01000000//
#define Page_Add 0xb8 // 定位到第0页指令 10111000//
#define Start_Line 0xc0 // 定位从DDROM中的第0行开始往屏幕上显示 11000000//
//液晶引脚定义
//sbit RST = P2^2; // 复位端 //
sbit E = P2^7; // 使能端 //
sbit RW = P2^5; // 读写控制端 //
sbit RS = P2^3; // 数据或指令寄存器选择端 //
sbit CS1 = P2^6; // 左屏使能 低电平选择前面64列//
sbit CS2 = P2^4; // 右屏使能 //
/* 延时t毫秒 */
void delay(unsigned int t)
{
unsigned i;
while(t--)
{
/* 对于11.0592M时钟,约延时1ms */
for (i=0;i<125;i++)
{}
}
}
/*-------------------------写命令到LCD------------------------------*/
//相当于初始化,即从哪行哪列开始显示
void write_command(unsigned char cmdcode)
{
RS = 0; //DI(RS) 为低电平时数据 D0~D7 将送入寄存器执行
RW = 0; //读写选择,高电平(读),低电平(写)
P0 = cmdcode;
delay(0);
E = 1; //E高电平有效,下降沿锁定数据
delay(0);
E = 0;
}
/*-------------------------写数据到LCD----------------------------*/
void write_data(unsigned char Dispdata)
{
RS = 1; //DI(RS) 为高电平时数据 D0~D7 将送入显示 RAM
RW = 0;
P0 = Dispdata;
delay(0);
E = 1;
delay(0);
E = 0;
}
/*------------------------清显示屏--------------------------------*/
void Clr_Scr(void)
{
unsigned char j,k;
CS2=1;CS1=0; // 清左半屏 //
write_command(Page_Add+0);
write_command(Col_Add+0);
for(k=0;k<8;k++) // 清左上半屏 //
{
write_command(Page_Add+k);
for(j=0;j<64;j++)
write_data(0x00);
}
CS2=0;CS1=1; // 清右半屏 //
write_command(Page_Add+0);
write_command(Col_Add+0);
for(k=0;k<8;k++) // 清右上半屏 //
{
write_command(Page_Add+k);
for(j=0;j<64;j++)
write_data(0x00);
}
}
/*---------------------指定位置显示字母 8 * 8-----------------------*/
void zf_disp8(unsigned char pag,unsigned char col, unsigned char code *zk)
{
unsigned char j=0,i=0;
if(col<128)
{
if((col&0x40) == 0) //判断cor是否大于64
{
CS2=1;CS1=0; //小于64写左边部分
for(j=0;j<1;j++)
{
write_command(Page_Add+pag+j);
write_command(Col_Add+col);
for(i=0;i<8;i++)
write_data(zk[8*j+i]);
}
}
else
{
CS2=0;CS1=1; //大于64写右边部分
for(j=0;j<1;j++)
{
write_command(Page_Add+pag+j);
write_command(Col_Add+(col%64));
for(i=0;i<8;i++)
write_data(zk[8*j+i]);
}
}
}
}
/*------------------显示12864图片---------------------------*/
void Disp_Img(unsigned char code *img)
{
unsigned char j,k;
for(k=0;k<8;k++)
{
CS2=1;
CS1=0;
delay(10);
write_command(Page_Add+k); //选择页 页++ 64行分成了8页
write_command(Col_Add+0); //从第0列开始
for(j=0;j<64;j++) //左半边 64 列
write_data(img[k*128+j]); // 左半边 k 页每行的数 为什么是 K*128,k*16就行了啊?因为每一页有8行 8*16=128; write_data(img[k*16*8+j])
CS2=0;
CS1=1;
delay(10);
write_command(Page_Add+k); //选择页
write_command(Col_Add+0); //从第0列开始
for(j=64;j<128;j++) //右半边 64 列
write_data(img[k*128+j]); // 右半边 k 页每行的数
}
}
/*------------------初始化LCD屏--------------------------*/
void init_lcd()
{
//RST=0;
//delay(100);
//RST=1;
delay(100);
CS2=1;
CS1=1;
delay(100);
write_command(Disp_Off); //P0=00111110 关显示
write_command(Page_Add+0); //P0=10111000 设置初始页地址 000 :有8页
write_command(Start_Line+0); //P0=11000000 设置显示起始行 00000 :有64行
write_command(Col_Add+0); //P0=01000000 设置显示起始列 00000 :有64列
write_command(Disp_On); //P0=00111111 开显示
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -