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

📄 lcd.c

📁 KeilC51开发,51单片机与E2PROM的接口程序,并且有串口与液晶的输出.
💻 C
字号:
#include <reg51.h>
#include <intrins.h>
#include <8255A.h>
#include <LCD.h>

#define Busy	0x80

#define SetRS() SetCBit(0,1)
#define ClrRS() SetCBit(0,0)
#define SetRW() SetCBit(1,1)
#define ClrRW() SetCBit(1,0)
#define SetE()  SetCBit(2,1)
#define ClrE()  SetCBit(2,0)

/*
static void SetRS();
static void ClrRS();
static void SetRW();
static void ClrRW();
static void SetE();
static void ClrE();
*/
//static void LcdWriteData(char);
//static void LcdWriteCommand(Uchar, Uchar);
//static void WaitForEnable();
//static void Delay5Ms();
//static void Delay400Ms();


void WaitForEnable()
{

	//PortA = 0xff;

 	SelectForm0(1, 0, 0, 0);
	ClrRS();
	SetRW();
	_nop_();

	SetE();
	_nop_();
	_nop_();
	
	
	while( PortA & Busy );
	
	SelectForm0(0, 0, 0, 0);
	ClrE();
}


void LcdWriteCommand(Uchar CMD, Uchar AttribC )
{
	if (AttribC) WaitForEnable();
	ClrRS();
	ClrRW();
	_nop_();
	PortA = CMD;
	_nop_();
	
	SetE();
	_nop_();
	_nop_();
	ClrE();	
}
	
/*=======================================================
 当前位置写字符子程序: E =1 RS=1 RW=0
=======================================================*/
void LcdWriteData( char dataW )
{

	WaitForEnable();
	SetRS();
	ClrRW();
	_nop_();

    PortA = dataW;
	_nop_();

	SetE();
	_nop_();
	_nop_();
	ClrE();		// 操作允许脉冲信号		

}

void LocateXY( char posx,char posy) 
{
	Uchar temp;

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

void Delay5Ms(void)
{
	Uint i = 5552;
	while(i--);
}

//长延时
void Delay400Ms(void)
{
	Uchar i = 5;
	Uint j;
	while(i--)
	{
		j=7269;
		while(j--);
	}
}

void DisplayOneChar(Uchar x,Uchar y,Uchar Wdata) 
{

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

}

void DisplayXString(Uchar x, Uchar y, Uchar* pStr)
{
	int i, tempy=y;
	
	for(i=0;*(pStr+i)!=0;i++)
	{	
		if(x+i>15) tempy=y+1;
		LocateXY(x+i, tempy);
		LcdWriteData( *(pStr+i) );			// 写字符
	}
}

void DisplayString(Uchar x, Uchar y, Uchar* pStr, Uint len)
{
	Uint i, tempy=y;
	
	for(i=0;i<len;i++)
	{	
		if(x+i>15) tempy=y+1;
		LocateXY(x+i, tempy);
		LcdWriteData( *(pStr+i) );			// 写字符
	}
}

/*=======================================================
 初始化程序, 必须按照产品资料介绍的初始化过程进行
=======================================================*/
void LcdReset( void )
{

	Init8255A();
   	LcdWriteCommand( 0x38, 0);			// 显示模式设置(不检测忙信号)
		Delay5Ms();
	LcdWriteCommand( 0x38, 0);			// 共三次
		Delay5Ms();
	LcdWriteCommand( 0x38, 0);
		Delay5Ms();

	LcdWriteCommand( 0x38, 1);			// 显示模式设置(以后均检测忙信号)
  //  LcdWriteCommand( 0x08, 1);			// 显示关闭
   	LcdWriteCommand( CLR_SCREEN, 1); 		// 显示清屏
	LcdWriteCommand( CURSOR_MOVE, 1);			// 显示光标移动设置
	LcdWriteCommand( CURSOR_OFF, 1);			// 显示开及光标设置
}

void LcdRightShift()
{
	LcdWriteCommand( 0x1c, 1);

}












⌨️ 快捷键说明

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