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

📄 lcd1602.c

📁 点阵液晶1602显示驱动
💻 C
字号:
/*************************************************************************
本文件是LCD1602的读写程序,即LCD1602的驱动程序,文件名为:lcd1602.c
编写:puke7381
日期:20081029
版本:V yf08.c.01
*************************************************************************/

#include "at89x51.h"
#include "init8051.h"
#include "intrins.h"
#include "string.h"
#include "lcd1602.h"



//#define Busy	0x80

code unsigned char lcd_initcode[] = {0x30,0x30,0x30,0x38,0x08,0x01,0x06,0x0c};					//数据总线8位,2行5X7字体,AC自动加1,开光标且闪


/*************************************************************************
名称:Lcd_writecmd
功能:写指令到1602LCD的指令寄存器中,同时对检查BF位作出要求
参数:cmd ,require
调用:Lcd_statusread
返回:无
*************************************************************************/
void Lcd_writecmd( unsigned char cmd, unsigned char require )			 
{
	unsigned char flag_BF;
	if( require )
	{
		do{
			flag_BF = Lcd_statusread();
			Delay_ms( 1 );
		}while( flag_BF != 0 );					//检查是否处于空闲状态
	
	}
	Lcd_E = 0;
	Lcd_RS = 0;
	Lcd_RW = 0;
	Lcd_DataPort = cmd;
	Lcd_E = 1;
	_nop_();
	Lcd_E = 0;
}

/*************************************************************************
名称:Lcd_statusread
功能:读取LCD的状态字,用以判断BF位是否为0,为0则表示闲,可以对LCD进行操作
参数:无
调用:无
返回:flag_BF
*************************************************************************/
unsigned char Lcd_statusread( void )
{
	unsigned char lcd_BF;
	Lcd_E = 0;						//读状态字操作,E=0->1,RS=0,RW=1
	Lcd_RS = 0;
	Lcd_RW = 1;
	Lcd_DataPort = 0xff;			//消除干扰,以防读出假数据
	Lcd_E = 1;
	lcd_BF = Lcd_DataPort & 0x80 ;		//读出状态字数据,包涵BF位,与上0x80得到BF位
	Lcd_E = 0;
	return lcd_BF;
}

/*************************************************************************
名称:Lcd_writedata
功能:写数据到LCD的CGRAM/DDRAM中
参数:dat
调用:Lcd_statusread
返回:无
*************************************************************************/
void Lcd_writedata( unsigned char dat )
{
	unsigned char flag_BF;
	do{
		flag_BF = Lcd_statusread();				
		Delay_ms( 1 );
	}while( flag_BF != 0 );
	Lcd_E = 0;
	Lcd_RS= 0;
	Lcd_RW = 0;
	Lcd_DataPort = dat;
	Lcd_RS = 1;
	Lcd_E = 1;
	_nop_();
	Lcd_E = 0;
}

/*************************************************************************
名称:Lcd_dataread
功能:从LCD中的显示缓冲RAM当中读一个字节的显示数据
参数:无
调用:Lcd_statusread
返回:data_temp
*************************************************************************/
/*unsigned char Lcd_dataread( void )
{
	unsigned char data_temp, flag_BF;
	do{
		flag_BF = Lcd_statusread() & 0x80;
		Delay_ms( 1 );
	}while( flag_BF != 0);
	Lcd_E = 1;
	Lcd_RS = 1;
	Lcd_RW = 1;
	data_temp = Lcd_DataPort;
	Lcd_E = 0;
	return data_temp;
}*/

/*************************************************************************
名称:Lcd_init
功能:初始化LCD1602模块,对显示,光标等进行设置
参数:无
调用:Lcd_writecmd
返回:无
*************************************************************************/
void Lcd_init( void )
{
	unsigned char data_temp,i;
	unsigned char *p;
	p = ( unsigned char * )lcd_initcode; 			//获取初始化序列数据的首地址
	for( i = 0; i < 3; i++ )
	{
		data_temp = *p++;
		Lcd_writecmd( data_temp, 0 );		//三次显示设置,不检测BF位
		Delay_ms( 5 );
	}
	Lcd_writecmd( *p++, 1 );				 	//写指令0x38,显示效果设置
	Lcd_writecmd( *p++, 1 );					//写指令0x08,关显示
	Lcd_writecmd( *p++, 1 );					//写指令0x01,清屏
	Lcd_writecmd( *p++, 1 );				 	//写指令0x06,数据地址指针及光标/画面移动设置
	Lcd_writecmd( *p++, 1 );					//写指令0x0c,显示及光标设置
}

/*************************************************************************
名称:Lcd_display
功能:由LCD 1602显示数据
参数:*string_p,addr(要显示的数据和显示位置)
调用:Lcd_writecmd,Lcd_writedata
返回:无
*************************************************************************/
void Lcd_display( unsigned char *string_p, unsigned char addr )
{
	Lcd_writecmd( addr, 1 );					//写指令,指定显示位置
	while( *string_p != 0 )
	{
		Lcd_writedata( *string_p );	  			//写显示数据
		string_p++;
	}
	
}
	

⌨️ 快捷键说明

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