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

📄 fyd12864.c

📁 本电路主要显示两种液晶显示模块并详细介绍JHD162AJ及FYD12864与51单片机的接口及相应的应用程序.
💻 C
字号:
#include <reg51.h>
#include "FYD12864.h"

//IO输入输出控制
void InitP0(bit i) 
{
	if(i==1) P0 = 0xff;
	else     P0 = 0x00;
	} 

//短延时函数:ShortDelay()
void ShortDelay(uchar i)
{
	for(;i>0;i--) ;
	}
	
//长延时函数:LongDelay()
void LongDelay(uint i)
{
	uint j;
	for(;i>0;i--)
		{ for(j=1000;j>0;j--);}
	}
	
//指令/数据选择函数:SetLCD_RS()
void  SetLCD_RS(bit i)
{
	if(i==1) PinRS = 1;
	else     PinRS = 0;
	}

//读写操作控制信号:SetLCD_RW()
void SetLCD_RW(bit i)
{
	if(i==1) PinRW = 1;
	else     PinRW = 0;
	}

//使能信号:SetLCD_EN()
void SetLCD_EN(bit i)
{
	if(i==1) PinE = 1;
	else     PinE = 0;
	}	
	
//复位:SetLCD_RST()
void SetLCD_RST(bit i)
{
	if(i==1) PinRST = 1;
	else     PinRST = 0;
	}

//读状态函数:ReadStatus()
uchar ReadStatus(void)
{
  uchar i;
  InitP0(1);
  SetLCD_RW(1);
  SetLCD_RS(0);
  SetLCD_EN(0);
  ShortDelay(10);
  SetLCD_EN(1);
  ShortDelay(20);
  i = P0;
  ShortDelay(40);
  SetLCD_EN(0);
  return(i);
}

//读一字节数据函数:ReadOneByte()
uchar ReadOneByte(void)
{
  uchar i;
  InitP0(1);
  SetLCD_RW(1);
  SetLCD_RS(1);
  SetLCD_EN(0);
  ShortDelay(10);
  SetLCD_EN(1);
  ShortDelay(20);
  i = P0;
  ShortDelay(40);
  SetLCD_EN(0);
  return(i);
}

//写指令函数:WriteInstruc()
void WriteInstruc(uchar Instruction)
{
  while((ReadStatus() & 0x80)!= 0x00);
  InitP0(0);
  SetLCD_RW(0);
  SetLCD_RS(0);
  SetLCD_EN(0);
  P0 = Instruction;
  ShortDelay(100);
  SetLCD_EN(1);
  ShortDelay(100);
  SetLCD_EN(0);  
}

//写一字节数据函数:WriteOneByte()
void WriteOneByte(uchar Data)
{
  while((ReadStatus() & 0x80)!= 0x00);
  InitP0(0);
  SetLCD_RW(0);
  SetLCD_RS(1);
  SetLCD_EN(0);
  P0 = Data;
  ShortDelay(100);
  SetLCD_EN(1);
  ShortDelay(100);
  SetLCD_EN(0);
}

//复位函数:ResetLCD()
void ResetLCD(void)
{
  LongDelay(40);
  SetLCD_RST(0);
  LongDelay(1);
  SetLCD_RST(1);
  LongDelay(1);
}

//初始化函数:InitLCD()
void InitLCD(void)
{
  ResetLCD();
  FunctionSet(0x30); // Function Set: 8_bits_Data, Base_Instrution
  LongDelay(1);
  FunctionSet(0x30); // Function Set: 8_bits_Data, Base_Instrution
  LongDelay(1);
  Disp_OnOff(0x0c);  // Disp_ON: The Whole ALL_ON
  LongDelay(1);
  ClearLCD();        // Clear LCD
  LongDelay(1);
  PointSet(0x06);    // Entry Mode Set: DDRAM Address Counter(AC) + 1
  LongDelay(1);
}

//显示一个汉字(16x16)函数:DispOneWord()
void DispOneWord(uchar X,uchar Y,uint Word)
{
  uchar Disp_Address;
  uchar Address_H;
  uchar Address_L;
  
  if((X == 0x00)||(X == 0x02)) // 0,2行
  	Address_H = 0x80;
  else // 1,3行
  	Address_H = 0x90;
  	
  if((X == 0x00)||(X == 0x01)) // 0,1行
  	Address_L = Y;
  else // 2,3行
  	Address_L = Y + 0x08;
  Disp_Address = (Address_H | Address_L) & 0xff;
  SetDDRAM_Add(Disp_Address); 				// Set DDRAM(Disp_Address)
  WriteOneByte(((Word & 0xff00) >> 8) & 0xff); // H_Byte
  WriteOneByte(Word & 0xff);		 // L_Byte  
}


//显示两个字符(8x16)函数:DispTwoCharacter()
void DispTwoCharacter(uchar X,uchar Y,uchar Character1,uchar Character2)
{
  uchar Disp_Address;
  uchar Address_H;
  uchar Address_L;
  
  if((X == 0x00)||(X == 0x02)) // 0,2行
  	Address_H = 0x80;
  else // 1,3行
  	Address_H = 0x90;
  	
  if((X == 0x00)||(X == 0x01)) // 0,1行
  	Address_L = Y;
  else // 2,3行
  	Address_L = Y + 0x08;
  Disp_Address = Address_H | Address_L;
  SetDDRAM_Add(Disp_Address); // Set DDRAM(Disp_Address)
  WriteOneByte(Character1);
  WriteOneByte(Character2);
 }

⌨️ 快捷键说明

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