📄 lcd12864.h
字号:
#ifndef _LCD12864_H_
#define _LCD12864_H_
//写汉字液晶,液晶屏为128*64,4行*8列汉字
/*
D7 D6 D5 D4 D3 D2 D1 D0
0 0 0 1 1 1 1 D *D=1时显示开,D=0时显示关
1 1 A A A A A A *设定显示开始行寄存器位置
1 0 1 1 1 A A A *设定页地址
0 1 A A A A A A *设定列地址
D7 0 D5 D4 0 0 0 0 *D7=1表示LCD忙,D7=0可以读写操作,D5=1显示关状态,
*D5=0显示开状态,D4=1表示正在初始化,D4=0初始化完毕
*/
/************常用操作命令和参数定义********/
#define DISPON 0x3f //display on
#define DISPOFF 0x3e //display off
#define DISPFIRST 0xc0 //define the first row
#define SETY 0xb8 //define page address
#define SETX 0x40 //define column address
#define SIZE 0x500
//定义行起始间距
#define Line0 9
#define Line1 6
#define Line2 1
#define Line3 1
/*以下定义与硬件电路设计有关*/
//RS-----------P2.0
//R/W----------P2.1
//CS1----------P2.2
//CS2----------P2.3
uchar xdata LLCD_CMD_WR _at_ 0xf4ea;
uchar xdata LLCD_CMD_RD _at_ 0xf6ea;
uchar xdata LLCD_DATA_WR _at_ 0xf5ea;
uchar xdata LLCD_DATA_RD _at_ 0xf7ea;
uchar xdata RLCD_CMD_WR _at_ 0xf8ea;
uchar xdata RLCD_CMD_RD _at_ 0xfaea;
uchar xdata RLCD_DATA_WR _at_ 0xf9ea;
uchar xdata RLCD_DATA_RD _at_ 0xfbea;
/************sub function******************/
void lcd_init(void);
void Delay(uchar);
void lcd_cmd_wr(uchar,uchar);
void lcd_data_wr(uchar,uchar);
void lcd_busy(uchar);
void chk_busy(uchar);
void lcd_hanzi_wr(uchar,uchar,uchar *);
void lcd_str_wr(uchar,uchar,uchar,uchar *);
void lcd_bmp_wr(uchar,uchar,uchar,uchar,uchar *);
void lcd_clr(void);
void lcd_rol();
void lcd_dzheng_wr(uchar,uchar,uchar,uchar *);
void lcd_hanzi_wr(uchar,uchar,uchar *);
void lcd_asci_wr(uchar,uchar,uchar);
void lcd_cmd_wr(uchar cmdcode,uchar right)
{
chk_busy(right);
if(right) RLCD_CMD_WR = cmdcode;
else LLCD_CMD_WR = cmdcode;
}
void lcd_data_wr(uchar ldata,uchar right)
{
chk_busy(right);
if(right) RLCD_DATA_WR = ldata;
else LLCD_DATA_WR = ldata;
}
void chk_busy(uchar right)
{
uchar tmp;
do
{
if(right) tmp=RLCD_CMD_RD;
else tmp=LLCD_CMD_RD;
// tmp = 0x10; //只在仿真时使用
}
while ((tmp|0x7f)==0xff);
}
void Delay(uchar ms)
{
uchar us,usn;
while(ms!=0)
{
usn = 100;
while(usn!=0)
{
us = 0xf0;
while(us!=0) us--;
usn--;
}
ms--;
}
}
void lcd_init(void)
{
lcd_cmd_wr(DISPON,0);
lcd_cmd_wr(DISPFIRST,0);
lcd_cmd_wr(SETY,0);
lcd_cmd_wr(SETX,0);
lcd_cmd_wr(DISPON,1);
lcd_cmd_wr(DISPFIRST,1);
lcd_cmd_wr(SETY,1);
lcd_cmd_wr(SETX,1);
}
/*清屏函数*/
void lcd_clr(void)
{
uchar i,j;
for(i=0;i<8;i++)
{
lcd_cmd_wr(SETY+i,0);
lcd_cmd_wr(SETX,0);
lcd_cmd_wr(SETY+i,1);
lcd_cmd_wr(SETX,1);
for(j=0;j<64;j++)
{
lcd_data_wr(0,0);
lcd_data_wr(0,1);
}
}
}
/*/图片写入函数
void lcd_bmp_wr(uchar posx,uchar posy,uchar width,uchar high,uchar *bmp)
{
uchar i,j;
high = high/8;
for(i=0;i<high;i++)
{
lcd_cmd_wr(SETY+posy+i,0);
lcd_cmd_wr(SETX+posx,0);
for(j=0;j<width-64;j++)
{
lcd_data_wr(bmp[128*i+j],0);
}
lcd_cmd_wr(SETY+posy+i,1);
lcd_cmd_wr(SETX+posx,1);
for(j=64;j<width;j++)
{
lcd_data_wr(bmp[128*i+j],1);
}
}
}
*/
/*滚屏函数
void lcd_rol()
{
uchar i;
for(i=0;i<64;i++)
{
lcd_cmd_wr(DISPFIRST+i,0);
lcd_cmd_wr(DISPFIRST+i,1);
Delay(300);
}
}
*/
//在指定位置写入点阵数据,要求指定点阵数
void lcd_dzheng_wr(uchar posx,uchar dx,uchar posy,uchar *pRam)
{
uchar i;
lcd_cmd_wr(SETY+posy,0);
lcd_cmd_wr(SETY+posy,1);
for(i=0;i<dx;i++)
{
if (posx+i<64)
{
lcd_cmd_wr(SETX+posx+i,0);
lcd_data_wr(pRam[i],0);
}
else
{
lcd_cmd_wr(SETX+posx+i-64,1);
lcd_data_wr(pRam[i],1);
}
}
}
//16x16点阵汉字写入
void lcd_hanzi_wr(uchar posx,uchar posy,uchar *hanzi)
{
lcd_dzheng_wr(posx,16,posy,hanzi);
lcd_dzheng_wr(posx,16,posy+1,hanzi+16);
}
//16x8ASCI字符写入
void lcd_asci_wr(uchar posx,uchar posy,uchar number)
{
lcd_dzheng_wr(posx,8,posy,Num+number*16);
lcd_dzheng_wr(posx,8,posy+1,Num+8+number*16);
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -