📄 lcd1602模块4线.c
字号:
/*---------------------------------------------------------
液晶LCD1602C 使用4条数据线(D4~D7)
-----------------------------------------------------------*/
/*-------------------------------------------------------------
LCD引脚定义
1---GND
2---VCC
3---VO
4---RS
5---RW
6---EN
7到14--D0-D7
15--背景灯+
16--背景灯-
-----------------------------------------------------------------*/
#include <at89X52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit LCD_1602_RW = P2^0; /*实时LCD线引脚定义 */
sbit LCD_1602_RS = P2^1;
sbit LCD_1602_EN = P2^2;
sbit LCD_1602_Led = P2^7;
sbit LCD_1602_Data_4 = P2^3;
sbit LCD_1602_Data_5 = P2^4;
sbit LCD_1602_Data_6 = P2^5;
sbit LCD_1602_Data_7 = P2^6;
/*********************************************************************/
/* lcd1602函数的声明*/
/*********************************************************************/
void LCD_1602_Init(void);
void LCD_1602_EN_Write(void);
void LCD_1602_Write_Command(unsigned char LCD_1602_Command) ;
void LCD_1602_Write_1_Data(unsigned char LCD_1602_Recdata);
void LCD_1602_Set_xy (unsigned char x, unsigned char y);
void LCD_write_string(unsigned char X,unsigned char Y,unsigned char *s);
void LCD_1602_Write_Data(unsigned char X,unsigned char Y,unsigned char LCD_1602_Recdata);
void LCD_1602_Delay_n_us(unsigned int n);
void LCD_1602_Delay_n_ms(unsigned int n);
/********************************************************************
* 名称: LCD_1602_Delay_1_us
* 说明:
* 功能: 1us延时函数
* 调用:
* 输入:
* 返回值: 无
***********************************************************************/
void LCD_1602_Delay_1_us(void)
{
_nop_();
}
/********************************************************************
* 名称: LCD_1602_Delay_n_us
* 说明:
* 功能: n_us延时函数
* 调用:
* 输入:
* 返回值: 无
***********************************************************************/
void LCD_1602_Delay_n_us(unsigned int n)
{
unsigned int i=0;
for (i=0;i<n;i++)
LCD_1602_Delay_1_us();
}
/********************************************************************
* 名称: LCD_1602_Delay_1_ms
* 说明:
* 功能: 1_ms延时函数
* 调用:
* 输入:
* 返回值: 无
***********************************************************************/
void LCD_1602_Delay_1_ms(void) //1ms延时函数
{
unsigned int i;
for (i=0;i<1140;i++);
}
/********************************************************************
* 名称: LCD_1602_Delay_n_ms
* 说明:
* 功能: n_ms延时函数
* 调用:
* 输入:
* 返回值: 无
***********************************************************************/
void LCD_1602_Delay_n_ms(unsigned int n)
{
unsigned int i=0;
for (i=0;i<n;i++)
LCD_1602_Delay_1_ms();
}
/********************************************************************
* 名称: LCD_1602_Init
* 说明:
* 功能: 1602液晶初始化
* 调用: LCD_1602_Write_Command,LCD_1602_Delay_n_us,LCD_1602_Delay_n_ms
* 输入:
* 返回值: 无
***********************************************************************/
void LCD_1602_Init(void)
{
LCD_1602_Write_Command(0x28);
LCD_1602_Delay_n_us(40);
LCD_1602_Write_Command(0x28);
LCD_1602_Delay_n_us(40);
LCD_1602_Write_Command(0x28);
LCD_1602_Delay_n_us(40);
LCD_1602_EN_Write();
LCD_1602_Delay_n_us(40);
LCD_1602_Write_Command(0x28); //4位显示
LCD_1602_Write_Command(0x0c); //显示开
LCD_1602_Write_Command(0x01); //清屏
LCD_1602_Delay_n_ms(2);
}
/********************************************************************
* 名称: LCD_1602_EN_Write
* 说明:
* 功能: 1602液晶使能
* 调用:
* 输入:
* 返回值: 无
***********************************************************************/
void LCD_1602_EN_Write(void) //液晶使能
{ LCD_1602_RW=0; //RW=0
LCD_1602_EN=1;
_nop()_;
LCD_1602_EN=0;
}
/********************************************************************
* 名称: LCD_1602_Write_Command
* 说明:
* 功能: 1602液晶写命令
* 调用: LCD_1602_Delay_n_us,LCD_1602_EN_Write
* 输入:
* 返回值: 无
***********************************************************************/
void LCD_1602_Write_Command(unsigned char LCD_1602_Command)
{
LCD_1602_Delay_n_us(16);
LCD_1602_RS = 0;
LCD_1602_RW = 0;
LCD_1602_Data_4=LCD_1602_Command&0x10;
LCD_1602_Data_5=LCD_1602_Command&0x20;
LCD_1602_Data_6=LCD_1602_Command&0x40;
LCD_1602_Data_7=LCD_1602_Command&0x80;
LCD_1602_EN_Write();
LCD_1602_Data_4=LCD_1602_Command&0x01;
LCD_1602_Data_5=LCD_1602_Command&0x02;
LCD_1602_Data_6=LCD_1602_Command&0x04;
LCD_1602_Data_7=LCD_1602_Command&0x08;
LCD_1602_EN_Write();
}
/********************************************************************
* 名称: LCD_1602_Write_1_Data
* 说明:
* 功能: 1602液晶写数据
* 调用: LCD_1602_Delay_n_us,LCD_1602_EN_Write
* 输入:
* 返回值: 无
***********************************************************************/
void LCD_1602_Write_1_Data(unsigned char LCD_1602_Recdata)
{
LCD_1602_Delay_n_us(16);
LCD_1602_RS = 1; //RS=1
LCD_1602_RW = 0;
LCD_1602_Data_4=LCD_1602_Command&0x10;
LCD_1602_Data_5=LCD_1602_Command&0x20;
LCD_1602_Data_6=LCD_1602_Command&0x40;
LCD_1602_Data_7=LCD_1602_Command&0x80;
LCD_1602_EN_Write();
LCD_1602_Data_4=LCD_1602_Command&0x01;
LCD_1602_Data_5=LCD_1602_Command&0x02;
LCD_1602_Data_6=LCD_1602_Command&0x04;
LCD_1602_Data_7=LCD_1602_Command&0x08;
LCD_1602_EN_Write();
}
/********************************************************************
* 名称: LCD_1602_Set_xy
* 说明:
* 功能: 1602液晶写指定的地址
* 调用: LCD_1602_Write_Command
* 输入:
* 返回值: 无
***********************************************************************/
void LCD_1602_Set_xy( unsigned char x, unsigned char y ) //写地址函数
{
unsigned char LCD_1602_Address;
if (y == 0) LCD_1602_Address = 0x80 + x;
else LCD_1602_Address = 0xc0 + x;
LCD_1602_Write_Command(LCD_1602_Address);
}
/********************************************************************
* 名称: LCD_1602_Write_Data
* 说明:
* 功能: 1602液晶在指定地址写入数据显示出来
* 调用: LCD_1602_Write_1_Data,LCD_1602_Set_xy
* 输入:
* 返回值: 无
***********************************************************************/
void LCD_1602_Write_Data(unsigned char X,unsigned char Y,unsigned char LCD_1602_Recdata)
{
LCD_1602_Set_xy(X, Y); //写地址
LCD_1602_Write_1_Data(LCD_1602_Recdata);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -