⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lcd1602.h

📁 12887+1602drive goode luck!!
💻 H
字号:
#ifndef LCD1602_HEADER_FILE
#define LCD1602_HEADER_FILE
//=======================================
//LCD16B20引脚图
// 1  2  3  4  5  6  7  8  9  10 11 12 13 14 15 16
// |  |  |  |  |  |  |__|__|__|__|__|__|__|  |  |
//GND |  VO RS |  E              |           +  -
//   VCC      R/W              DATA PORT      LED

//定义数据接口位数
#define LCD_DL			   4

//定义LCD16B20与单片机之间的连接引脚
#if LCD_DL>4
#define LCD_RS             P2_0		//寄存器选择,0表示选择指令寄存器;1表示选择数据寄存器 LCD_RS(pin:4)
#define LCD_RW             P2_1		//读写控制,1表示读取;0表示写入 LCD_RW(pin:5)
#define LCD_EN             P2_2 	//当R/W=0,LCD_EN低电平有效;当R/W=1,LCD_EN高电平有效 LCD_EN(pin:6)
#define LCD_LED            P2_3     //背光灯控制
#define LCD_Data_Port      P3		//数据端口(AT89S52:P3_0:P3_7=LCD:pin7:pin14) LCD_Data_Port(pin14~pin7,D7~D0)
#else
#define LCD_RS             P2_0		//寄存器选择,0表示选择指令寄存器;1表示选择数据寄存器 LCD_RS(pin:4)
#define LCD_RW             P2_1		//读写控制,1表示读取;0表示写入 LCD_RW(pin:5)
#define LCD_EN             P2_2 	//当R/W=0,LCD_EN低电平有效;当R/W=1,LCD_EN高电平有效 LCD_EN(pin:6)
#define LCD_LED            P2_3     //背光灯控制
#define LCD_Data_Port      P2		//数据端口(AT89S52:P1_4:P1_7=LCD:pin11:pin14) 
#endif

//晶振频率设定(MHZ)
#define Fosc			   12

//是否有自定义的字符(CustomChar为自定义字符的个数)
#define CustomCharCount		   8	

//函数允许编译声明
#define LCD_EN_readBFAC			1 //只有使用LCD1620该声明必须是1
#define LCD_EN_waitForReady		1 //只有使用LCD1620该声明必须是1
#define LCD_EN_SendCommand		1 //只有使用LCD1620该声明必须是1


#define LCD_EN_reset		    1 //调用LCDSetFunction()、LCDSetDisplayModel()、LCDSetInPutModel()、LCDClear()、delaynms()模块
#define LCD_EN_delaynms			1 //如果LCD_EN_reset=1,则LCD_EN_delaynms必须=1
#define LCD_EN_setFunction      1 //如果LCD_EN_reset=1,则LCD_EN_setFunction必须=1
#define LCD_EN_setDisplayModel	1 //如果LCD_EN_reset=1,则LCD_EN_setDisplayModel必须=1
#define LCD_EN_setInputModel    1 //如果LCD_EN_reset=1,则LCD_EN_setInputModel必须=1
#define LCD_EN_clear		    1 //如果LCD_EN_reset=1,则LCD_EN_clear必须=1

//可选函数,需要就设置为1,如果不需要设置为0,这样可以节省ROM
#define LCD_EN_light			1
#define LCD_EN_goHome			0
#define LCD_EN_shiftRight		0
#define LCD_EN_shiftLeft		0
#define LCD_EN_cursorRight		0
#define LCD_EN_cursorLeft		0
#define LCD_EN_readData			0


#define LCD_EN_writeData		1
#define LCD_EN_setXY			1
#define LCD_EN_putChar			0 //如果LCD_EN_putChar=1,则LCD_EN_setXY,LCD_EN_writeData必须=1
#define LCD_EN_printf			0 //如果LCD_EN_printf=1,则LCD_EN_setXY,LCD_EN_writeData必须=1
#define LCD_EN_displayStr		1 //如果LCD_EN_displayStr=1,则LCD_EN_writeData必须=1
#define LCD_EN_displayChar      1 //不需要指定位置显示字符,则LCD_EN_writeData必须=1
#define LCD_EN_clearLine		1 //如果LCD_EN_clearLine=1,则LCD_EN_setXY,LCD_EN_writeData必须=1


//自定义字符的数据表在LCD1602.C文件中
/*
//自定义字符的数据表
//定义一个宏,该宏在除了LCD1602.C中使用之外,其他C文件不需要定义这个宏,否则有变量CustomChar重复定义错误
//这样还不可以,因为进行了初始化了
#ifdef LCD1602VAR
#define EXTERN   //定义变量
#else
#define EXTERN extern  //声明变量
#endif

#if CustomCharCount
EXTERN unsigned char code CustomChar[CustomCharCount][8]=
{
   {0xa,0x1b,0xa,0x1f,0xa,0xb,0x1a,0x11},
   {0,0,0xa,0x1f,0x1f,0xe,0x4,0},
   {0,0x18,0x1c,0x1e,0x1f,0x1e,0x1c,0x18},
   {0x18,0x1b,4,4,4,4,4,3}
};
#endif
*/
//函数接口声明
/********************************************
*  函数说明:LCD复位                        *
*********************************************/
/*
1.延时15ms
2.写入指令:0x38(不检测忙信号)
3.延时5ms
4.写入指令:0x38(不检测忙信号)
5.延时5ms
6.写入指令:0x38(不检测忙信号)
以后读写都要检测忙信号
7.如果定义8位数据接口设置8位数据线,两行显示,字体格式:5*8
(7).如果定义是4为数据接口设置8位数据线,两行显示,字体格式:5*8
8.设置显示画面、光标、光标是否闪烁开关
9.设置输入模式,默认增量方式,画面不动,光标移动
10.清屏
*/
extern void LCDreset(void);

/*************************************************
*  函数说明:清除指定的一行显示,然后光标回到行首 *
*  输入参数:bit line: 如果line=0,表示是第一行   *
*                      如果line=1,表示是第二行   *
**************************************************/
extern void LCDclearLine(bit line);

/************************************************************
* 从指定位置开始显示字符串,如果是从第一行开始显示的,但是
* 无法显示完,自动从第二行开始显示,如果还没有显示完,就将余下的
*抛弃;如果是从第二行开始显示的,但是无法显示完,
*就抛弃没有显示的内容.
**************************************************************/
extern void LCDprintf(unsigned char X,unsigned char Y,char *String);

/********************************************************
*  函数说明:指定XY坐标显示一个字符                     *
*  输入参数:unsigned char X:   X坐标					*
*            unsigned cahr Y:   Y坐标					*
*            char          ch:  被显示的字符			*
********************************************************/
extern void LCDputChar(unsigned char X,unsigned char Y,char ch);

/********************************************************
*  函数说明:LCD字符串显示函数                          *
********************************************************/
extern void LCDdisplayStr(char *String);

/**************************************
*  函数说明:背光灯控制               *
*  输入参数: bit onoff                *
***************************************/
extern void LCDlight(bit onoff);


//光标往左边移动n个字符位置
extern void LCDcursorLeft(unsigned char n);
//光标往右边移动n个字符位置
extern void LCDcursorRight(unsigned char n);
//画面和光标一起左边移动n个字符位置
extern void LCDshiftLeft(unsigned char n);
//画面和光标一起右边移动n个字符位置
extern void LCDshiftRight(unsigned char n);


/*******************************************************************
*  函数说明:设置数据接口位数是4为还是8位,显示行数是一行还是二行,  *
             字体格式是5*7还是5*10                                 *
*  输入参数: bit DL:  表示数据接口长度,DL=1,表示8位;DL=0,表示4为   *
*            bit N:   表示显示行数,N=1,表示两行;N=0,表示一行       *
*            bit F:   表示字体格式,F=1,表示5*10;F=0,表示5*7        *
********************************************************************/
extern void LCDsetFunction(bit DL,bit N,bit F);

/***************************************************************
*  函数说明:显示模式设置,设置画面、光标以及光标是否闪烁开关   *
*  输入参数: bit D:  表示画面是否显示                          *
*            bit C:  表示光标是否显示                          *
*            bit B:  表示光标是否闪烁                          *
****************************************************************/
extern void LCDsetDisplayModel(bit D,bit C,bit B);

/********************************************************
*  函数说明:输入方式设置,设置光标、画面移动方式       *
*  输入参数: bit I_D:表示读写之后AC情况,I_D=1           *
*                              表示AC+1;I_D=0表示AC-1; *
*            bit S:  表示画面是否移动,S=1表示           *
*                              画面平移;S=0表示画面不动 *
********************************************************/
/*
当S=1且数据写入DD RAM中时候,显示将全部左边移动(I_D=1),或者全部右边移动(I_D=0),即光标不移动
当S=0,画面不动,光标移动(左边移动:I_D=0,右边移动:I_D=1)
*/
extern void LCDsetInputModel(bit I_D,bit S);

/*******************************************************************************
*  函数说明:LCD软复位,DD RAM的内容不变,但光标和光标所在的字符回到左上角原点  *
********************************************************************************/
extern void LCDgoHome(void);
extern void LCDclear(void);
extern void LCDdisplayChar(unsigned char ch);
//=======================================
#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -