📄 lcd.c
字号:
//-----------------------------------------------------
// copyright by wangmeng 2005.8.22
//-----------------------------------------------------
#include"reg51.h"
sbit di=P3^5; //RS 1数据/0命令选择端
sbit rw=P3^4; //WR 1读/0写选择端
sbit en=P3^3; //E
#define LCMPORT P1 //数据端口
//------------------------------------------------------
//函数:void checkstate(void)
//功能:检测液晶是否处于忙状态
//------------------------------------------------------
void checkstate(void)
{
unsigned char dat;
di=0;
rw=1;
do
{
en=1; dat=LCMPORT; en=0;
dat=0x80 & dat; //仅当第7位为0时才可操作
}while(!(dat==0x00));
}
//-----------------------------------------------------
//函数:void sendcmd(unsigned char command)
//功能:送命令码到液晶
//参数:把命令字传送到液晶中
//-----------------------------------------------------
void sendcmd(unsigned char command)
{
checkstate();
rw=0;di=0;
en=1;
LCMPORT=command;
en=0;
}
//------------------------------------------------------
//函数:void senddata(unsigned char dat)
//功能:送数据到液晶
//参数:把命数据传送到液晶中
//------------------------------------------------------
void senddata(unsigned char dat)
{
checkstate();
rw=0;di=1;
en=1;
LCMPORT=dat;
en=0;
}
//------------------------------------------------------
//函数:void Write_char(unsigned char hanzi)
//功能:将要显示的汉字输入液晶
//参数:向液晶里写入汉字
//------------------------------------------------------
void Write_char(unsigned char hanzi)
{
senddata(hanzi);
}
void Write_str(char *str)
{
char *s;
for(s=str;*s!=0x00;s++)
Write_char(*s);
}
//------------------------------------------------------
//函数:void Lcd_init(void)
//功能:初始化LCM
//------------------------------------------------------
void Lcd_init(void)
{
sendcmd(0x30);//命令格式详见函数SetShowMode()
sendcmd(0x0d);//指令码00001DCB
//D控制整体显示的开关1为开显示0为关显示;
//C控制光标的开与关1为有光标0为无光标;
//B控制光标是否闪烁1为闪烁0不闪烁。
sendcmd(0x01);//清除显示内容
}
//----------------------------------------------------------
//函数:void Scr_clr(void)
//功能:清显示屏幕
//----------------------------------------------------------
void Scr_clr(void)
{
sendcmd(0x01);
}
//-----------------------------------------------------------
//函数:void Set_addr(unsigned char line,unsigned char colum)
//功能:在指定地址写入汉字
//参数:line写入的行,colum写入的列
//-----------------------------------------------------------
void Set_addr(unsigned char line,unsigned char colum)
{
unsigned char addr;
switch(line)
{
case 1:
addr=0x00+(colum-1);break;
case 2:
addr=0x10+(colum-1);break;
case 3:
addr=0x08+(colum-1);break;
case 4:
addr=0x18+(colum-1);break;
default:
break;
}
addr=addr|0x80; //命令码为10xxxxxx
sendcmd(addr);
sendcmd(0x0c); //关闭光标
}
//---------------------------------------------------------
//函数原型;void ClearGrap(void)
//函数功能;清除绘图显示RAM
//函数参数;无
//---------------------------------------------------------
void Clr_grap(void)
{
unsigned char x,y;
sendcmd(0x34); //扩展功能设定
for(x=0;x<16;x++)
{
for(y=0;y<32;y++)
{
sendcmd(0x80+y); //先送y的坐标
sendcmd(0x80+x); //再送x的坐标
senddata(0x00);senddata(0x00);
}
}
sendcmd(0x30); //基本功能设定
}
//---------------------------------------------------------------
//函数:void DrawGrap(uchar x,uchar y,uchar hdata,uchar ldata)
//功能:在用户定义的坐标位置画长度为16的点
//参数:x,y为坐标;ldata,hdata为要写的数据
//---------------------------------------------------------------
void Draw_grap(unsigned char x,unsigned char y,unsigned char ldata,unsigned char hdata)
{
sendcmd(0x34); //扩展功能设定
sendcmd(0x80+y);
sendcmd(0x80+x);
senddata(ldata);senddata(hdata);
sendcmd(0x30); //基本功能设定
}
void Open_grap(void)
{
sendcmd(0x36); //打开绘图RAM
}
//---------------------------------------------------------
//函数:void Open_cur(void)
//功能:打开光标
//---------------------------------------------------------
void Open_cur(void)
{
sendcmd(0x0d);
}
//---------------------------------------------------------
//函数:void Close_cur(void)
//功能:关闭光标
//---------------------------------------------------------
void Close_cur(void)
{
sendcmd(0x0c);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -