📄 lcddisplay.c
字号:
/**************************************************************************
THE LCD Display
File Name: LCDdisplay.c
Author: Lin Qian
Created: 2008/4/21
Modified: NO
Revision: 1.0
***************************************************************************/
#define __LCDdisplay
#include "INC\\main.h"
#undef __LCDdisplay
#if LCD_Display_Internal_Func_en
//********** 内部函数声明 **********
uchar LCD_Wait(void); // 内部等待函数
void LCD_Write(bit style, uchar input); // 向LCD写入命令或数据
//******************************
// 内部等待函数 ******************************
uchar LCD_Wait (void)
{
LcdRs = 0;
LcdRw = 1; NOP;NOP;
LcdEn = 1; NOP;NOP;
//while(DBPort&0x80);// 在用Proteus仿真时,注意用屏蔽此语句,在调用GotoXY()时,会进入死循环,
// 可能在写该控制字时,该模块没有返回写入完备命令,即DBPort&0x80==0x80
// 实际硬件时打开此语句
LcdEn = 0;
return DBPort;
}
// 向LCD写入命令或数据 ******************************
void LCD_Write (bit style, uchar input)
{
LcdEn = 0;
LcdRs = style;
LcdRw = 0; NOP;
DBPort = input; NOP;NOP;NOP;NOP;
LcdEn = 1; NOP;NOP;
LcdEn = 0; NOP;
LCD_Wait();
}
#endif
// 设置显示模式 ******************************
#if LCD_SetDisplay_en
void LCD_SetDisplay (uchar DisplayMode)
{
LCD_Write(LCD_COMMAND, 0x08 | DisplayMode);
}
#endif
// 设置输入模式 ******************************
#if LCD_SetInput_en
void LCD_SetInput (uchar InputMode)
{
LCD_Write (LCD_COMMAND, 0x04 | InputMode);
}
#endif
// 移动光标或屏幕 ******************************
#if LCD_Move_en
void LCD_Move (uchar object, uchar direction)
{
if( object == LCD_CURSOR ) // 移动光标
LCD_Write(LCD_COMMAND, 0x10 | direction);
if( object == LCD_SCREEN ) // 移动屏幕
LCD_Write(LCD_COMMAND, 0x18 | direction);
}
#endif
// 初始化LCD ******************************
#if LCD_Initial_en
void LCD_Initial (void)
{
LcdEn = 0;
LCD_Write(LCD_COMMAND, 0x38); // 8位数据端口,2行显示,5*7点阵
NOP;NOP; /* 用Protues仿真时由于LCD_Wait功能被屏蔽,所以
需在此处延时等待。实际硬件时应删除。*/
LCD_SetDisplay(LCD_SHOW | LCD_NO_CURSOR); // 开启显示, 无光标
LCD_Write(LCD_COMMAND, LCD_CLEAR_SCREEN); // 清屏
LCD_SetInput(LCD_AC_UP | LCD_NO_MOVE); // AC递增, 画面不动
}
#endif
// 字符写入位置定位 ******************************
#if LCD_GotoXY_en
void LCD_GotoXY (uchar x, uchar y)
{
switch( y )
{
case 0:
LCD_Write(LCD_COMMAND, 0x80 | x);
break;
case 1:
LCD_Write(LCD_COMMAND, 0xC0 | x);
break;
case 2:
LCD_Write(LCD_COMMAND, 0x90 | x);
break;
case 3:
LCD_Write(LCD_COMMAND, 0xD0 | x);
break;
default: break;
}
}
#endif
// 字符写入 ******************************
#if LCD_Print_en
void LCD_Print(uchar *str)
{
while(*str!='\0')
{
LCD_Write(LCD_DATA, *str);
str++;
}
}
#endif
// int型数据转换为字符串 ******************************
#if IntToStr_en
void IntToStr(long num, uchar *str, uchar n, bit clr0)
// num: 需要转换数据
// str: 转换后字符串的存储首地址
// n: 输出字符串的长度
// clr0: 高位清零选择. 1-清除高位的零; 0-保留高位的零
{
char digit = n; // 位选
str[digit--] = '\0';
// 将num的各位数字送到显示缓冲区
do
{
str[digit--] = (num % 10) + '0';
num /= 10;
}
while( digit >= 0 && num != 0 );
for( ; digit>=0; digit-- ) // 多余位的处理
if (clr0)
str[digit] = ' ';
else
str[digit] = '0';
}
#endif
//************************************************************
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -