⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lcd1.c

📁 教你基础的lcd显示屏应用方法
💻 C
字号:
#include <reg51.h>
#include <intrins.h>       //内部函数,包含_nop_()空函数指令
#define	uchar unsigned char
#define uint unsigned int
sbit	RS	= P2^5;       // 定义LCD模块控制引脚
sbit	RW	= P2^6;
sbit	E = P2^7;
#define DataPort P0	     //定义LCD模块数据端口
#define Busy	0x80     //忙标志,D7位为1说明忙
uchar Xpos;		//列方向地址指针
uchar Ypos;		//行方向地址指针

//以下是短延时函数
void Delay5Ms(void) {
	uint i = 5552;
	while(i--);
}
//以下是读忙状态函数
// 功能:在正常读写操作之前检测LCD模块的忙状态, 
//D7 = 0:LCD控制器空闲;D7 = 1:LCD控制器忙
void CheckBusy( void ) 
{ 
	DataPort = 0xff;           //P1口写1
	RS=0;                     //选择指令寄存器
RW=1;                    //选择读模式
_nop_();                   
E=1;                     //使能LCD
_nop_();
_nop_();
	while( DataPort & Busy );//若D7=1,则DataPort&Busy=1,说明忙,等待
	E=0;                   //若D7=0,说明不忙,令E=0
}	
//以下是写入IR寄存器命令函数
//功能:向LCD模块写入命令字符CMD
//若 AttribC = 1 检测忙信号,若 AttribC = 0 不检测忙信号
void WriteIR(uchar CMD,uchar AttribC)
 {
	if (AttribC) CheckBusy();//若AttribC =1,则检测忙信号,否则,顺序执行
	RS = 0;                  //选择指令寄存器
	RW = 0;                  //选择写模式
 _nop_();
	DataPort = CMD;          //将命令送数据端口
_nop_();
	E = 1;                   //使能LCD
_nop_();
_nop_();
E = 0;                  //禁止LCD
}
//以下是写入DDR寄存器函数
//功能:在当前光标位置显示一个字符
void WriteDDR( char c )
 {
	CheckBusy();				//检测忙信号
	RS = 1;                     //选择数据寄存器
RW = 0;                     //选择写模式
_nop_();
    DataPort = c;           // 将显示字符送往数据口
_nop_();
	E = 1;                       //写使能
_nop_();
_nop_();
E = 0;	                    //禁止LCD
}
//以下是光标定位函数
void LcdPos(uchar Xpos,uchar Ypos)
{
uchar tmp;    //定义tmp为指令码
	Xpos&=0x0f;	//16xx型液晶的范围是0~15
	Ypos&=0x01;	//Y的范围是0~1
	tmp=Xpos;
	if(Ypos==1)           
	tmp|=0xc0;           //若Ypos为1(显示第2行),地址码+0xc0
	tmp|=0x80;          //若Ypos为0(显示第1行),地址码+0x80
	WriteIR (tmp,0);
}
//以下是初始化函数
//功能:向LCD模块写入不同命令,完成必要的初始化过程
void LcdReset( void ) 
{
   	WriteIR( 0x38, 0);  //功能设置指令,8位接口,显示2行,5×7字符
	WriteIR( 0x38, 1);	//设置显示模式(以后均检测忙信号)
    WriteIR( 0x08, 1);	//显示开关控制指令,显示关闭
   	WriteIR( 0x01, 1);	//清屏指令,将DDRAM数据全部填入"空白"
	WriteIR( 0x06, 1);	//输入方式设置指令,字符不动,光标自动右移一格
	WriteIR( 0x0f, 1);	//显示开关控制指令,显示器开,光标开,光标闪烁
}
//以下是在指定行列显示字符函数
void WriteChar(uchar Xpos,uchar Ypos,char c)
{
	   LcdPos(Xpos,Ypos);
	  WriteDDR(c);
}
//以下是主函数
void main(void)
{
LcdReset();          // LCD模块初始化
  Delay5Ms();          //延是等待复位
WriteChar(0,1,'A');        //Xpos=0(第1列),Ypos=1(第2行),显示字符A
for(;;)
{;}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -