📄 fyd12864.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);
LongDelay(1);
FunctionSet(0x0c); //显示图像时候 功能指令不同
LongDelay(1);
ClearLCD();
FunctionSet(0x32); // Function Set: 功能设置---8BIT控制界面,绘图显示ON
LongDelay(1);
FunctionSet(0x36); // Function Set: 功能设置---8BIT控制界面,扩充指令集
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
}
void disparr(uchar X,uchar Y,char *ptr) //从x y连续显示汉字
{ uchar Disp_Address;
uchar Address_H;
uchar Address_L;
uchar dispname[6];
uchar i;
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);
for(i=0;i<6;i++)
dispname[i]=*(ptr+i);
WriteOneByte(dispname[1] & 0xff);
WriteOneByte(dispname[0] & 0xff);
Disp_Address = (Address_H | Address_L+1) & 0xff;
SetDDRAM_Add(Disp_Address);
WriteOneByte(dispname[3] & 0xff);
WriteOneByte(dispname[2] & 0xff);
Disp_Address = (Address_H | Address_L+2) & 0xff;
SetDDRAM_Add(Disp_Address);
WriteOneByte(dispname[5] & 0xff);
WriteOneByte(dispname[4] & 0xff);
}
//显示两个字符(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 + -