基于51单片机的LCD1602液晶驱动实现

发布者:创新思绪最新更新时间:2018-08-12 来源: eefocus关键字:51单片机  LCD1602  液晶驱动 手机看文章 扫描二维码
随时随地手机看文章

本文的主要内容目录:

一、LCD1602的基本介绍

二、LCD1602液晶驱动的实现


    根据对现有的LCD1602液晶的驱动进行分析,总感觉写的有些乱,有些麻烦,说白了就是不好用,这里打算自己写一个,既简单又实用的。

一、LCD1602的基本介绍

开发环境:keil, 睿智51开发板

LCD1602的液晶原理图如下:

引脚对应关系:

    P2.0  : 状态引脚,为0时表示指令或者状态,为1时表示数据

    P2.1  :读写引脚,为0时表示写,为1时表示读

    P2.2  :使能引脚,为1时使能

    P0.0 ~ P0.7 :数据引脚,用来传输数据

经过分析,整个液晶时序的核心就是两个:写命令、写数据,它们的时序如下:

寄存器的设置以及如何使用请参考LCD1602的芯片手册,这里主要说驱动的实现。


二、LCD1602液晶驱动的实现

    通过上面的分析可以看出,整个驱动的核心就是实现写命令和写数据这两个部分。

1、写命令,具体实现函数如下:


/* 写命令的函数 */

void lcd1602_write_cmd(unsigned char cmd)

{

RS = 0;

RW = 0;

P0 = cmd; /* 写入的命令 */

delay_us(1);

EN = 1;

delay_us(2);

EN = 0;

RW = 1;

}

2、写数据,具体的实现如下:

/* 写数据的函数 */

void lcd1602_write_data(unsigned char dat)

{

RS = 1;

RW = 0;

P0 = dat; /* 要写入的数据 */

delay_us(1);

EN = 1;

delay_us(2);

EN = 0;

RW = 1;

RS = 0;

}

3、LCD1602的初始化函数,主要是通过写命令、写数据来实现。

/* lcd1602的初始化函数 */

void lcd1602_init()

{

delay_us(200);

lcd1602_write_cmd(0x38); /* 设置显示模式 */

delay_us(50);

lcd1602_write_cmd(0x38);

delay_us(50);

lcd1602_write_cmd(0x38);

delay_us(50);

lcd1602_write_cmd(0x0C); /* 打开显示和设置光标 */

delay_us(50);

lcd1602_write_cmd(0x06); /* 显示光标移动设置 */

delay_us(50);

lcd1602_write_cmd(0x01); /* 清屏 */

delay_us(50);

}


4、实现一个具体的LCD1602液晶显示的例子:在液晶屏上面显示一个字符串,完整的代码如下所示。

#include

 

/* 定义与LCD1602液晶相连的引脚 */

sbit RS = P2^0; // 状态引脚,为0时表示状态或指令,为1时表示数据

sbit RW = P2^1; // 读写引脚,为0时表示写,为1时表示读

sbit EN = P2^2; // 使能引脚,为1时使能

 

/* 进行一段时间的软件延时,满足LCD1602液晶的时序需要

 */

void delay_us(int us)

{

int i = 0;

int j = 0;

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

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

}

 

/* 写命令的函数 */

void lcd1602_write_cmd(unsigned char cmd)

{

RS = 0;

RW = 0;

P0 = cmd; /* 写入的命令 */

delay_us(1);

EN = 1;

delay_us(2);

EN = 0;

RW = 1;

}

 

/* 写数据的函数 */

void lcd1602_write_data(unsigned char dat)

{

RS = 1;

RW = 0;

P0 = dat; /* 要写入的数据 */

delay_us(1);

EN = 1;

delay_us(2);

EN = 0;

RW = 1;

RS = 0;

}

 

/* lcd1602的初始化函数 */

void lcd1602_init()

{

delay_us(200);

lcd1602_write_cmd(0x38); /* 设置显示模式 */

delay_us(50);

lcd1602_write_cmd(0x38);

delay_us(50);

lcd1602_write_cmd(0x38);

delay_us(50);

lcd1602_write_cmd(0x0C); /* 打开显示和设置光标 */

delay_us(50);

lcd1602_write_cmd(0x06); /* 显示光标移动设置 */

delay_us(50);

lcd1602_write_cmd(0x01); /* 清屏 */

delay_us(50);

}

 

/* 在LCD1602液晶上显示字符串的函数 */

void lcd1602_show_string(unsigned char *str)

{

int i = 0;

 

lcd1602_write_cmd(0x00 + 0x80);

for(i = 0; str[i] != '\0'; i++)

lcd1602_write_data(str[i]);

}

 

/* 程序的入口函数 */

void main()

{

lcd1602_init(); /* 液晶的初始化函数 */

 

lcd1602_show_string("TECH-PRO"); /* 在液晶上显示字符串:TECH-PRO */

 

while(1);

}


关键字:51单片机  LCD1602  液晶驱动 引用地址:基于51单片机的LCD1602液晶驱动实现

上一篇:51定时器初始化步骤
下一篇:51单片机三线串行驱动12864液晶

推荐阅读最新更新时间:2024-03-16 16:10

基于51单片机的灰度图像混沌保密通信
  所谓保密通信,就是为了防止通信秘密被窃取,在通信的过程中对秘密信息及其传输方式采取隐蔽的手段,从而达到保密的目的。混沌是非线性动力学系统所特有的一种运动形式。自从1990年提出混沌同步的原理并在电路中得以实现以来,混沌控制与同步及其应用迅速成为非线性研究领域的研究热点。同时,混沌现象具有遍历性、非周期性、连续宽带频谱、类噪声等特性,特别适用于保密通信及图像加密领域。现在混沌保密通信大致分为3类:第1类是直接利用混沌进行保密通信,如基于单片机利用Logistic映射对语音信号进行加解密实验 、基于PC机利用Logistic映射和Henon映射对图像信号进行加解密实验 ;第2类是利用混沌同步进行保密通信 ;第3类是混沌数字编码的异步
[单片机]
基于<font color='red'>51单片机</font>的灰度图像混沌保密通信
51单片机-IO口控制
IO口控制的练习实验图: 对应的练习题: 其实单片机很容易学会了就、控制IO口状态就掌握了很大的部分,至于内部资源它是很少很简单的,所以IO口是入手点也是基础点;以上7道题目完全用C51编程; 1: #include reg52.h #define uint unsigned int sbit d1=P2^0; void delay(uint z) { uint i,j; for(i=0;i 200;i++) for(j=0;j z;j++); } void main() { while(1) { d1=0; delay(82); d1=!d1; d
[单片机]
<font color='red'>51单片机</font>-IO口控制
80C51单片机与8051单片机的区别是什么
80C51单片机是在8051的基础上发展起来的,也就是说在单片机的发展过程中是先有8051,然后才有80C51的。 8051单片机与80C51单片机从外形看是完全一样的,其指令系统、引脚信号、总线等完全一致(完全兼容),也就是说在8051下开发的软件完全可以在80C51上应用,反过来,在89C51下开发的软件也可以在8051上应用。这两种单片机是完全可移植的。 既然这两种单片机外形及内部结构都一样,那它们之间的主要差别在哪里呢? 8051与80C51单片机的主要差别就在于芯片的制造工艺上。80C51的制造工艺是在8051基础上进行了改进。 8051系列单片机采用的是HMOS工艺:高速度、高密度; 80C51系列单片机采用的
[单片机]
51单片机项目 门禁系统
/** * 项目名:门禁系统 * 文件名:main.h */ #ifndef _MAIN_H #define _MAIN_H sbit RELAY_PIN = P0^4; sbit BUZZER_PIN = P0^6; void sys_init(); void samplingDS1302(); void samplingUlt(); void initDispMode1(); void initDispMode2(); void initDispMode3(); void refreshTimeDisplay(); #endif /** * 项目名:门禁系统 * * 7:00-22:00
[单片机]
普通51单片机驱动3.5寸TFT的应用实例与源代码!
  前市场流行的3.5寸屏基本上都是只内置了驱动器,而不带控制器,这样给用户的使用造成了一些难度。基本上很多朋友在用彩屏时选择一些带 LCD 控制器的ARM7或ARM9去开发,对于不会ARM开发的朋友来说,只使用普通MCU,这样可以选择的3.5寸TFT模块,就很难找到了。   本文就是基于市场上一款比较使用的3.5寸TFT模块编写的,用户只需要帮该TFT模块当作普通的单色液晶的开发思路来使用,就可以很容易去编程。   一、 硬件选择   1、 MCU:AT89S51   2、 开发编译环境:Keil C51   3、 3.5寸TFT模块型号:MzT35C1   二、 TFT模块基本性能:   1、
[单片机]
普通<font color='red'>51单片机</font><font color='red'>驱动</font>3.5寸TFT的应用实例与源代码!
51单片机的LED与数码管的驱动
1、编写C51代码,实现流水灯字变花型: /*********************************************************** * 实验功能 : LED实现流水灯花型控制 *************************************************************/ # include reg51.h void delay(unsigned int z) { unsigned int x,y; for(x=z;x 0;x--) for(y=100;y 0;y--); } timer0() interrupt 1 { st
[单片机]
51单片机FFT运算转换程序 adc数据
#include STC12C5A.H #define uchar unsigned char #define uint unsigned int #define channel 0x01 //设置AD通道为 P1.1 //--------------------------------------------------------------------- sbit SDA_R=P1^2; sbit SDA_R_TOP=P1^3; sbit SDA_G=P1^4; sbit SDA_G_TOP=P1^5; sbit STCP=P1^6; sbit SHCP=P1^7;
[单片机]
80C51单片机的引脚及其功能介绍
首先我们来连接一下单片机的引脚图,如果,具体功能在下面都有介绍。 单片机的40个引脚大致可分为4类:电源、时钟、控制和I/O引脚。 ⒈ 电源: ⑴ VCC - 芯片电源,接+5V; ⑵ VSS - 接地端; ⒉ 时钟:XTAL1、XTAL2 - 晶体振荡电路反相输入端和输出端。 ⒊ 控制线:控制线共有4根, ⑴ ALE/PROG:地址锁存允许/片内EPROM编程脉冲 ① ALE功能:用来锁存P0口送出的低8位地址 ② PROG功能:片内有EPROM的芯片,在EPROM编程期间,此引脚输入编程脉冲。 ⑵ PSEN:外ROM读选通信号。 ⑶ RST/VPD:复位/备用电源。 ① RST(Reset)功能:复位信号输入端。 ② VP
[单片机]
80C<font color='red'>51单片机</font>的引脚及其功能介绍
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved