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

📄 lcd1602.h

📁 C52-PS2.rar
💻 H
字号:
#ifndef _LCD1602_
#define _LCD1602_

#include <AT89X51.H>
#include <string.h>
#include <intrins.h>
//--------------------------------------------------------------------
#define E_1602   P2_2 //on falling edge enable data or command
#define RW_1602   P2_1 //read or write control
#define RS_1602   P2_0 //cmd or data register select
#define DATA_1602 P1   //data port
#define DATA   1   //select DATA register
#define CMD    0   //select CMD register
#define READ   1
#define WRITE   0//---------------------------------------------------------------
void Delay_us(uchar t);
void Delay_ms(uchar t);
void Init_1602(void);
void Write_Char_1602(uchar Data,bit CMD_DATA,bit Check);
void Check_Busy_1602(void);
void Write_String_1602(uchar *P);
void Set_R_C(uchar R,uchar C);
//void Clear_LCD_1602(void);
//----------------------------------------------------------------
/*
void Clear_LCD_1602(void)
{
	Write_Char_1602(0x01,CMD,1);//clear screen
}
*/
void Delay_us_1602(uchar t)
{
	while(--t);
}

void Delay_ms_1602(uchar t) 
{
	while(t--)
	{   
	Delay_us_1602(225);   
	Delay_us_1602(227);
	}
}

void Init_1602(void)
{
	Delay_ms_1602(15);
	Write_Char_1602(0x38,CMD,0); //don't check busy
	Delay_ms_1602(5);
	Write_Char_1602(0x38,CMD,0);
	Delay_ms_1602(5);
	Write_Char_1602(0x38,CMD,0);
	Write_Char_1602(0x38,CMD,1);//8 wire,2 line display,5x10 char
	Write_Char_1602(0x08,CMD,1);//close display,no cursor,don't blink
	Write_Char_1602(0x01,CMD,1);//clear screen
	Write_Char_1602(0x06,CMD,1);//the cursor move from left to right,the text don't move
	Write_Char_1602(0x0c,CMD,1);//open display
}

void Write_Char_1602(uchar Data,bit CMD_DATA,bit Check)
{
	if(Check)    
	Check_Busy_1602();
	RS_1602=CMD_DATA;
	RW_1602=WRITE;
	DATA_1602=Data;
	E_1602=1;
	_nop_();
	E_1602=0;
}

void Write_String_1602(uchar *P) //only can write from start to end
{
	uchar i,len;
	len=strlen(P);
	Set_R_C(0,0);
	if(len>16)
	{   
		for(i=0;i<16;i++)   
		{    
			Write_Char_1602(P[i],DATA,1);   
		}   
		Set_R_C(1,0);   
		for(i=16;i<len;i++)   
		{   
			Write_Char_1602(P[i],DATA,1);   
		}
	}
	else
	{   
		for(i=0;i<len;i++)   
		{    
			Write_Char_1602(P[i],DATA,1);   
		}
	}
}

void Set_R_C(uchar R,uchar C) //set row and column   R=0/1;C=0~F
{
	R&=0x01;
	C&=0x0f;
	if(R)   
		Write_Char_1602(0x80+0x40+C,CMD,1);
	else   
		Write_Char_1602(0x80+C,CMD,1);
}

void Check_Busy_1602(void)
{
	DATA_1602=0xff;   //set as input port
	RS_1602=CMD;
	RW_1602=READ;
	E_1602=1;
	while(DATA_1602 & 0x80)
	{     
		E_1602=0;    //这两句protues仿真必须加     
		E_1602=1;    //
	}
	E_1602=0;
}
#endif

⌨️ 快捷键说明

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