壹拾陆:LCD1602的显示

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_17017545/article/details/81516903

#操作方法

**原理图**

代码

****************************************************************** 	
*   【课程17】 ****LCD1602的实验***********
*   【说  明】 ****	
*   【描  述】 ****在LCD1602上显示字符
******************************************************************  
---------------------------------------------------------

基本操作:
	读状态: RS=0,RW=1,EN=1
					输出:D0~D7=状态字;
	写指令: RS=0,RW=0,EN=下降沿脉冲
						D0~D7=指令码;
	读数据: RS=1,RW=1,EN=1
					输出:	D0~D7=数据;
	写数据: RS=1,RW=1,EN=下降沿脉冲
						D0~D7=数据;	
*********************************************************/

#include<reg51.h>		//51头文件,

//---------常用的两个宏定义-------------- 
#define uint8	unsigned char
#define uint16  unsigned int
//--------1602的控制引脚定义-------------
sbit RS = P2^5;
sbit RW = P2^6;
sbit EN = P2^7;

//----------显示的数据------------
uint8 Data1[7]="welcom!";
uint8 Data2[13]="www.yxarm.net";

//-----------函数的声明------------------
void DelayMS(uint16 dly);

//----------液晶模块的声明---------------
bit BUSY(void);
void Write_cmd(uint8 cmd);
void Write_dat(uint8 dat);
void LCD_Init(void);

//---------Main Task---------------------
void main(void)
{
	uint8 i;
	LCD_Init();	
	while(1)
	{
		Write_cmd(0x85);			//第一行
		for(i=0;i<7;i++)
			Write_dat(Data1[i]);
		Write_cmd(0xc2);			//第二行
		for(i=0;i<13;i++)
			Write_dat(Data2[i]);								
	}	
}

/********************************************************
** 名称 :void DelayMS(uint16 dly)
** 功能 :毫秒级延时(12M的晶振)
** 入口参数 :dly  用户的延时参数   
** 出口参数 :无   
*********************************************************/
void DelayMS(uint16 dly)
{
	uint16 x,y;
	for(x=dly;x>0;x--)
		for(y=124;y>0;y--);
}
/********************************************************
** 名称 :bit BUSY(void)
** 功能 :检测LCD1602是否处于忙状态;
** 入口参数 :无   
** 出口参数 :bit Bit
						返回1,则BUSY
						返回0,则OK   
*********************************************************/
bit BUSY(void)
{
	bit Bit;
	RS = 0;
	RW = 1;
	EN = 1;
	DelayMS(1);
	Bit = (bit)(P0 & 0x80);	//最高位为忙信号位	
	EN = 0;
	return Bit;				
}

/********************************************************
** 名称 :void Write_cmd(uint8 cmd)
** 功能 :写命令
** 入口参数 :cmd  控制命令   
** 出口参数 :无   
*********************************************************/
void Write_cmd(uint8 cmd)
{
	while(BUSY());			//测忙
	RS = 0;
	RW = 0;
	EN = 0;	
	P0 = cmd;
	EN = 1;
	DelayMS(1);
	EN = 0;			
}

/********************************************************
** 名称 :void Write_dat(uint8 dat)
** 功能 :写数据
** 入口参数 :dat  要显示的数据  
** 出口参数 :无   
*********************************************************/
void Write_dat(uint8 dat)
{
	while(BUSY());			//测忙
	RS = 1;
	RW = 0;
	EN = 0;	
	P0 = dat;
	EN = 1;
	DelayMS(1);
	EN = 0;			
}
/********************************************************
** 名称 :void LCD_Init(void)
** 功能 :液晶的初始化
** 入口参数 :无 
** 出口参数 :无   
*********************************************************/
void LCD_Init(void)
{
	Write_cmd(0x38);			//功能设置
	DelayMS(1);
	Write_cmd(0x0c);			//显示开关控制
	DelayMS(1);
	Write_cmd(0x06);			//输入方式设置
	DelayMS(1);
	Write_cmd(0x01);			//清除LCD的显示内容
	DelayMS(1);
}

猜你喜欢

转载自blog.csdn.net/qq_17017545/article/details/81516903