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

📄 main.c

📁 本程序详细介绍了LCD1602的使用方法及初始化.
💻 C
字号:
/*============================================================
LPC214X kit 学习板 液晶功能演示
作者: Mingtree	ycxms88@163.com   http://www.mcu123.com

液晶型号:RT1602C


==============================================================
*/
#include <LPC214X.H>                        /* LPC214x definitions */


#define	uchar unsigned char
#define uint unsigned int


#define RW	22	  //读写控制端	   0为写 1为读
#define RS	4	  //A0为1时是数据,0时为指令数据
#define Elcm 21		//	



#define busy	0x0800

unsigned char const mcu123[]="WWW.MCU123.COM"	;


void Io_Set(uchar pin)	   //单个IO口置位函数
{
unsigned int io_data=1;
io_data=io_data<<pin;
IOSET0=io_data;         //IOSET0为IO线上置位寄存器,1有效,0无
}


void Io_Clr(uchar pin)	   //单个IO口清零函数
{
unsigned int io_data=1;
io_data=io_data<<pin;
IOCLR0=io_data;         //IOCLR0为IO线上清零寄存器,1有效,0无
}


void Io_Set1(uchar pin)	   //单个IO口置位函数
{
unsigned int io_data=1;
io_data=io_data<<pin;
IOSET1=io_data;         //IOSET0为IO线上置位寄存器,1有效,0无
}


void Io_Clr1(uchar pin)	   //单个IO口清零函数
{
unsigned int io_data=1;
io_data=io_data<<pin;
IOCLR1=io_data;         //IOCLR0为IO线上清零寄存器,1有效,0无
}
void Sent_Byte(unsigned char data)
{
unsigned char i;
for(i=0;i<8;i++) 
  {
  
   if(data&1) {Io_Set1(i+16);}	 //把相应的IO口置位或者清零
   else {Io_Clr1(i+16);}
   data=data>>1;
   }
}



//延时
void delay(unsigned int i)
{
	unsigned int k=1000;
	while(i>0)
	{
		i--;
	}
	while(k>1)k--;
}

void delayms (unsigned int i) {                        /* Delay function */
unsigned int n;
while(i>1)
{
	for(n=65535;n>1;n--);
	i--;
}
}

void	delay1s(unsigned char i)
{
	while(i>1)
	{
		i--;
		delayms(20);
	}
}


 void init_port(void)
 {
 //port initialized
 IODIR1=0x00FF0000;
 IODIR0=0x40600010;
 }


/*=======================================================
正常读写操作之前必须检测LCD控制器状态:	CS=1 RS=0 RW=1
DB7:    0  LCD控制器空闲; 1  LCD控制器忙
========================================================*/
void WaitForEnable( void ) {

	//unsigned int i;
	
	Io_Clr(RS);
	delay(1);
	Io_Set(RW);
	delay(1);
	Io_Set(Elcm);
	delayms(10);
	//	i=IO1PIN;		//读P1	
	while( IO1PIN & busy );
	Io_Clr(Elcm);
}	


/*=======================================================
 写控制字符子程序: E=1 RS=0 RW=0
=======================================================*/
void LcdWrite_CMD( uchar CMD,uchar AttribC ) {

	if (AttribC) WaitForEnable();				// 检测忙信号?
	
	Io_Clr(RS);
	delay(1);
	Io_Clr(RW);
	delay(1);
	Sent_Byte(CMD);
	Io_Set(Elcm);
	delay(1);
	delay(1);
	Io_Clr(Elcm);
	delay(1);
}


/*=======================================================
 当前位置写字符子程序: E =1 RS=1 RW=0
=======================================================*/
void LcdWrite_D( char dataW ) {

	WaitForEnable();							// 检测忙信号

	Io_Set(RS);
	delay(1);
	Io_Clr(RW);
	delay(1);
	Sent_Byte(dataW);
	Io_Set(Elcm);
	delay(1);
	Io_Clr(Elcm);
	delay(1);


}

/*=======================================================
 显示光标定位
=======================================================*/
void LocateXY( char posx,char posy) {

uchar temp;

	temp = posx & 0xf;
	posy &= 0x1;
	if ( posy )temp |= 0x40;
	temp |= 0x80;
	LcdWrite_CMD(temp,0);
}


/*=======================================================
 按指定位置显示数出一个字符
=======================================================*/
void DispOneChar(uchar x,uchar y,uchar Wdata) {

	LocateXY( x, y );				// 定位显示地址
	LcdWrite_D( Wdata );			// 写字符
}

/*=======================================================
 显示字符串
=======================================================*/
void disp(uchar x,uchar y,const unsigned char *ptr) {
uchar i,l=0;
	while (ptr[l] >31){l++;};
	for (i=0;i<l;i++) {
		DispOneChar(x++,y,ptr[i]);
		if ( x == 16 ){
			x = 0; y ^= 1;
		}
	}
}


//初始化
void lcdreset(void)
{
	LcdWrite_CMD(0x38, 0);		//显示模式设置(不测试忙信号)共三次
	delayms(50);
	LcdWrite_CMD(0x38, 0);
	delayms(50);
	LcdWrite_CMD(0x38, 0);
	delayms(50);
	
	LcdWrite_CMD( 0x38, 1);
	LcdWrite_CMD( 0x08, 1);
	LcdWrite_CMD( 0x01, 1);
	LcdWrite_CMD( 0x06, 1);
	LcdWrite_CMD( 0x0f, 1);
	
}
int main(void)
{	 init_port();
	 delayms(1);
	 lcdreset();		//初始化
	 delay1s(1);
	 disp(0,0,mcu123);
	 disp(0,1,"www.mcu123.net");
	 while(1)
	 {
	  //disp(0,0,mcu123);
	  
	  delay1s(1);
	 }

}

⌨️ 快捷键说明

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