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

📄 lcd1602.c

📁 这个程序包包括对两款常用的LCD的串行和并行2中驱动方式: HDG12864液晶仿真 HY12864液晶驱动 HY12864液晶阅读器 LCD1602液晶显示 LCD显示PC-MCU串口通信
💻 C
字号:
/*******************************************************************************
功能:液晶LM016L显示,2X16显示。
说明:显示两行字符串,words1[],words2[]。第一行地址0~15,第二行地址64~79
制作:电子科大huang_api@sina.com
*******************************************************************************/
#include <reg52.h>
#include <intrins.h>

#define uchar unsigned char 
#define uint unsigned int 
 
///////控制引脚RS为P32. RW为P33. E为P34//////////
sbit RS	= P3^2;		
sbit RW = P3^3;
sbit E = P3^4;

uchar code words1[] = {"welcome!"};
uchar code words2[] = {"0123456789"};//0123456789abcdefghijklmnopqrstuvwxyz!@#$%^&*()

/****************************延时函数***************************
名称:delay()
输入:uchar m
输出:无
***************************************************************/
void delay(uchar ms)
{							// 延时子程序
	uchar i;
	while(ms--)
	{
		i=250;
		while(i--)
		{
			_nop_();
			_nop_();
			_nop_();
			_nop_();
			_nop_();
		}
	}
}


/******************************LCD状态检测函数**************************************
名称:lcd_state()
功能:lcd状态忙碌判断
参数:P2口为数据口
输入:无
输出:返回状态标志state位
************************************************************************************/
bit lcd_state(void)
{							// 测试LCD忙碌状态
	bit state;
	RS = 0;//command
	RW = 1;//read
	E = 1;
	_nop_();
	_nop_();
	_nop_();
	_nop_();
	state = (bit)(P2 & 0x80);
	E = 0;
	return state;	
}


/******************************LCD指令写入函数**************************************
名称:lcd_w_cmd()
功能:写指令到LCD数据口P2
参数:P2口为数据口
输入:待写指令
输出:无
************************************************************************************/
void lcd_w_cmd(uchar cmd)
{							// 写入指令数据到LCD
	while(lcd_state());
	RS = 0;//command
	RW = 0;//write
	E = 0;
	_nop_();
	_nop_();	
	P2 = cmd;
	_nop_();
	_nop_();
	_nop_();
	_nop_();
	E = 1;
	_nop_();
	_nop_();
	_nop_();
	_nop_();
	E = 0;		
}

/******************************LCD状态检测函数**************************************
名称:lcd_adder()
功能:lcd显示地址设置
参数:P2口为数据口
输入:一字节待设置的显示地址长度0~15
输出:无
************************************************************************************/
void lcd_adder(uchar adder)
{							//设定显示位置
	lcd_w_cmd(adder | 0x80);
}


/******************************LCD数据写入函数**************************************
名称:lcd_w_date()
功能:写数据到LCD数据口P2
参数:P2口为数据口
输入:一字节待写显示数据
输出:无
************************************************************************************/
void lcd_w_date(uchar dat)	
{							//写入字符显示数据到LCD
	while(lcd_state());
	RS = 1;//date
	RW = 0;//write
	E = 0;
	P2 = dat;
	_nop_();
	_nop_();
	_nop_();
	_nop_();
	E = 1;
	_nop_();
	_nop_();
	_nop_();
	_nop_();
	E = 0;	
}


/******************************LCD初始化函数**************************************
名称:lcd_init()
功能:初始化LCD模块
参数:初始化指令
输入:无
输出:无
************************************************************************************/
void lcd_init(void)
{							//LCD初始化设定
	lcd_w_cmd(0x38);			//
	delay(1);
	lcd_w_cmd(0x0c);			//
	delay(1);
	lcd_w_cmd(0x06);			//
	delay(1);
	lcd_w_cmd(0x01);			//清除LCD的显示内容
	delay(1);
}

/******************************LCD显示函数**************************************
名称:lcd_display()
功能:显示words1[],words2[]字符串!
参数:P2口为数据口,*word1,*word2为待显示字符串指针,adder1,adder2为两行显示起始地址
输入:待显示的数据的指针,显示地址
输出:无
*******************************************************************************/
lcd_display(uchar *word1,uchar *word2,uchar adder1,uchar adder2)
{
	uchar i = 0;
		lcd_adder(adder1);	//0~15	// 设置显示位置为第一行的第5个字符
	while(word1[i] != '\0')
	{						// 显示字符
		lcd_w_date(word1[i]);
		i++;
	}

	lcd_adder(adder2);//64~79	// 设置显示位置为第二行第二个字符
	i = 0;

	while(word2[i] != '\0')
	{
		lcd_w_date(word2[i]);	// 显示字符
		i++;
	}		
}

///////////////////////////MAIN函数//////////////////////////////////
main()
{
	lcd_init();				// 初始化LCD			
	delay(10);

	lcd_display(&words1,&words2,16,48);  //LCD显示

	while(1) ;				//waiting 
}

⌨️ 快捷键说明

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