1602液晶显示
#define LCM_RW P2_0 //定义引脚 #define LCM_RS P2_1 #define LCM_E P2_2 #define LCM_Data P1 #define Busy 0x80 //用于检测LCM状态字中的Busy标识 #include <at89x51.h> void WriteDataLCM(unsigned char WDLCM); void WriteCommandLCM(unsigned char WCLCM,BuysC); unsigned char ReadDataLCM(void); unsigned char ReadStatusLCM(void); void LCMInit(void); void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData); void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData); void Delay5Ms(void); void Delay400Ms(void); unsigned char code cdle_net[] = {"www.cdle.net"}; unsigned char code email[] = {"pnzwzw@cdle.net"}; 根据给定的文件信息,我们可以总结出以下关于1602液晶显示的相关知识点: ### 1. 定义与配置 在代码的开始部分,通过宏定义的方式对1602液晶显示模块(LCM)的接口进行了配置: - `#define LCM_RW P2_0`:定义P2口的第0位为读写选择信号线(RW),当RW为0时进行写操作,为1时进行读操作。 - `#define LCM_RS P2_1`:定义P2口的第1位为指令/数据选择信号线(RS),当RS为0时进行指令写入,为1时进行数据写入。 - `#define LCM_E P2_2`:定义P2口的第2位为使能信号线(E),当E信号由低变高再变低时,完成一次指令或数据的传输。 - `#define LCM_Data P1`:定义P1口为数据端口,用于发送指令和数据到液晶显示屏。 - `#define Busy 0x80`:定义一个常量Busy,值为0x80,用于检测液晶显示屏的状态字中的Busy标志位,当液晶屏处于繁忙状态时,该标志位被置1。 ### 2. 函数定义 #### (1) 写入数据到LCD - `void WriteDataLCM(unsigned char WDLCM);` - 功能:将数据WDLCM写入液晶屏。 - 步骤:首先调用`ReadStatusLCM()`函数检查液晶屏是否空闲;然后设置数据端口为WDLCM,设置RS为1表示写入的是数据,RW为0表示是写操作,并通过控制E信号实现数据的写入。 #### (2) 写入命令到LCD - `void WriteCommandLCM(unsigned char WCLCM,BuysC);` - 参数:WCLCM为要写入的命令,BuysC为控制参数,当其为0时不执行任何读状态的操作。 - 功能:将命令WCLCM写入液晶屏。 - 步骤:如果BuysC不为0,则先调用`ReadStatusLCM()`函数检查液晶屏是否空闲;然后设置数据端口为WCLCM,设置RS为0表示写入的是指令,RW为0表示是写操作,并通过控制E信号实现命令的写入。 #### (3) 从LCD读取数据 - `unsigned char ReadDataLCM(void);` - 功能:从液晶屏读取数据。 - 步骤:设置RS为1表示读取数据,RW为1表示是读操作,并通过控制E信号实现数据的读取。 #### (4) 从LCD读取状态 - `unsigned char ReadStatusLCM(void);` - 功能:从液晶屏读取状态。 - 步骤:设置RS为0表示读取指令,RW为1表示是读操作,并通过控制E信号实现状态的读取;循环检查Busy标志位直到液晶屏不再繁忙。 #### (5) 初始化LCD - `void LCMInit(void);` - 功能:初始化液晶屏。 - 步骤:先清除数据端口,然后多次写入0x38命令,设置液晶屏的工作模式为8位数据宽度、2行显示、5x8点阵字符大小。 ### 3. 主程序流程 - 在主函数`main()`中,首先调用`Delay400Ms()`函数等待一段时间,让液晶屏进入稳定状态。 - 调用`LCMInit()`函数初始化液晶屏。 - 调用`DisplayListChar()`函数在液晶屏上显示字符串。 - 最后进入无限循环。 ### 4. 显示字符串 - `void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData);` - 参数:X和Y分别为要显示的位置的列号和行号,DData指向要显示的字符串数组。 - 功能:在指定位置显示字符串。 - 步骤:根据X和Y设置光标位置,然后依次读取字符串数组中的每个字符并调用`WriteDataLCM()`函数写入液晶屏。 这段代码实现了1602液晶显示屏的基本操作功能,包括初始化、写入数据、写入指令、读取数据以及显示字符串等,适用于基于AT89S51微控制器的应用开发。