LCD1602单片机(STC51/STM32)驱动程序详解

发布者:和谐共处最新更新时间:2024-12-17 来源: jianshu关键字:LCD1602  单片机  STC51  STM32  驱动程序 手机看文章 扫描二维码
随时随地手机看文章

一、LCD1602简介

LCD1602液晶显示器是广泛使用的一种字符型液晶显示模块。它是由字符型液晶显示屏(LCD)、控制驱动主电路HD44780及其扩展驱动电路HD44100,以及少量电阻、电容元件和结构件等装配在PCB板上而组成。

LCD1602应用很广泛,无论是各大电子公司的产品上还是各大高校电赛的比赛作品上都能看到它的身影,下面来细说一下怎么驱动这块1602液晶屏。

二、LCD1602引脚

在这里插入图片描述

图1:引脚说明

在这里插入图片描述

图2:原理图

一、我们重点关注几个引脚:

  1. 液晶显示偏压:VL对应原理图V0引脚,作用是调整1602的显示对比度,可外接电位器进行调节对比度,上图原理图接地引脚电压为0这时候对比度最高。

  2. 数据/命令选择端:RS对应原理图RES引脚,引脚高电平:进行数据字节传输,引脚低电平:进行命令字节传输。

  3. 读/写选择端:R/W对应原理图R/W引脚,引脚高电平:对1602进行读数据,引脚低电平:对1602进行写数据,一般应用都是直接拉低只进行写数据。

  4. 使能信号:E对应原理图E引脚,该引脚上升沿代表对1602开始数据传输,下降沿代表数据传输结束。

  5. 背光控制:原理图K+引脚,该引脚高电平:背光关闭,引脚低电平:背光打开。

二、我们只需要写数据给1602显示,只看写操作时序:

2写指令跟4写数据对比可看出RW读写引脚为低电平,E为高电平,D0~D7为传输的数据是命令/数据,RS数据/命令选择端(高:数据 , 低:命令)。
[图片上传失败...(image-8031e7-1639217075281)]

在这里插入图片描述


三、常用的写指令如下,其他指令可去查1602的datasheet:

[图片上传失败...(image-dd35b6-1639217075281)]

四、数据写入CGRAM指令:

此指令可以自定义显示一个字符,我们写地址的丝毫应该是0x40+Address

[图片上传失败...(image-729705-1639217075281)]

三、LCD1602驱动(11脚)

51单片机跟STM32单片机的驱动基本一致主要是引脚的配置不怎么一样,特别注意STM32驱动写指令/数据GPIO_Write(GPIOA,(GPIO_ReadOutputData(GPIOA) & 0xff00) | cmd/data)为对电平的读取再写数据,其他均与51驱动一致。

1、51单片机:LCD1602.h

#ifndef __LCD1602_H

#define __LCD1602_H


#define LCD1602_BKL_ON      0   //背光开

#define LCD1602_BKL_OFF     1   //背光关


#define LCD1602_DB P2           //数据端口  D0~D7

sbit LCD_RES = P4^1;            //1602的数据/指令选择控制线

sbit LCD_EN = P4^2;             //1602的使能控制线

sbit Lcd1602_light = P0^2;      //背光引脚


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

void LCD1602_Init();

void LCD1602_Clear();


void LCD1602_write_cmd(unsigned char cmd);

void LCD1602_write_data(unsigned char date);

void LCD1602_wtire_CGRAM();


void LCD1602_SetCursor(unsigned char x,unsigned char y);

void LCD1602_ShowChar(unsigned char xpos,unsigned char ypos,unsigned char xsz);

void LCD1602_ShowStr(unsigned char xpos,unsigned char ypos,char *p);

void LCD1602_ShowNum(char x, char y, unsigned int num);


void LCD1602_BKLSet(unsigned char val);

unsigned char LCD1602_BKLGet();


void Delay_ms(unsigned int nms);

#endif

2、51单片机:LCD1602.c

#include 'LCD1602.h'


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

 * 函数名称:void Delay_ms(unsigned int nms)                     *

 * 函数功能:写命令函数                                                           *

 * 输入参数: //nms为要延时的ms数                                                  *

 * 返回值  :无                                                                  *

 * 其他说明:                                                                    *

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

void Delay_ms(unsigned int nms)     //@11.0592MHz

{

    unsigned char i, j; //用单片机小工具根据自己的单片机类型及晶振直接生成对应的延时函数即可

    while(nms--)

    {

        i = 15;

        j = 90;

        do

        {

            while (--j);

        } while (--i);

    }

}

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

 * 函数名称:void LCD1602_write_cmd(unsigned char cmd)                       *

 * 函数功能:写命令函数                                                           *

 * 输入参数:    cmd 命令                                                      *

 * 返回值  :无                                                                  *

 * 其他说明:                                                                    *

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

void LCD1602_write_cmd(unsigned char cmd)   

{

    LCD1602_DB=cmd;

    LCD_RES=0;

    LCD_EN=1;

    Delay_ms(10);   

    LCD_EN=0;

}

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

 * 函数名称:void LCD1602_write_data(unsigned char date)                         *

 * 函数功能:写数据函数                                                           *

 * 输入参数:    date 数据                                                     *

 * 返回值  :无                                                                *

 * 其他说明:                                                                    *

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


void LCD1602_write_data(unsigned char date) 

{

    LCD1602_DB=date;

    LCD_RES=1;

    LCD_EN=1;

    Delay_ms(10);

    LCD_EN=0;

}

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

 * 函数名称:void LCD1602_Init(void)                                             *

 * 函数功能:1602初始化函数                                                     *

 * 输入参数:    无                                                               *

 * 返回值  :无                                                                *

 * 其他说明:                                                                    *

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


void LCD1602_Init() 

{

    LCD1602_BKLSet(LCD1602_BKL_ON); //背光开启

    LCD1602_write_cmd(0x01);    //显示清屏

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

    LCD1602_write_cmd(0x0C);    //显示开及光标设置

    LCD1602_write_cmd(0x06);    //显示光标移动位置

}

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

 * 函数名称:void LCD1602_Clear(void)                                        *

 * 函数功能:1602清屏函数                                                      *

 * 输入参数:    无                                                           *

 * 返回值  :无                                                                *

 * 其他说明:                                                                    *

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

void LCD1602_Clear()

{

    LCD1602_write_cmd(0x01);

}


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

 * 函数名称:void LCD1602_BKLSet(unsigned char val)                            *

 * 函数功能:打开1602背光函数                                                    *

[1] [2] [3] [4]
关键字:LCD1602  单片机  STC51  STM32  驱动程序 引用地址:LCD1602单片机(STC51/STM32)驱动程序详解

上一篇:嵌入式系统的STM32系列芯片应用
下一篇:《嵌入式-STM32开发指南》第二部分 基础篇 - 第3章 按键(HAL库)

推荐阅读最新更新时间:2026-03-24 21:05

TM1637数码管显示STC51单片机驱动程序
/* Coder : Farman Date : 2018-01-02 参考了厂家的TM1637数据手册,在此表示感谢。 */ #include STC89C5XRC.h //包含52单片机头文件 #include Delay.h //////////////////////////////////////////////////////////////////////////// sbit I2C_SCL = P2^1; //定义模拟IIC总线的时钟线 sbit I2C_SDA = P2^0; //定义模拟IIC总线的数据线 #define TM1637_BRIGHTNESS 7 // 0 - 7
[单片机]
STM32 LCD1602驱动程序
#ifndef LCD1602_STM32_H #define LCD1602_STM32_H #define LCD_RS_1 GPIOE- BSRR=GPIO_Pin_0 //PE.0--(LCD)RS #define LCD_RS_0 GPIOE- BRR =GPIO_Pin_0 #define LCD_RW_1 GPIOE- BSRR=GPIO_Pin_1 //PE.1--(LCD)RW #define LCD_RW_0 GPIOE- BRR =GPIO_Pin_1 #define LCD_EN_1 GPIOE- BSRR=GPIO_Pin_2 //PE.2--(LCD)E #define LCD_EN_0 GPIOE
[单片机]
STM32单片机AD4630-24驱动程序
AD4630-24是亚德诺推出的一款24位双通道支持同步采样的ADC,高昂的售价注定了这不会是一款常用芯片,我在做驱动开发期间在中文互联网基本没有找到可以参考的资料或例程。但这次毕竟做的是一款高精度同步电压电流表,这款芯片是领导亲自选的,要求很明确,就是分辨率拉满,咱也只能硬着头皮开干。 这次也是分享以下驱动开发的思路和例程,希望能够帮助到相关人士,顺便,这款芯片要求5V和1.8V双电源供电也是让硬件同事疯狂吐槽。 1.通讯接口 AD4630-24支持串行通讯,为了提高采样结果的读取速率,SDO最高支持8通道同步输出,但很可惜这次使用的单片机是STM32F407,意法连QSPI都不给,只能使用标准的SPI接口通讯,例程也
[单片机]
LCD1602驱动程序
LCD1602driver_inside.c /*本驱动依赖reg51.h头文件*/ #include reg51.h /*根据实际电路连接修改宏定义和sbit语句*/ #define D0_D7 P3 //数据通讯总线,用于写或读指令、显示地址和显示数据 sbit RS = P2^5; //寄存器选择引脚,设0选择指令和显示地址寄存器,设1选择显示数据寄存器 sbit RW = P2^6; //读写引脚,设0为写,设1为读 sbit E = P2^7; //信号使能引脚,设0允许写,设1允许读 sbit BF = P3^7; //忙信号,忙为1,不忙为0 /*根据实际电路连接修改宏定义和sbit语句*/
[单片机]
如何使用vscode开发 stc51单片机
全是干货,就几个步骤一定记好了。 1.vscode安装platformio插件. 安装好以后,vscode下部状态栏会出现platformio home图标,点击进入platformio主页。 2.新建stc51项目。 在platformio主界面进入左侧Projects条目,选择新建项目。 项目选择stc芯片型号,注意要选择自己单片机的型号。 项目可以选到自定目录,不过需要专门设置,注意一下就行了。 3.添加专用于vscode的头文件。 用原有的针对keil的头文件不行,要使用专门针对sdcc编译器的头文件。 在这里: 因为无法添加外链,只能截图,把这个项目下载下来。 再这个项目下的目录中: platform
[单片机]
如何使用vscode开发 <font color='red'>stc51</font><font color='red'>单片机</font>
STC51单片机定时器/计数器寄存器详解
在 STC51 单片机中,定时器 / 计数器相关的寄存器主要有定时器控制寄存器(TCON)、定时器工作方式寄存器(TMOD)以及定时器初值寄存器(TH0、TL0、TH1、TL1),下面详细解释这些寄存器各位的作用。 1. 定时器控制寄存器(TCON) 地址:88H 可位寻址:该寄存器的每一位都可以进行单独的位操作。 位序号 位名称 作用 TCON.7 TF1 定时器 1 溢出标志位。当定时器 1 产生溢出时,硬件自动将 TF1 置 1。如果中断允许(ET1 = 1 且 EA = 1),则会向 CPU 发出中断请求;进入中断服务程序后,硬件自动将其清 0。若采用查询方式处理溢出,则需要软件清 0。 TCON.6 TR1
[单片机]
基于STC51单片机的霓虹灯
设计要求:# 使用PWM驱动8个LED灯 人眼不能观察到灯光全灭 灯光要有动画效果 设计概述:# 按照设计要求,为了更直观的说明脉冲宽度调制技术(PWM),所以霓虹灯的动画效果为流水灯形式。所需要的单片机芯片为STC89C52,所用的硬件工具是由华清远见开发的基于STC89C52的智能小车。该小车配备所需要的LED灯模块,8个LED灯由P1口来控制。STC89C52是一种低功耗,高性能的8位微控制器,是加强版的80C51单片机,但是与80C51单片机一样不具备PWM硬件模块,所以我们需要自己写一个程序来软件模拟PWM方波。 PWM是一种方波,可以实现数字信号控制模拟电路,它有两个重要参数周期或频率,占空比。占空比 = 高电
[单片机]
STC51单片机EEPROM的使用方法
STC51单片机有类似flash的功能EEPROM,可以掉电保存数据,不同型号的可以保存不同大小的数据,以12C5A60S2为例,EEPROM的大小为2K,分为两个扇区,掉电保存在很多地方需要。 首先寄存器的问题,不同系列的STC单片机的与EEPROM有关的寄存器不同,比如10/11/12系列的sfr ISP_DATA = 0xC2;sfr ISP_ADDRH = 0xC3;sfr ISP_ADDRL = 0xC4;sfr ISP_CMD = 0xC5;sfr ISP_TRIG = 0xC6;sfr ISP_CONTR = 0xC7;89/90系列的sfr ISP_DATA = 0xe2;sfr ISP_ADDRH = 0xe
[单片机]
<font color='red'>STC51</font><font color='red'>单片机</font>EEPROM的使用方法
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

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