📄 lcd.h
字号:
#include <reg52.h>
#include <intrins.h>
#include <stdio.h>
#include <absacc.h>
#define uchar unsigned char
#define uint unsigned int
#define LCD_LENGTH 128
#define LCD_WIDTH 64
#define Graphic 1
#define TXT 0
#define LCD_DATA XBYTE[0x0000]
#define LCD_Command XBYTE[0x0100]
sbit P10=P1^0;
sbit P20=P2^0;
sbit P21=P2^1;
sbit P22=P2^2;
sbit P23=P2^3;
sbit P24=P2^4;
sbit P25=P2^5;
sbit P26=P2^6;
sbit P27=P2^7;
/*************************** 是否处于忙态 ************************/
void CheckRW(void) //指令&数据读写状态,看是否处于忙态
{
while( (LCD_Command & 0x03) != 0x03) ;
}
void CheckAutoWrite(void) //数据自动写状态,看是否处于忙态
{
while( (LCD_Command & 0x08) == 0) ;
}
void CheckScreen(void) //屏读屏拷贝是否出错
{
while( LCD_Command & 0x40 );
}
/********************** 读写数据 ************************/
void WriteData(uchar uData) //写入
{
LCD_DATA = uData;
}
uchar ReadData(void) //读
{
uchar uData;
uData = LCD_DATA;
return uData;
}
/************************ 设置命令操作 *****************/
void Set_Com(uchar com)
{
CheckRW();
LCD_Command = com;
}
void Set_Com_1(uchar param1,uchar com)
{
CheckRW();
LCD_DATA = param1;
CheckRW();
LCD_Command = com;
}
void Set_Com_2(uchar param1,uchar param2,uchar com)
{
CheckRW();
LCD_DATA = param1;
CheckRW();
LCD_DATA = param2;
CheckRW();
LCD_Command = com;
}
/******************** 延时子程序 **************/
void Delay(uint time)
{
uchar us,usn;
while(time!=0) //12M Crystal
{
usn = 2;
while(usn!=0)
{
us=0xf2;
while (us!=0){us--;};
usn--;
}
time--;
}
}
/************************* 初使化LCD ****************/
void Init_LCD(void)
{
Set_Com_2(0x00,0x00,0x40); //设置文本显示区首地址
Set_Com_2(LCD_LENGTH/8,0x00,0x41); //设置文本显示区宽度
Set_Com_2(0x00,0x08,0x42); //设置图形显示区首地址0x0800
Set_Com_2(LCD_WIDTH/8,0x00,0x43); //设置图形显示区宽度
Set_Com(0xA7); //设置光标形状 8x8方块
Set_Com(0x81); //显示方式设置 文本xor图形(异或)
Set_Com(0x9C); //显示开关设置 文本开,图形开,光标闪烁关
}
/******************** 清屏操作 *******************************/
void Clear_LCD(uchar FillByte) //使用FillByte清屏
{
uint i = 8192;
if(FillByte)
{
i -= 2*1024;
Set_Com_2(0x00,0x08,0x24); //填充0xff时候要在图形区
}
else
Set_Com_2(0x00,0x00,0x24);
Set_Com(0xB0); //进入自动写
while(i--)
{
CheckAutoWrite();
WriteData( FillByte );
}
Set_Com(0xB2);
}
/*********************** 设定显示地址 *****************/
void LocateXY(uchar x,uchar y,uchar mode) //0为字符模式,1为图形模式
{
uint temp;
temp= LCD_LENGTH/8*y + x;
if(mode) //mode=1为Graphic
{ //如果图形模式要加上图形区首地址0x0800
temp+=0x0800;
}
Set_Com_2(temp & 0xff,temp/256,0x24);
}
/*********************** 显示字符和字符串 ***************/
void Show_Char(uchar x,uchar y,uchar CharByte)
{
LocateXY(x,y,TXT);
Set_Com_1(CharByte,0xC4);
}
void Show_String(uchar x,uchar y,uchar *str)
{
while(*str != 0)
{
if(x> 29) //自动换行
{
x=0;
y++;
}
Show_Char(x,y,*str);
++x;
++str;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -