📄 lcd_12864.h
字号:
/*****************************************
程序名:lcd_12864.h
设计者:wanggguangxi11@163.com
时 间:2007-12-12
功 能:12864汉字液晶显示驱动程序(不带字库)
******************************************/
#define uchar unsigned char
#define uint unsigned int
#include <reg52.h>
//软件复位程序
void IntRst(void)
{
RST=0;
_nop_();
_nop_();
RST=1; //软件复位
}
//忙判别
void Busy(void)
{
DI=0;RW=1;P0=0xff;
while(1)
{
ALE=1;
if(P0<0x80)break;
ALE=0;
}
ALE=0;
}
//12864发送命令子程序
void ComSend(uchar com)
{
Busy();
RW=0;
DI=0;
P0=com;
ALE=1;
_nop_(); //NOP
ALE=0;
}
//12864发送数据子程序
void DaSend(uchar data1)
{
DI=1;
RW=0;
P0=data1;
ALE=1;
_nop_(); //NOP
ALE=0;
}
//左半屏写命令子程序
void Left_ComSend(uchar com)
{
CS2=1;CS1=0;
ComSend(com);
CS1=0;
}
//左半屏写数据子程序
void Left_DaSend(uchar data2)
{
CS2=1;CS1=0;
DaSend(data2);
CS1=0;
}
//右半屏写命令子程序
void Right_ComSend(uchar com)
{
CS1=1;CS2=0;
ComSend(com);
CS2=0;
}
//右半屏写数据子程序
void Right_DaSend(uchar data3)
{
CS1=1;CS2=0;
DaSend(data3);
CS2=0;
}
//左半屏写一个字节数据程序,
//入口参数为X,Y的起始地址
//以及Y的变址范围(写入的字节数)和写入数据的指针
void Left_Bytes_DaSend(uchar x,uchar y,uchar *loc,uchar bytes)
{ uchar i;
Left_ComSend(x|0xB8); //填入特征位0xB8,定位X即行
Left_ComSend(y|0x40); //填入特征位0x40 ,定位Y即列
for(i=0;i<bytes;i++)
Left_DaSend(*(loc+i));
}
//右半屏写一个字节数据程序,
//入口参数为X,Y的起始地址
//以及Y的变址范围(写入的字节数)和写入数据的指针
void Right_Bytes_DaSend(uchar x,uchar y,uchar *loc,uchar bytes)
{ uchar i;
Right_ComSend(x|0xB8); //填入特征位0xB8 ,定位X即行
Right_ComSend(y|0x40); //填入特征位0x40, 定位Y即列
for(i=0;i<bytes;i++)
Right_DaSend(*(loc+i));
}
//开LCD
void Lcd_On(void)
{
Left_ComSend(0x3F);
Right_ComSend(0x3F);
}
//关LCD
void Lcd_Off(void)
{
Left_ComSend(0x3e);
Right_ComSend(0x3e);
}
//设置Z地址
void Lcd_SetZ(uchar z)
{
z=z*8;
Left_ComSend(z|0xc0);
Right_ComSend(z|0xc0);
}
//右边显示汉字数组内元素的子程序
void Right_Show_Word(uchar x,uchar y,uchar word_num)
{
uchar *pointer;
pointer=(words+word_num*32);
// y=y*16;
Right_Bytes_DaSend(x,y,pointer,16); //先写汉字上半部分
Right_Bytes_DaSend(x+1,y,pointer+16,16); //后写汉字下半部分
}
//右边显示一个16*8的字符
void Right_Show_letter(uchar x,uchar y,uchar letter_num)
{
uchar *pointer;
pointer=(letter+letter_num*16); //y=y*16;
Right_Bytes_DaSend(x,y,pointer,8); //先写字符上半部分
Right_Bytes_DaSend(x+1,y,pointer+8,8); //后写字符下半部分
}
//左边显示汉字数组内元素的子程序
void Left_Show_Word(uchar x,uchar y,uchar word_num)
{
uchar *pointer;
pointer=(words+word_num*32); //y=y*16;
Left_Bytes_DaSend(x ,y,pointer,16); //先写汉字上半部分
Left_Bytes_DaSend(x+1,y,pointer+16,16); //后写汉字下半部分
}
//左边显示一个16*8的字符
void Left_Show_letter(uchar x,uchar y,uchar letter_num)
{
uchar *pointer;
pointer=(letter+letter_num*16); //y=y*16;
Left_Bytes_DaSend(x,y,pointer,8);
Left_Bytes_DaSend(x+1,y,pointer+8,8);
}
//左边显示空字符
void Left_Show_Null(uchar x,uchar y)
{
uchar *pointer;
pointer=nulls;
Left_Bytes_DaSend(x ,y,pointer ,16);
Left_Bytes_DaSend(x+1,y,pointer+16,16);
}
//右边显示空字符
void Right_Show_Null(uchar x,uchar y)
{
uchar *pointer;
pointer=nulls;
Right_Bytes_DaSend(x ,y,pointer ,16);
Right_Bytes_DaSend(x+1 ,y,pointer+16,16);
}
//清屏
void Show_Null(void)
{
uchar i,j,x,y;
for(i=0;i<4;i++)
{for(j=0;j<4;j++)
{
x=i*2;y=j*16;
Right_Show_Null(x,y);
Left_Show_Null(x,y);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -