51单片机LM016L液晶显示设计实例

发布者:Qilin520最新更新时间:2025-09-24 来源: bilibili关键字:51单片机  LM016L  液晶显示 手机看文章 扫描二维码
随时随地手机看文章

先上仿真图,图比较简单,一个51单片机最小系统,加上一个LM016L液晶显示器,需要注意的是,实际的LM016L芯片内部有上拉电阻,但是仿真中是没有的,如果用P0口传输数据的话,需要给P0口接上拉电阻。

然后上代码,有详细的注释,就不多解释了。

#include<reg51.h>

#include<intrins.h>

 

//引脚定义

sbit RS=P2^0;

sbit RW=P2^1;

sbit E=P2^2;

sbit BF=P0^7;

 

void delay1ms()

{

unsigned char i,j;

for(i=0;i<10;i++)

for(j=0;j<33;j++)

;

}

 

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

函数功能:延时若干毫秒

入口参数: n

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

void delaynms(unsigned char n)

{

unsigned char i;

for(i=0;i<n;i++)

delay1ms();

}

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

函数功能:判断液晶模块是否忙碌

入口参数:无

返回值:result  1忙碌 0空闲

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

bit BusyTest(void)

{

       bit result;

       RS=0;

       RW=1;//此时才可以读状态

       E=1;//此时才允许读写

       _nop_();

       _nop_();

       _nop_();

       _nop_();//四个空操作,给硬件反应时间

       result=BF;//将忙碌标值赋值给result

       E=0;

       return result;

}

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

函数功能:将模式设置指令或显示地址写入液晶模块

入口参数: dictate

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

void WriteInstruction(unsigned char dictate)

{

       while(BusyTest()==1);

       RS=0;

       RW=0;

       E=0;

       _nop_();

  _nop_();

       P0=dictate;

       _nop_();

  _nop_();

  _nop_();

  _nop_(); // 空操作四个机器周期,给硬件反应时间

  E=1;

       _nop_();

  _nop_();

  _nop_();

  _nop_(); // 空操作四个机器周期,给硬件反应时间

  E=0;

}

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

函数功能:指定字符显示的实际地址

入口参数: x

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

void WriteAddress(unsigned char x)

{

WriteInstruction(x|0x80); // 显示位置的确定方法规定为 "80H+地址码 x"

}

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

函数功能:将数据 (字符的标准 ASCII 码) 写入液晶模块

入口参数: y( 为字符常量 )

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

void WriteData(unsigned char y)

{

while(BusyTest()==1);

RS=1; //RS 为高电平, RW为低电平时,可以写入数据

RW=0;

E=0; //E 置低电平 ( 根据表 8-6 ,写指令时, E 为高脉冲,

// 就是让 E 从 0 到 1 发生正跳变,所以应先置 "0"

P0=y; // 将数据送入 P0 口,即将数据写入液晶模块

_nop_();

_nop_();

_nop_();

_nop_(); // 空操作四个机器周期,给硬件反应时间

E=1; //E 置高电平

_nop_();

_nop_();

_nop_();

_nop_(); // 空操作四个机器周期,给硬件反应时间

E=0; // 当 E 由高电平跳变成低电平时,液晶模块开始执行命令

}

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

函数功能:对 LCD的显示模式进行初始化设置

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

void LcdInitiate(void)

{

delaynms(15); // 延时 15ms,首次写指令时应给 LCD一段较长的反应时间

WriteInstruction(0x38); // 显示模式设置: 16×2 显示, 5×7 点阵, 8 位数据接口

delaynms(5); // 延时 5ms ,给硬件一点反应时间

WriteInstruction(0x38);

delaynms(5); // 延时 5ms ,给硬件一点反应时间

WriteInstruction(0x38); // 连续三次,确保初始化成功

delaynms(5); // 延时 5ms ,给硬件一点反应时间

WriteInstruction(0x0c); // 显示模式设置:显示开,无光标,光标不闪烁

delaynms(5); // 延时 5ms ,给硬件一点反应时间

WriteInstruction(0x06); // 显示模式设置:光标右移,字符不移

delaynms(5); // 延时 5ms ,给硬件一点反应时间

WriteInstruction(0x01); // 清屏幕指令,将以前的显示内容清除

delaynms(5); // 延时 5ms ,给硬件一点反应时间

}

void main(void)

{

LcdInitiate(); // 将液晶初始化

WriteAddress(0x01); // 写 Date 的显示地址 , 将在第 1 行第 2 列开始显示

WriteData('Z'); // 将字符常量写入 LCD

WriteData('h'); // 将字符常量写入 LCD

WriteData('a'); // 将字符常量写入 LCD

WriteData('n'); // 将字符常量写入 LCD

WriteData('g'); // 将字符常量写入 LCD

WriteData(' '); // 将字符常量写入 LCD

WriteData('S'); // 将字符常量写入 LCD

WriteData('a'); // 将字符常量写入 LCD

WriteData('n'); // 将字符常量写入 LCD

 

}


关键字:51单片机  LM016L  液晶显示 引用地址:51单片机LM016L液晶显示设计实例

上一篇:【51单片机】矩阵键盘逐行扫描法〈C语言+Keil5+Proteus仿真〉
下一篇:51单片机day6——中断控制PWM信号输出实现LED呼吸灯

推荐阅读最新更新时间:2026-03-15 10:46

51单片机LM016L液晶显示设计实例
先上仿真图,图比较简单,一个51单片机最小系统,加上一个LM016L液晶显示器,需要注意的是,实际的LM016L芯片内部有上拉电阻,但是仿真中是没有的,如果用P0口传输数据的话,需要给P0口接上拉电阻。 然后上代码,有详细的注释,就不多解释了。 #include reg51.h #include intrins.h //引脚定义 sbit RS=P2^0; sbit RW=P2^1; sbit E=P2^2; sbit BF=P0^7; void delay1ms() { unsigned char i,j; for(i=0;i 10;i++) for(j=0;j 33;j++) ; } /***********
[单片机]
51单片机 1602液晶显示时钟
#include reg52.h //头文件 typedef unsigned char u8; //重定义 typedef unsigned int u16; sbit RW=P2^5; //液晶显示屏io口位置 sbit RS=P2^6; sbit E=P2^7; u8 m_a=0,m_b=0,f_a=0,f_b=0,s_a=0,s_b=0,r_a=0,r_b=0,y_a=0,y_b=0,n_a=0,n_b=0,n_c=0,n_d=0; //时分秒,日月年,几种数据 u8 id1 ={'0','1','2','3',
[单片机]
51单片机玩转物联网基础篇06-LCD1602液晶显示
前言 本节我们开始学习LCD1602,LCD1602是字符型液晶显示屏,在实际项目中应用非常广泛,学完本节就可以逐步开发一些好玩的应用了。 一、基础知识 1.LCD1602简介 LCD1602是字符型液晶显示模块,专门用于显示字母、数字、符号等点阵式LCD,顾名思义,LCD1602一共可以显示两行,每一行能够显示16个字符数据,采用5V供电,具有低功耗、长寿面、搞可靠性等特性,实物图如下: (1) 引脚说明 在 LCD1602 内部含有 80 个字节的 DDRAM,它是用来寄存显示字符的。其地址和屏幕的对应关系如下 从上图可知,LCD1602中80个字节并不是所有的都用来显示数据,只有第一行的00-0F,第二行的4
[单片机]
<font color='red'>51单片机</font>玩转物联网基础篇06-LCD1602<font color='red'>液晶显示</font>器
51单片机入门之1602液晶显示
本部分主要介绍1602液晶显示,显示内容为“Hello,Welcome to my site,my friends.”。 原理图如下: 程序如下: #include #define uchar unsigned char #define uint unsigned int sbit RS=P3^0; //数据/命令选择端(H/L) sbit EN=P3^2; //使能端 sbit RW=P3^1; //读/写选择端(H/L),本文章只写,所以该端口供低电平 sbit wela=P3^3;//锁存器位选信号 uchar table1 = Hello,Welcome to my ;//字符表1 uchar table2 =
[单片机]
<font color='red'>51单片机</font>入门之1602<font color='red'>液晶显示</font>
51单片机基本的源码(1602液晶显示
#include #define uc unsigned char #define ui unsigned int sbit RS=P3^5; sbit RW=P3^6; sbit E=P3^4; void read_busy()//判断忙不忙; { uc busy; P0=0xff;// RS=0; RW=1; do { E=1; busy=P0; E=0; } while(busy&0x80);//若忙,则一直循环(0x10000000的1为禁止状态) } void write_cmd(uc cmd)//命令函数 { read_busy();//执行上个语言,判断忙不忙 RS=0;
[单片机]
超声波测距51单片机12864液晶显示
超声波测距的模块,51单片机接上12864液晶,HC-SR04超声波模块,就可以了,具体程序没怎么看,超声波模块的硬件也不晓得,今天先贴个图,贴个程序吧(程序是淘宝买的模块附赠的)。 超声波测距51单片机12864液晶显示源程序: #include #include //引脚定义 sbit RX = P1 ^ 1; sbit TX = P1 ^ 2; sbit CS = P3 ^ 3; //片选 高电平有效 单片LCD使用时可固定高电平 sbit SID = P3 ^ 4; //数据 sbit SCLK = P3 ^ 5; //时钟 //Function
[单片机]
超声波测距<font color='red'>51单片机</font>12864<font color='red'>液晶显示</font>
51单片机驱动1602液晶显示器的小例子
首先附上1602的相关资料: 引脚功能: 1602采用标准的16脚接口,其中: 第1脚:VSS为电源地 第2脚:VCC接5V电源正极 第3脚:V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会 产生 鬼影 ,使用时可以通过一个10K的电位器调整对比度)。 第4脚:RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。 第5脚:RW为读写信号线,高电平(1)时进行读操作,低电平(0)时进行写操作。 第6脚:E(或EN)端为使能(enable)端,高电平(1)时读取信息,负跳变时执行指令。 第7~14脚:D0~D7为8位双向数据端。 第15~16脚:空脚或背灯电源。15脚背光正极,
[单片机]
<font color='red'>51单片机</font>驱动1602<font color='red'>液晶显示</font>器的小例子
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved