📄 rd_lcd1602b.c
字号:
LCD_E = HIGH;
LCD_E = LOW;
}
#else
LCD_DATA_PORT = Data;
LCD_E = HIGH;
LCD_E = LOW;
#endif
SetRead;
SetCommand;
}
/***********************************************************
* 函数说明:等待LCD空闲状态函数 *
* 输入: 无 *
* 输出: 无 *
* 调用函数:LCDDelayUs() *
***********************************************************/
void LCDWaitForReady(void)
{
#ifdef _USE_LCD_ONLY_WRITE
LCDDelayUs(500);
#else
SetRead;
SetCommand;
LCD_E = HIGH;
while (LCD_BF == 1); //RW=1,读PD7,为0表示空闲;
LCD_E = LOW;
#endif
}
#else
/***********************************************************
* 函数说明:向LCD发送指令函数 *
* 输入: 需要发送的指令 *
* 输出: 无 *
* 调用函数:LCD_SEND_HALF_CHAR_HIGH() *
* LCD_SEND_HALF_CHAR_LOW() *
***********************************************************/
void LCDSendCommand(char Command)
{
SetCommand;
{
SetEnable;
LCD_SEND_HALF_CHAR_HIGH(Command);
SetDisable;
}
{
SetEnable;
LCD_SEND_HALF_CHAR_LOW(Command);
SetDisable;
}
SetCommand;
}
/***********************************************************
* 函数说明:向LCD发送数据函数 *
* 输入: 需要发送的数据 *
* 输出: 无 *
* 调用函数:LCD_SEND_HALF_CHAR_HIGH() *
* LCD_SEND_HALF_CHAR_LOW() *
***********************************************************/
void LCDSendData(char Data)
{
SetData;
{
SetEnable;
LCD_SEND_HALF_CHAR_HIGH(Data);
SetDisable;
}
{
SetEnable;
LCD_SEND_HALF_CHAR_LOW(Data);
SetDisable;
}
SetCommand;
}
/***********************************************************
* 函数说明:等待LCD空闲状态函数 *
* 输入: 无 *
* 输出: 无 *
* 调用函数:LCDDelayUs() *
***********************************************************/
void LCDWaitForReady(void)
{
LCDDelayUs(30);
}
#endif
/***********************************************************
* 函数说明:设置显示坐标函数 *
* 输入: x,y坐标值 *
* 输出: 无 *
* 调用函数:LCDWaitForReady() LCDSendCommand() *
***********************************************************/
void LCDSetXY(char X,char Y)
{
char Address;
if (Y == 0)
{
Address = 0x80 + X;
}
else
{
Address = 0xc0 + X;
}
LCDWaitForReady();
LCDSendCommand(Address);
}
/***********************************************************
* 函数说明:LCD字符串显示函数 *
* 输入: 要显示的字符串指针 *
* 输出: 无 *
* 调用函数:LCDWaitForReady() LCDSendData() *
***********************************************************/
void LCDDisplayString(char *String)
{
while(*String)
{
LCDWaitForReady();
LCDSendData(*String);
String++;
}
}
/***********************************************************
* 函数说明:数值显示函数(HEX) *
* 输入: 需要显示的数字(无符号长整形) *
* 输出: 无 *
* 调用函数:LCDSendData() *
***********************************************************/
void LCDDisplayNum(unsigned long Num,char BitCount)
{
char a = 0;
for (a = 8-BitCount ;a<8;a++)
{
LCDSendData(CHR[(Num<<(a<<2))>>28]);
}
}
/***********************************************************
* 函数说明:滚屏字幕效果 *
* 输入: 需要滚屏的字符串 长度 位置 *
* 输出: 无 *
* 调用函数:LOCATE() PRINT() *
***********************************************************/
void RunString(char *String,char Y,char StartX,char EndX)
{
static char StringHead = 0;
char SCREEN[17];
char a = 0;
char Point = StringHead;
char StringLong = StringLength(String);
static unsigned int RunTimeCounter = 0;
for (a = 0;a<EndX - StartX + 1;a++)
{
SCREEN[a] = String[Point];
Point ++;
if (Point == StringLong)
{
Point = 0;
}
}
for (;a < 17;a++)
{
SCREEN[a] = 0;
}
RunTimeCounter ++;
if (RunTimeCounter > LCD_RUN_STRING_SPEED)
{
StringHead ++;
RunTimeCounter = 0;
if (StringHead == StringLong)
{
StringHead = 0;
}
}
LOCATE(StartX,Y)
PRINT(SCREEN)
}
/***********************************************************
* 函数说明:字符串长度测试函数 *
* 输入: 字符串指针 *
* 输出: 字符串的长度 *
* 调用函数:无 *
***********************************************************/
char StringLength(char *String)
{
char n = 0;
while (*String)
{
n++;
String ++;
}
return n;
}
/***********************************************************
* 函数说明:闪烁显示函数 *
* 输入: 要显示的字符串、显示的光标、x,y坐标位置 *
* 输出: 无 *
* 调用函数:LOCATE() LCDWaitForReady() LCDSendData() *
***********************************************************/
void Flash(char *String,char Icon,char X,char Y)
{
char a = 0;
char StringLong = StringLength(String);
if ((SYS_TIMER_MS_ADD_UNTILL_OVF & LCD_FLASH_TIME_OUT)
> (LCD_FLASH_TIME_OUT >> 1))
{
LOCATE(X,Y)
PRINT(String)
}
else
{
for (a = X;a < (X+StringLong);a++)
{
LOCATE(a,Y)
LCDWaitForReady();
LCDSendData(Icon);
}
}
}
/***********************************************************
* 函数说明:字幕GIF函数 *
* 输入: 要显示的字符串集合指针,字符串数目,位置 *
* 输出: 无 *
* 调用函数:LOCATE() PRINT() *
***********************************************************/
void FlashStringGroup(char String[][17],char StringCounter,char X,char Y)
{
static char Pictures = 0;
static char DispState = 0;
if ((SYS_TIMER_MS_ADD_UNTILL_OVF & LCD_FLASH_STRING_GROUP_TIME_OUT)
> (LCD_FLASH_STRING_GROUP_TIME_OUT >> 1))
{
if (DispState == 0)
{
Pictures ++;
if (Pictures == StringCounter)
{
Pictures = 0;
}
DispState = 1;
}
}
else
{
if (DispState == 1)
{
Pictures ++;
if (Pictures == StringCounter)
{
Pictures = 0;
}
DispState = 0;
}
}
LOCATE(X,Y);
PRINT(String[Pictures]);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -