📄 lcd.h
字号:
#include "main.h"
#define LCD_Data P0
sbit LCD_RS =P1^3;
sbit LCD_WR =P1^4;
sbit LCD_E =P1^5;
sbit PSB =P1^6;
/*
返回值Status: 当前地址计数器的值.
*/
unsigned char LCDBusyWait() //等待LCD就绪
{
unsigned char Status;
LCD_RS=0;
LCD_WR=1;
LCD_Data=0xFF;
LCD_E=1;
Status=LCD_Data;
LCD_E=0;
while(Status & 0x80)
{
LCD_E=1;
Status=LCD_Data;
LCD_E=0;
}
LCD_WR=0;
return Status;
}
void WriteLCD_Data(unsigned char Data) //向LCD写入一个字节的数据
{
LCDBusyWait();
LCD_RS=1;
LCD_Data = Data;
LCD_E=1;
LCD_E=0;
}
void WriteLCD_Command(unsigned char Command) //向LCD写入一个字节的命令
{
LCDBusyWait();
LCD_RS=0;
LCD_Data=Command;
LCD_E=1;
LCD_E=0;
}
//改变地址,实现了逐行显示
unsigned char ChangeAddress(unsigned char StartAddress)
{
switch(StartAddress)
{
case 0x87:WriteLCD_Command(0x90);StartAddress=0x90;break;
case 0x8F:WriteLCD_Command(0x98);StartAddress=0x98;break;
case 0x97:WriteLCD_Command(0x88);StartAddress=0x88;break;
default:StartAddress+=1;
}
return StartAddress;
}
/*
WriteLCD 从LCD输出一个字符串:
StartAddress为起始地址;
Size为字符串大小;
Size==0 时由程序自己判断字符串结束标志,否则输出 Size 个字符,不够则填充空格;
Charactors为要求输出的字符串;
*/
void WriteLCD(unsigned char StartAddress,unsigned char Size,unsigned char Charactors[])
{
unsigned char *i=Charactors; //字符串的首地址
WriteLCD_Command(StartAddress);
if(Size) //Size不为0
{
bit Over=0;
while(i<(Charactors+Size)) //判断字符串结尾
{
if(Over)
{
WriteLCD_Data(' ');i++;
if(i>=(Charactors+Size)) break;
WriteLCD_Data(' ');i++;
}
else
{
// unsigned char k;
switch(((*i)*256)+(*(i+1)))
{
}
}
StartAddress=ChangeAddress(StartAddress); //改变地址,实现了逐行显示
}
}
else //Size为0
{
while(*i) //判断字符串结尾,*i为0代表结束
{
WriteLCD_Data(*i);
i++;
WriteLCD_Data(*i);
i++;
StartAddress=ChangeAddress(StartAddress);
}
}
}
/*
void WriteLCDPICTURE 从LCD输出一副图象
StartAddressY是列的地址
StartAddressX是行的地址
tab是要显示的内容
*/
void WriteLCD_Picture(unsigned char StartAddressY,unsigned char StartAddressX,
unsigned char *tab,unsigned char biaozhi)
{
unsigned char a;
unsigned char b;
//WriteLCD_Command(0x0C); //显示打开,光标关,反白显示关
//WriteLCD_Command(0x01); //清除屏幕显示,将DDRAM的地址计数器归零
for(a=0;a<32;a++)
{ if ( biaozhi==0)
{
WriteLCD_Command(StartAddressY);
StartAddressY+=1;
WriteLCD_Command(StartAddressX);
for(b=0;b<16;b++)
{
WriteLCD_Data(tab[b+a*16]);
}
}
else
{
WriteLCD_Command(StartAddressY);
StartAddressY+=1;
WriteLCD_Command(StartAddressX);
for(b=0;b<16;b++)
{
WriteLCD_Data(tab[b+32*16+a*16]);
}
}
}
}
/************************显示自定义的突片***********************/
void WriteLCD_CustomPicture(unsigned char Line_StartAddress,unsigned char Row_StartAddress,
unsigned char *tab,unsigned char biaozhi)
{
unsigned char a;
unsigned char b;
//WriteLCD_Command(0x0C); //显示打开,光标关,反白显示关
//WriteLCD_Command(0x01); //清除屏幕显示,将DDRAM的地址计数器归零
for(a=0;a<16;a++)
{ if ( biaozhi==0)
{
WriteLCD_Command(Line_StartAddress);
Line_StartAddress+=1;
WriteLCD_Command(Row_StartAddress);
for(b=0;b<2;b++)
{
WriteLCD_Data(tab[b+a*2]);
}
}
/* else
{
WriteLCD_Command(StartAddressY);
StartAddressY+=1;
WriteLCD_Command(StartAddressX);
for(b=0;b<16;b++)
{
WriteLCD_Data(tab[b+32*16+a*16]);
}
} */
}
}
void WriteLcd_Number_4bit(unsigned char Address_4bit,unsigned int Number4bit)
{
unsigned char Number4_H; //存放高2位
unsigned char Number4_L; //存放低2位
Number4_H = Number4bit / 100;
Number4_L = Number4bit % 100;
WriteLCD_Number(Address_4bit,Number4_H);
WriteLCD_Number(Address_4bit + 1,Number4_L);
}
/*
//写入数字Number, Number为0-9999的四位数字
void WriteLCD_Number(unsigned char Address,unsigned char Number)
{
if(Address) WriteLCD_Command(Address); //如果地址为0则自动接着原来的位置写. 否则按指定地址写
// WriteLCD_Data((Number /1000) + 0x30); //取出千位数字
WriteLCD_Data((Number/100) + 0x30); //取出百位数字
WriteLCD_Data(Number % 100 / 10 + 0x30); //取出十位数字
WriteLCD_Data(Number % 10 + 0x30); //取出个位数字
}
*/
//写入数字Number, Number为0-99的两位数字
void WriteLCD_Number(unsigned char Address,unsigned char Number)
{
if(Address) WriteLCD_Command(Address); //如果地址为0则自动接着原来的位置写. 否则按指定地址写
WriteLCD_Data((Number/10)+0x30); //取商,取出十位数字
WriteLCD_Data((Number%10)+0x30); //取余,取出个位数字
}
/*写入半角的字符*/
void WriteLCD_CharNumber(unsigned char Address,unsigned char CharNumber)
{
WriteLCD_Command(Address);
WriteLCD_Data(CharNumber);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -