📄 lcd1601.c
字号:
#include <REG51.H>
#include <INTRINS.H> //定义函数
sbit LcdRs = P1^0;
sbit LcdRw = P1^1;
sbit LcdEn = P1^2;
sfr DBPort = 0x80; //P0=0x80,P1=0x90,P2=0xA0,P3=0xB0.数据端口
/*--------------------------
等待液晶不忙
--------------------------*/
void WaitForEnable()
{
DBPort=0xff;
LcdRs=0;
LcdRw=1;
_nop_();
LcdEn=1;
_nop_();
_nop_();
while(DBPort&0x80);
LcdEn=0;
}
/*--------------------------
向液晶写控制字或者数据
--------------------------*/
#define LCD_COMMAND 0 // Command
#define LCD_DATA 1 // Data
#define LCD_CLEAR_SCREEN 0x01 // 清屏
#define LCD_HOMING 0x02 // 光标返回原点
void LCD_Write(bit style, unsigned char input)
{
WaitForEnable();
LcdEn=0;
LcdRs=style;
LcdRw=0;
_nop_();
DBPort=input;
_nop_();
LcdEn=1;
_nop_();
_nop_();
LcdEn=0;
}
/*--------------------------
向液晶写数据
--------------------------*/
//设置显示模式************************************************************
#define LCD_SHOW 0x04 //显示开
#define LCD_HIDE 0x00 //显示关
#define LCD_CURSOR 0x02 //显示光标
#define LCD_NO_CURSOR 0x00 //无光标
#define LCD_FLASH 0x01 //光标闪动
#define LCD_NO_FLASH 0x00 //光标不闪动
void LCD_SetDisplay(unsigned char DisplayMode)
{
LCD_Write(LCD_COMMAND, 0x08|DisplayMode);
}
//设置输入模式************************************************************
#define LCD_AC_UP 0x02
#define LCD_AC_DOWN 0x00 // default
#define LCD_MOVE 0x01 // 画面可平移
#define LCD_NO_MOVE 0x00 //default
void LCD_SetInput(unsigned char InputMode)
{
LCD_Write(LCD_COMMAND, 0x04|InputMode);
}
//移动光标或屏幕************************************************************
#define LCD_CURSOR 0x02
#define LCD_SCREEN 0x08
#define LCD_LEFT 0x00
#define LCD_RIGHT 0x04
void LCD_Move(unsigned char object, unsigned char direction)
{
if(object==LCD_CURSOR)
LCD_Write(LCD_COMMAND,0x10|direction);
if(object==LCD_SCREEN)
LCD_Write(LCD_COMMAND,0x18|direction);
}
/*--------------------------
液晶初始化
--------------------------*/
void LCD_Initial()
{
LcdEn=0;
LCD_Write(LCD_COMMAND,0x38); //8位数据端口,2行显示,5*7点阵
LCD_Write(LCD_COMMAND,0x38);
LCD_SetDisplay(LCD_SHOW|LCD_CURSOR); //开启显示, 光标
LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN); //清屏
LCD_SetInput(LCD_AC_UP|LCD_NO_MOVE); //AC递增, 画面不动
}
/*--------------------------
显示光标定位
--------------------------*/
void Disp_XY(unsigned char x, unsigned char y)
{
if(y==0)
LCD_Write(LCD_COMMAND,0x80|x);
if(y==1)
LCD_Write(LCD_COMMAND,0x80|(x+0x40));
}
/*--------------------------
按指定位置显示一个字符
--------------------------*/
void DispOneChar(unsigned char xx, unsigned char yy, unsigned char onechar)
{
Disp_XY(xx,yy);
LCD_Write(LCD_DATA,onechar);
}
/*--------------------------
显示一串字符
--------------------------*/
void Display(unsigned char xx,unsigned char yy,unsigned char data *str)
{
do{
Disp_XY(xx,yy);
LCD_Write(LCD_DATA,*str);
str++;
xx++;
}while(xx<8);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -