📄 lcd.h
字号:
#include "main.h"
unsigned char databuffer[3];
#define LCD_Data P0
sbit LCD_RS =P1^2;
sbit LCD_E =P1^0;
sbit LCD_WR =P1^1;
/*
返回值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)
{
// if(ET0) OSWait(K_TMO,1);
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)))
{
}
} */
WriteLCD_Data(*i);
i++;
WriteLCD_Data(*i);
//i++;
StartAddress=ChangeAddress(StartAddress); //改变地址,实现了逐行显示
}
}
else //Size为0
{
while(*i) //判断字符串结尾,*i为0代表结束
{
WriteLCD_Data(*i);
i++;
WriteLCD_Data(*i);
i++;
StartAddress=ChangeAddress(StartAddress);
}
}
}
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);
}
void WriteLcd_Number_6bit(unsigned char Address_6bit,unsigned char Number6bit)
{
unsigned char Number6_H;
unsigned int temp;
unsigned char Number4_H; //存放高2位
unsigned char Number4_L; //存放低2位
Number6_H = Number6bit /10000;
temp=Number6bit-Number6_H*100;
Number4_H = temp / 100;
Number4_L = temp % 100;
WriteLCD_Number(Address_6bit,Number6_H);
WriteLCD_Number(Address_6bit+1,Number4_H);
WriteLCD_Number(Address_6bit + 2,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); //取余,取出个位数字
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -