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

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


}

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

3、STM32:LCD1602.h

#ifndef __LCD1602_H

#define __LCD1602_H 


/***************************根据自己的硬件引脚做修改*****************************/

#define LCD_RS_Set()    GPIO_SetBits( GPIOB, GPIO_Pin_12 )//1602的数据/指令选择控制线

#define LCD_RS_Clr()    GPIO_ResetBits( GPIOB, GPIO_Pin_12 )


#define LCD_RW_Set()    GPIO_SetBits( GPIOB, GPIO_Pin_13 )//1602的读写控制线

#define LCD_RW_Clr()    GPIO_ResetBits( GPIOB, GPIO_Pin_13 )


#define LCD_EN_Set()    GPIO_SetBits( GPIOB, GPIO_Pin_14 )//1602的使能控制线

#define LCD_EN_Clr()    GPIO_ResetBits( GPIOB, GPIO_Pin_14 )


#define DATAOUT( x ) GPIO_Write( GPIOA, x ) //1602的8条数据控制线


void GPIO_Configuration();


void LCD1602_Init();


void LCD1602_Wait_Ready();


void LCD1602_Write_Cmd( u8 cmd );


void LCD1602_Write_Dat( u8 data );


void LCD1602_ClearScreen();


void LCD1602_Set_Cursor( u8 x, u8 y );


void LCD1602_Show_Str( u8 x, u8 y, u8 *str );


#endif

4、STM32:LCD1602.c

#include  'LCD1602.h'

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

 * 函数名称:void GPIO_Configuration()                           *

 * 函数功能:LCD1602引脚初始化                                                        *

 * 输入参数:无                                                   *

 * 返回值  :无                                                                *

 * 其他说明:                                                                    *

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

/*******************根据自己的硬件引脚做修改*****************************************/

void GPIO_Configuration()

{

    GPIO_InitTypeDef GPIO_InitStructure;

    RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB, ENABLE );

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14;

    GPIO_InitStructure.GPIO_Speed   = GPIO_Speed_50MHz;//选择工作频率

    GPIO_InitStructure.GPIO_Mode    = GPIO_Mode_Out_PP;//设置工作模式

    GPIO_Init( GPIOB, &GPIO_InitStructure );


    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 |                       

    GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;

    GPIO_InitStructure.GPIO_Mode    = GPIO_Mode_Out_PP;//设置工作模式

    GPIO_InitStructure.GPIO_Speed   = GPIO_Speed_50MHz;//选择工作频率

    GPIO_Init( GPIOA, &GPIO_InitStructure );

}

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

 * 函数名称:void LCD1602_Init()                         *

 * 函数功能:LCD1602初始化                                                      *

 * 输入参数:无                                                   *

 * 返回值  :无                                                                *

 * 其他说明:                                                                    *

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

void LCD1602_Init()

{

    GPIO_Configuration();           //初始化引脚


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

    delay_ms( 5 );

    LCD1602_Write_Cmd( 0x0c );      //显示开及光标设置

    delay_ms( 5 );

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

    delay_ms( 5 );

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

    delay_ms( 5 );  

}

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

 * 函数名称:void LCD1602_Write_Cmd(u8 cmd)                          *

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

 * 输入参数:    cmd 命令                                                      *

 * 返回值  :无                                                                *

 * 其他说明:                                                                    *

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

void LCD1602_Write_Cmd( u8 cmd )

{

    LCD_RS_Clr();

    LCD_RW_Clr();

    LCD_EN_Set();


    GPIO_Write( GPIOA, (GPIO_ReadOutputData( GPIOA ) & 0xff00) | cmd );//对电平的读取


    DATAOUT( cmd );

    delay_ms( 5 );

    LCD_EN_Clr();

}


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

 * 函数名称:void LCD1602_Write_Dat(u8 date)                         *

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

 * 输入参数:    date 数据                                                     *

 * 返回值  :无                                                                *

 * 其他说明:                                                                    *

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

void LCD1602_Write_Dat( u8 data )

{

    LCD_RS_Set();

    LCD_RW_Clr();

    LCD_EN_Set();


    GPIO_Write( GPIOA, (GPIO_ReadOutputData( GPIOA ) & 0xff00) | data );//对电平的读取


    delay_ms( 5 );

    LCD_EN_Clr();

}


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

 * 函数名称:void LCD1602_ClearScreen()                          *

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

 * 输入参数:无                                                       *

 * 返回值  :无                                                                *

 * 其他说明:                                                                    *

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

void LCD1602_ClearScreen()

{

    LCD1602_Write_Cmd( 0x01 );

}


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

 * 函数名称:void LCD1602_Set_Cursor(u8 x, u8 y)                         *

 * 函数功能:设置1602位置函数                                                    *

 * 输入参数:x 横坐标 y 纵坐标                                                     *

 * 返回值  :无                                                                *

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

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

推荐阅读最新更新时间:2026-03-13 10:37

C51单片机LCD1602驱动程序
LCD1602简介 LCD1602字符型液晶(每行显示16个字符,一共可以显示两行)——一种专门用来显示字母、数字、符号的点阵型液晶模块。它由若干个5x7或者5x10的点阵字符组成,每个点阵字符位都可以用来显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用,正因为如此,所以它不能很好的显示图片。 1602的引脚 我们只需要关注以下几个管脚: 3 脚:VL,液晶显示偏压信号,用于调整LCD1602 的显示对比度,一般会外接电位器用以调整偏压信号,注意此脚电压为0时可以得到最强的对比度。 4 脚:RS,数据/命令选择端,当此脚为高电平时,可以对1602 进行数据字节的传输操作,而为电平时,
[单片机]
C51<font color='red'>单片机</font><font color='red'>LCD1602</font><font color='red'>驱动程序</font>
STM32单片机(9) LCD1602显示屏输出实验
核心代码由kingsraywii提供,本文作者对其进行整合、更详细地注释和部分代码改进, 添加了芯片ID获取、字符串输出和printf重定向输出功能 注:使用普中科技开发板测试时,需要拔掉Boot1插口 接5V电压,重启 /******************************************************************************* * * 软件功能: LCD1602实验(软件延时方式) * *******************************************************************************/ #i
[单片机]
STM32单片机AD4630-24驱动程序
AD4630-24是亚德诺推出的一款24位双通道支持同步采样的ADC,高昂的售价注定了这不会是一款常用芯片,我在做驱动开发期间在中文互联网基本没有找到可以参考的资料或例程。但这次毕竟做的是一款高精度同步电压电流表,这款芯片是领导亲自选的,要求很明确,就是分辨率拉满,咱也只能硬着头皮开干。 这次也是分享以下驱动开发的思路和例程,希望能够帮助到相关人士,顺便,这款芯片要求5V和1.8V双电源供电也是让硬件同事疯狂吐槽。 1.通讯接口 AD4630-24支持串行通讯,为了提高采样结果的读取速率,SDO最高支持8通道同步输出,但很可惜这次使用的单片机是STM32F407,意法连QSPI都不给,只能使用标准的SPI接口通讯,例程也
[单片机]
基于STC51单片机的计数器
设计要求:# 写出矩阵键盘的驱动 分别按下对应的键。数码管会将键盘对应的值累加并显示 设计概述:#   按照设计要求,所需要的单片机芯片为STC89C52,所用的硬件工具是由华清远见开发的基于STC89C52的智能小车。该小车配备所需要的矩阵按键模块和数码管模块,矩阵按键模块由P3口控制,数码管模块位选P2.7口控制,段选由P2.6口控制,数字显示由P0口控制。STC89C52是一种低功耗,高性能的8位微控制器,是加强版的80C51单片机。 矩阵键盘:4x4矩阵键盘共有16个按键,每个按键的左端都连接在一根线上形成行线,每个按键的右端也都连接在一根线上形成列线。P3口的低4位分别于行线连接,高4位分别与列线连接。通过扫
[单片机]
基于<font color='red'>STC51</font><font color='red'>单片机</font>的计数器
基于STC51单片机的霓虹灯
设计要求:# 使用PWM驱动8个LED灯 人眼不能观察到灯光全灭 灯光要有动画效果 设计概述:# 按照设计要求,为了更直观的说明脉冲宽度调制技术(PWM),所以霓虹灯的动画效果为流水灯形式。所需要的单片机芯片为STC89C52,所用的硬件工具是由华清远见开发的基于STC89C52的智能小车。该小车配备所需要的LED灯模块,8个LED灯由P1口来控制。STC89C52是一种低功耗,高性能的8位微控制器,是加强版的80C51单片机,但是与80C51单片机一样不具备PWM硬件模块,所以我们需要自己写一个程序来软件模拟PWM方波。 PWM是一种方波,可以实现数字信号控制模拟电路,它有两个重要参数周期或频率,占空比。占空比 = 高电
[单片机]
STC51从入门到精通(汇编)----第四讲:80C51单片机的指令系统(二)寻址方式
4.2.1 指令系统中使用的常用符号: Rn: 当前寄存器工作区中的寄存器, 其中, n=0 -- 7; direct: 内部数据存储器地址, 可指定一个内部RAM单元(0-- 127)或一个专用寄存器(128-- 255); @Ri: 通过R1或R0间接寻址, 指定数据存储器RAM中的一个单元(0-- 255); #data: 在指令中指明8位常数; #data16: 在指令中指明16位常数; addr11: 11位目的地址, 用在ACALL或AJMP指令中,表示调用或转移地址, 寻址范围为2KB; addr16: 16位目的地址, 用在LCALL或LJ MP指令中, 表示调用或转换地址,
[单片机]
<font color='red'>STC51</font>从入门到精通(汇编)----第四讲:80C51<font color='red'>单片机</font>的指令系统(二)寻址方式
STC51从入门到精通(汇编)----第四讲:80C51单片机的指令系统(一)程序设计语言和指令
学习指令系统重点要掌握以下几点: 指令功能 寻址方式 操作数的位数和存储结构 对PSW的影响 指令与存储区的对应关系 各类指针及其指向的地址范围 转移指令的转移范围 指令字节数和机器周期数 & 本章主要介绍单片机的寻址方式及指令系统,是必须掌握的内容。 & 一台计算机所有指令的集合, 称为该计算机的指令系统。 & 各种计算机都有专用的指令系统。 4.1.1 程序设计语言和指令: 程序设计语言是实现人机交换信息的重要工具。机器语言指令是单片机能直接识别、分祈和执行的二进制码,用机器语言写的程序称为目标程序。 例如, 要做 10+20 的加法, 在51中可用机器码指令编程: 01110100
[单片机]
<font color='red'>STC51</font>从入门到精通(汇编)----第四讲:80C51<font color='red'>单片机</font>的指令系统(一)程序设计语言和指令
stc51单片机做的GPS定位及轨迹记录器
基于C3-370C的GPS定位及轨迹记录仪! 在51hei买了C3-370C的GPS,准备做GPS轨迹记录,因为我一直想在旅游的照片上加上坐标信息…… 开始用M48作控制MCU,结果写着写着,发现Flash空间不足,想换个M8或M88的,在常州还不好买,手上正好还有两块STC90C52,8K的,于是就换上C52了。 C52不带AD,那电池检测又成问题,于是从坏的万用表上拆下一个2904运放,做了个简单的电池电压检测。 现在整个设备的供电都由锂电池直接提供,配一块880mah的手机电池,可以用6小时左右; 我用24C64记录轨迹信息,包括日期时间、经纬度在内的一组信息,可存储512条,按1min/条,可存8小时。 数据通过串口传给上
[单片机]
<font color='red'>stc51</font><font color='red'>单片机</font>做的GPS定位及轨迹记录器
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

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