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

📄 lcd1602.c

📁 LPC2104 LCD 16x2 显示驱动 字符显示功能 带PROTEUS 仿真功能
💻 C
字号:
#include "lpc21xx.h"
/**************************************************************************
一些关于LCD外部接口参数的定义
***************************************************************************/
const unsigned int	LCDRS=1<<4;	
const unsigned int	LCDRW=1<<5;
const unsigned int	LCDEN=1<<6;
const unsigned int	LCDDATA=0xff<<7;
const unsigned int	LCDBUSY=1<<14;
const unsigned int	LCD_D0=7;

typedef unsigned char	uchar;
typedef unsigned int	uint;

void LcdInit(void)
{
	PINSEL0|=0;
	IO0DIR=(LCDRS|LCDRW|LCDEN|LCDDATA);
}

void CheckBusy(void)
{ 
	IO0DIR &=(~LCDDATA);
	IO0CLR=LCDRS|LCDDATA;
	IO0SET=LCDEN|LCDRW;
	while(IO0PIN&LCDBUSY)
	{	
	IO0CLR=LCDEN;
	IO0SET=LCDEN;
	}
	IO0CLR=LCDEN;
	IO0DIR|=LCDDATA;
}	

void LcdWc(uint Cmd)
{
	CheckBusy();
	IO0CLR=LCDRS|LCDRW|LCDDATA;
	IO0SET=(Cmd<<LCD_D0)&LCDDATA ;
	IO0SET=LCDEN;
	IO0CLR=LCDEN;
	
}
void LcdWd(uint Dat)
{
	CheckBusy();
	IO0CLR=LCDRW|LCDDATA;
	IO0SET=(Dat<<LCD_D0)&LCDDATA ;
	IO0SET=LCDRS;
	IO0SET=LCDEN;
	IO0CLR=LCDEN;
}

void RstLcd()										//复位LCD控制器
{
	LcdWc(0x38);									//显示模式设置
	LcdWc(0x08);									//显示关闭
	LcdWc(0x01);									//显示清屏
	LcdWc(0x06);									//显示光标移动位置
	LcdWc(0x0c);									//显示开及光标设置
}

void LcdPos(uchar yPos,uchar xPos)	//设置第(xPos,yPos)个字符的DDRAM地址      
{	unsigned char tmp;
	xPos&=0x0f;		//x位置范围是0~15,因为显示15列
	yPos&=0x01;		//y位置范围是0~1,因为显示2行
	if(yPos==0)		//显示第一行
		tmp=xPos;
	else
		tmp=xPos+0x40;  //显示第二行
	tmp|=0x80;
	LcdWc(tmp);
}

void WriteChar(uchar c,uchar xPos,uchar yPos)       //定义WriteChar函数
{	LcdPos(xPos,yPos);
	LcdWd(c);
}

void WriteString(uchar *s,uchar xPos,uchar yPos)   //定义WriteString函数
{	int i=0;
	LcdPos(xPos,yPos);	
	while(*s)
	{	
		LcdWd(*(s++));
		if(++i>16) break;
	}
}

void SetCur(uchar Para)	          //定义光标函数
{	
	switch(Para)
	{	case 0:
		{	LcdWc(0x08);	//关显示
			break;
		}
		case 1:
		{	LcdWc(0x0c);	//开显示但无光标
			break;
		}
		case 2:
		{	LcdWc(0x0e);	//开显示有光标但不闪烁
			break;
		}
		case 3:
		{	LcdWc(0x0f);	//开显示有光标且闪烁
			break;
		}
		default:
			break;
	}
}	

/*****************************************************************************************
for test Use
*****************************************************************************************/
main()
{
	LcdInit();
	RstLcd();
	WriteString("hello!",0,5);
	WriteString("ZhiHuiChengJiang",1,0);
	while(1)
	{
//	LcdWc(0x01);
	}
}
	

⌨️ 快捷键说明

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