如何用51单片机控制LCD1602

 时间:2026-04-21 18:56:11

1、新建工程

如何用51单片机控制LCD1602

如何用51单片机控制LCD1602

如何用51单片机控制LCD1602

如何用51单片机控制LCD1602

如何用51单片机控制LCD1602

如何用51单片机控制LCD1602

如何用51单片机控制LCD1602

2、新建代码文件

如何用51单片机控制LCD1602

如何用51单片机控制LCD1602

如何用51单片机控制LCD1602

如何用51单片机控制LCD1602

3、复制代码到文件

代码:

/***************************************************************************

标题:LCD1602

作者:百度ID计得劲滋润爽

说明:本程序在液晶LCD1602上显示两行字符

******************************************************************************/

//头文件:

#include <reg52.h>

/********IO引脚定义***********************************************************/

sbit LCD_RS=P1^0;//定义引脚

sbit LCD_RW=P1^1;

sbit LCD_E=P1^2;

/********宏定义***********************************************************/

#define LCD_Data P0

#define Busy    0x80 //用于检测LCD状态字中的Busy标识

/********数据定义*************************************************************/

unsigned char code uctech[] = {"LCD1602  DJZRS"};

unsigned char code net[] = {"51hahahahahaha51"};

/********函数声明*************************************************************/

void WriteDataLCD(unsigned char WDLCD);//写数据

void WriteCommandLCD(unsigned char WCLCD,BuysC);//写命令

unsigned char ReadDataLCD(void);//读数据

unsigned char ReadStatusLCD(void);//读状态

void LCDInit(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);//延时

/***********主函数开始********************************************************/

void main(void)

{

Delay400Ms(); //启动等待,等LCD讲入工作状态

LCDInit(); //初始化

Delay5Ms(); //延时片刻(可不要)

DisplayListChar(0, 0, uctech);

DisplayListChar(0, 5, net);

ReadDataLCD();//测试用句无意义

while(1);

}

/***********写数据********************************************************/

void WriteDataLCD(unsigned char WDLCD)

{

 ReadStatusLCD(); //检测忙

 LCD_Data = WDLCD;

 LCD_RS = 1;

 LCD_RW = 0;

 LCD_E = 0; //若晶振速度太高可以在这后加小的延时

 LCD_E = 0; //延时

 LCD_E = 1;

}

/***********写指令********************************************************/

void WriteCommandLCD(unsigned char WCLCD,BuysC) //BuysC为0时忽略忙检测

{

 if (BuysC) ReadStatusLCD(); //根据需要检测忙

 LCD_Data = WCLCD;

 LCD_RS = 0;

 LCD_RW = 0; 

 LCD_E = 0;

 LCD_E = 0;

LCD_E = 1; 

}

/***********读数据********************************************************/

unsigned char ReadDataLCD(void)

{

 LCD_RS = 1; 

 LCD_RW = 1;

 LCD_E = 0;

 LCD_E = 0;

 LCD_E = 1;

 return(LCD_Data);

}

/***********读状态*******************************************************/

unsigned char ReadStatusLCD(void)

{

 LCD_Data = 0xFF; 

 LCD_RS = 0;

 LCD_RW = 1;

 LCD_E = 0;

 LCD_E = 0;

 LCD_E = 1;

 while (LCD_Data & Busy); //检测忙信号

 return(LCD_Data);

}

/***********初始化********************************************************/

void LCDInit(void)

{

 LCD_Data = 0;

 WriteCommandLCD(0x38,0); //三次模式设置,不检测忙信号

 Delay5Ms(); 

 WriteCommandLCD(0x38,0);

 Delay5Ms(); 

 WriteCommandLCD(0x38,0);

 Delay5Ms(); 

 WriteCommandLCD(0x38,1); //显示模式设置,开始要求每次检测忙信号

 WriteCommandLCD(0x08,1); //关闭显示

 WriteCommandLCD(0x01,1); //显示清屏

 WriteCommandLCD(0x06,1); //显示光标移动设置

 WriteCommandLCD(0x0C,1); //显示开及光标设置

}

/***********按指定位置显示一个字符*******************************************/

void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData)

{

 Y &= 0x1;

 X &= 0xF; //限制X不能大于15,Y不能大于1

 if (Y) X |= 0x40; //当要显示第二行时地址码+0x40;

 X |= 0x80; //算出指令码

 WriteCommandLCD(X, 0); //这里不检测忙信号,发送地址码

 WriteDataLCD(DData);

}

/***********按指定位置显示一串字符*****************************************/

void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData)

{

 unsigned char ListLength;

 ListLength = 0;

 Y &= 0x1;

 X &= 0xF; //限制X不能大于15,Y不能大于1

 while (DData[ListLength]>=0x20){ //若到达字串尾则退出

   if (X <= 0xF){ //X坐标应小于0xF

     DisplayOneChar(X, Y, DData[ListLength]); //显示单个字符

     ListLength++;

     X++;

    }

  }

}

/***********短延时********************************************************/

void Delay5Ms(void)

{

 unsigned int TempCyc = 5552;

 while(TempCyc--);

}

/***********长延时********************************************************/

void Delay400Ms(void)

{

 unsigned char TempCycA = 5;

 unsigned int TempCycB;

 while(TempCycA--){

  TempCycB=7269;

  while(TempCycB--);

 }

}

4、把文件添加到组

如何用51单片机控制LCD1602

如何用51单片机控制LCD1602

如何用51单片机控制LCD1602

如何用51单片机控制LCD1602

5、编译

如何用51单片机控制LCD1602

如何用51单片机控制LCD1602

如何用51单片机控制LCD1602

如何用51单片机控制LCD1602

6、代码简介。具体请看看代码注释

如果你改了代码,就要重新编译

如何用51单片机控制LCD1602

如何用51单片机控制LCD1602

如何用51单片机控制LCD1602

7、连线,下载

如何用51单片机控制LCD1602

如何用51单片机控制LCD1602

如何用51单片机控制LCD1602

如何用51单片机控制LCD1602

如何用51单片机控制LCD1602

8、效果

如何用51单片机控制LCD1602

  • 如何修改winform CheckBox控件的背景颜色
  • Win8 系统怎么查看系统变量
  • 怎样使用VBA锁定鼠标移动范围?
  • 如何在360浏览器中添加百度文库文档搜索插件
  • 利用注册表快捷运行bat脚本
  • 热门搜索
    全景旅游网 海南建设国际旅游岛 广州市旅游学校 河北旅游景点介绍 5月19日中国旅游日 行者 旅游卫视 西安旅游景点图片 邢台旅游局 延安旅游网 江苏连云港旅游景点