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

📄 sub.h

📁 LCD显示 在液晶屏上显示文字 51单片机应用
💻 H
字号:
/*延时子程序*/
/*****************************/
/*函数原型:void delay(uint v)
/*参数:v
/*功能:延时
/*说明:delay(1)相当于延时10微秒
/********************************/
void delay(uint v)		//定义名为delay的函数,将形参v定义为无符号整型变量
	{
	while(v!=0)v--;		//当v不为0时v自减,为0时跳出循环,目的为指令延时
	}

/*延时5秒子程序*/
/************************/
/*函数原型:void delay5()
/*参数:
/*功能:延时5秒
/*说明:调用一次该程序大约延时5秒
/*********************************/
void delay5()			//定义名为delay5的函数,无形参
	{
	uint i;			//定义无符号数i,以作计算调用延时子程序次数用
	for(i=0;i<10;i++)	//给i赋初值0,每次执行完循环体后自动加1,直至i=10,共循环10次
		{
		delay(50000);	//调用延时子程序,每次延时约0.5秒
		}
	}

/*复位子程序*/
/***********************/
/*函数原型:void reset()
/*参数:
/*功能:复位
/*说明:向LCM的RST引脚置低电平,使LCM复位,延时后恢复高电平,使LCM正常工作
/**************************************************************************/
void reset()		//定义名为reset的函数,无形参
	{
 	P32=0;		//对LCD的RST引脚置低电平
	delay(20);	//延时约200微秒
 	P32=1;		//对LCD的RST引脚置高电平
 	delay(20);	//延时约200微秒
	}

/*写代码子程序*/
/**************************************************/
/*函数原型:void wcode(uchar c,uchar cs1,uchar cs2)
/*参数:c,cs1,cs2
/*功能:写指令代码
/*说明:D/I和R/W都为0时为写程序代码指令,c为要发送的指令,cs1、cs2分别为选择左右半屏,置1为选中,置0为不选。
/********************************************/
void wcode(uchar c,uchar cs1,uchar cs2)	//定义名为wcode的函数,并将形参c、cs1、cs2定义为无符号字符型变量
	{
 	P34=cs1;	//是否选中左半屏
 	P33=cs2;	//是否选中右半屏
 	P37=0;		//LCM的D/I置0,选择指令寄存器
 	P36=0;		//LCM的R/W置0,选择写操作
 	P1=c;		//将要写入LCM的指令代码送P1
 	P35=0;		//使能位置0
 	delay(10);	//延时约100微秒
 	P35=1;		//使能位置1
 	delay(10);	//延时约100微秒
 	P35=0;		//使能位由1到0向下跳变,指令代码有效传送
	}

/*写数据子程序*/
/*************************************/
/*函数原型:void wdata(uchar c,uchar cs1,uchar cs2)
/*参数:c,cs1,cs2
/*功能:写显示数据
/*说明:D/I为1、R/W为0时,c为要发送到RAM中的显示数据,cs1、cs2分别为选择左右半屏,置1为选中,置0为不选。
/*************************************/
void wdata(uchar c,uchar cs1,uchar cs2)	//定义名为wdata的函数,并将形参c,cs1,cs2定义为无符号字符型变量
	{
 	P34=cs1;	//是否选中左半屏
 	P33=cs2;	//是否选中右半屏
 	P37=1;		//LCM的D/I置1,选择显示资料寄存器
 	P36=0;		//LCM的R/W置0,选择写操作
 	P1=c;		//将要写入LCM的显示资料送P1
 	P35=0;		//使能位置0
 	delay(10);	//延时约100微秒
 	P35=1;		//使能位置1
 	delay(10);	//延时约100微秒
 	P35=0;		//使能位由1到0向下跳变,显示数据有效传送
	}

/*设置显示开始行子程序*/
/********************/
/*函数原型:void set_startline(uchar i)	
/*参数:c,cs1,cs2
/*功能:设置显示开始行
/*说明:设置显示开始行为第i行,i为小于64的正整数
/*************************/
void set_startline(uchar i)	//定义名为set_startline的函数,并将形参i定义为无符号字符型变量
	{
	i=0xc0+i;		//设定显示起始行的指令代码
 	wcode(i,1,1);		//将显示起始行指令写入LCM的左右半屏
	}
 
/*设置显示具体位置子程序*/
/**********************************/
/*函数原型:void set_adr(uchar x,uchar y)	
/*参数:x,y
/*功能:设置读/写显示数据的具体位置
/*说明:设置读/写显示数据的具体位置为第X页的第Y列
/**********************************/
void set_adr(uchar x,uchar y)	//定义名为set_ adr的函数,并将形参x、y定义为无符号字符型变量
	{
 	x=x+0xb8;y=y+0x40;	//设置第X页和第Y列的指令代码
 	wcode(x,1,1);		//将页地址写入LCM的左右半屏
 	wcode(y,1,1);		//将列地址写入LCM的左右半屏
	}

/*显示开关子程序*/
/*****************************/
/*函数原型:dison_off(uchar o)
/*参数:o
/*功能:显示开关
/*说明:当o为0时为关显示,当o为1时为开显示
/*****************************/
void dison_off(uchar o)		//定义名为dison_off的函数,并将形参o定义为无符号字符型变量
	{
	o=o+0x3e;		//设定显示开关的指令代码
	wcode(o,1,1);		//将显示开关指令写入LCM的左右半屏
	}

/*清屏子程序*/
/*************************************/
/*函数原型:void clr(uchar cs1,uchar cs2)
/*参数:cs1,cs2
/*功能:清除被选中半屏的显示数据
/*说明:向被选中半屏的RAM中填0x00,cs1、cs2分别为选择左右半屏,置1为选中,置0为不选。
/*************************************/
void clr(uchar cs1,uchar cs2)	//定义名为clr的函数,并将形参cs1、cs2定义为无符号字符型变量
	{
	uchar i,j;		//定义无符号数i、j,以作计算页数和列数之用
	for(i=0;i<8;i++)	//给i赋初值0,从第0页开始,执行完循环体后,i自动加1,直至i=8,共循环8次
	{
		set_adr(i,0);	//设置写入数据起始地址为第i页的第0列
		for(j=0;j<64;j++)	//给j赋初值0,计算循环的列数,执行完循环体后,j自动加1,直至j=64,共循环64次
		{
			wdata(0,cs1,cs2);//将被选中半屏的RAM内单元逐个清零
		}
	}
}


/*写字子程序*/
/***************************************************/
/*函数原型:void wword(uchar cs1,uchar cs2,uchar x,uchar y,uchar w,uchar h,uchar word[10])
/*参数:cs1,cs2,x,y,w,h,word[10]
/*功能:只需指定需要显示字符/图形的左上方起始单元地址以及该字符/图形的宽和高,即能显示出该字符
/*说明:以设定的具体位置为起始地址,在选中的半屏内,从左至右,从上至下地显示一个宽为w列,纵向跨度为h页的字符或图形word 
/****************************************************/
void wword(uchar cs1,uchar cs2,uchar x,uchar y,uchar w,uchar h,uchar word[10])	//定义名为clr的函数,并将形参cs1、cs2、x、y、w、h、woed定义无符号字符型变量/数组
	{
	uint i;			//定义i为无符号整型变量
	uchar l;		//定义l为无符号字符型变量
    for(l=0;l<h;l++)		//给l赋初值0,用于计算正在输入字符或图形的页数
		{
		set_adr(x+l,y);	//设定当前写数据的地址为第x+l页的第y列
		for(i=l*w;i<(l+1)*w;i++)	//从l*w开始,对LCM连续写w个开始显示数据
			{
			wdata(word[i],cs1,cs2);	//把word[i]写到指定的半屏的设定位置上
			}
		}
	}

/*拉幕式清屏*/
/***********************************/
/*函数原型:void clre()
/*参数:
/*功能:以拉幕形式从屏幕两边逐渐清屏
/*说明: 
/**********************************/
void clre()				//定义名为clre的函数,无形参
	{
	uchar i,j;			//定义i、j为无符号字符型变量
	for(i=0;i<64;i++)		//给i赋初值0,共循环64次,用于设置列地址
		{
		for(j=0;j<8;j++)	//给j赋初值0,共循环8次,用于设置页地址
			{
			set_adr(j,i);	//设置写显示数据地址为第j页,第i列
			wdata(0,1,0);	//对左半屏的指定单元清零
			set_adr(j,63-i); //设置写显示数据地址为第j页,第63-i列
			wdata(0,0,1);	//对右半屏的指定单元清零
			}
		delay(1000);		//延时10毫秒
		}
	}

⌨️ 快捷键说明

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