当前位置: 首页 > news >正文

LCD1602液晶显示屏详解(STM32)

目录

一、介绍

二、传感器原理

1.原理图​编辑

2.接口说明

三、程序设计

main文件

lcd1602.h文件

lcd1602.c文件

四、实验效果 

五、资料获取

项目分享


一、介绍

       LCD1602A字符型液晶显示模块是专门用于显示字母、数字元、符号等的点阵型液晶显示模块。分4位和8位数据传输方式。提供5×7点阵+光标的显示模式,最初代模块采用HD44780控制器,在各厂家生产的LCD1602模块中,基本也都采用了与之兼容的IC,所以特性上基本上一样的,只是字符颜色和背光不同。

以下是LCD1602液晶显示屏的参数:

名称

LCD1602A

模块电压

DC:5V

工作电流

1.7mAMAX

背光电流

24mAMAX

驱动

HDD44780

显示

蓝底白字/黄底黑字

工作温度

-20~70

哔哩哔哩视频链接:

LCD1602液晶显示屏(STM32)

(资料分享见文末) 

二、传感器原理

1.原理图

2.接口说明

三、程序设计

1.使用STM32F103C8T6英文字符数字和显示在LCD1602液晶显示屏上

D0

PA0

D1

PA1

D2

PA2

D3

PA3

D4

PA4

D5

PA5

D6

PA6

D7

PA7

RS

PC13

RW

PC14

E

PC15

main文件

#include "delay.h"
#include "sys.h"
#include "lcd1602.h"
#include "led.h"/*****************辰哥单片机设计******************STM32* 项目			:	LCD1602液晶显示屏实验                     * 版本			: V1.0* 日期			: 2025.2.6* MCU			:	STM32F103C8T6* 接口			:	参看lcd1602.h							* BILIBILI	:	辰哥单片机设计* CSDN			:	辰哥单片机设计* 作者			:	辰哥 **********************BEGIN***********************/uint8_t Disp[]="HELLO";//后加4个空格int main(void)
{SystemInit();//配置系统时钟为72M	delay_init(72);LED_Init();LED_On();LCD1602_Init();LCD1602_Write_String(0,0,"    HELLO!!!   ");//显示字符串LCD1602_Write_String(0,1,"                ");int i=0;while(1){LED_Toggle();i++;delay_ms(500);LCD1602_WriteCom(0xC6);LCD1602_WriteData(i+0x30);}
}

lcd1602.h文件

#ifndef __LCD1602_H
#define __LCD1602_H 
#include "sys.h"
#include "stdlib.h"	/*****************辰哥单片机设计******************STM32* 文件			:	LCD1602液晶显示屏h文件                     * 版本			: V1.0* 日期			: 2025.2.6* MCU			:	STM32F103C8T6* 接口			:	见代码							* BILIBILI	:	辰哥单片机设计* CSDN			:	辰哥单片机设计* 作者			:	辰哥 **********************BEGIN***********************///----------------OLED端口定义----------------- 
/***************根据自己需求更改****************/
#define LCD1602_RS_GPIO_PORT				GPIOC
#define LCD1602_RS_GPIO_PIN					GPIO_Pin_13#define LCD1602_RW_GPIO_PORT				GPIOC
#define LCD1602_RW_GPIO_PIN					GPIO_Pin_14#define LCD1602_E_GPIO_PORT					GPIOC
#define LCD1602_E_GPIO_PIN					GPIO_Pin_15/*********************END**********************/#define LCD1602_RS_H   	GPIO_SetBits(LCD1602_RS_GPIO_PORT,LCD1602_RS_GPIO_PIN)
#define LCD1602_RS_L	 	GPIO_ResetBits(LCD1602_RS_GPIO_PORT,LCD1602_RS_GPIO_PIN)#define LCD1602_RW_H		GPIO_SetBits(LCD1602_RW_GPIO_PORT,LCD1602_RW_GPIO_PIN)
#define LCD1602_RW_L		GPIO_ResetBits(LCD1602_RW_GPIO_PORT,LCD1602_RW_GPIO_PIN)#define LCD1602_E_H   	GPIO_SetBits(LCD1602_E_GPIO_PORT,LCD1602_E_GPIO_PIN)
#define LCD1602_E_L  		GPIO_ResetBits(LCD1602_E_GPIO_PORT, LCD1602_E_GPIO_PIN)void LCD1602_Init(void);
void LCD1602_WriteCom(uint8_t com);
void LCD1602_WriteData(uint8_t dat);
void LCD1602_Write_String(unsigned char x,unsigned char y,unsigned char *s);
void LCD1602_Write_Char(unsigned char x,unsigned char y,unsigned char Data); 
void LCD1602_Clear(void); #endif

lcd1602.c文件

#include "lcd1602.h"
#include "stdlib.h" 	 
#include "delay.h"/*****************辰哥单片机设计******************STM32* 文件			:	LCD1602液晶显示屏c文件                     * 版本			: V1.0* 日期			: 20245.2.6* MCU			:	STM32F103C8T6* 接口			:	见代码							* BILIBILI	:	辰哥单片机设计* CSDN			:	辰哥单片机设计* 作者			:	辰哥 **********************BEGIN***********************//*******************************************************************************
* 函 数 名       : LcdInit()
* 函数功能		 : 初始化LCD屏
* 输    入       : 无
* 输    出       : 无
*******************************************************************************/		void LCD1602_Init(void)
{		/*定义一个GPIO_InitTypeDef类型的结构体*/GPIO_InitTypeDef GPIO_InitStructure;/*开启LED相关的GPIO外设时钟*/RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOC,ENABLE);
//LCD_RS引脚初始化GPIO_InitStructure.GPIO_Pin = LCD1602_RS_GPIO_PIN;	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOC, &GPIO_InitStructure);	//LCD_RW引脚初始化GPIO_InitStructure.GPIO_Pin = LCD1602_RW_GPIO_PIN;GPIO_Init(GPIOC, &GPIO_InitStructure);//LCD_E引脚初始化GPIO_InitStructure.GPIO_Pin = LCD1602_E_GPIO_PIN;GPIO_Init(GPIOC, &GPIO_InitStructure);//D0-D7引脚初始化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_Init(GPIOA, &GPIO_InitStructure); LCD1602_WriteCom(0x38);  //开显示LCD1602_WriteCom(0x0c);  //开显示不显示光标LCD1602_WriteCom(0x06);  //写一个指针加1LCD1602_WriteCom(0x01);  //清屏LCD1602_WriteCom(0x80);  //设置数据指针起点}void LCD1602_DATAPINS(uint8_t Date)
{uint16_t dat_buf;dat_buf=GPIO_ReadOutputData(GPIOA);dat_buf=dat_buf&0xFF00;dat_buf=dat_buf|Date;GPIO_Write(GPIOA, dat_buf);}void LCD1602_WriteCom(uint8_t com)	  //写入命令
{LCD1602_RS_L;	   //选择发送命令LCD1602_RW_L;	   //选择写入LCD1602_E_L;     //使能LCD1602_DATAPINS(com);     //放入命令delay_ms(1);		//等待数  据稳定LCD1602_E_H;	          //写入时序delay_ms(5);		  //保持时间LCD1602_E_L;}/*******************************************************************************
* 函 数 名         : LcdWriteData
* 函数功能		   : 向LCD写入一个字节的数据
* 输    入         : dat
* 输    出         : 无
*******************************************************************************/		   void LCD1602_WriteData(uint8_t dat)			//写入数据
{LCD1602_RS_H;	   //选择发送命令LCD1602_RW_L;	   //选择写入LCD1602_E_L;     //使能LCD1602_DATAPINS(dat);  //写入数据delay_ms(1);LCD1602_E_H;   //写入时序delay_ms(5);   //保持时间LCD1602_E_L;}/*------------------------------------------------写入字符函数
------------------------------------------------*/void LCD1602_Write_Char(unsigned char x,unsigned char y,unsigned char Data) 
{     if (y == 0) {     LCD1602_WriteCom(0x80 + x);    //第一行    }    else {     LCD1602_WriteCom(0xC0 + x);  //第二行     }        LCD1602_WriteData( Data); //显示字符      
}/*------------------------------------------------写入字符串函数
------------------------------------------------*/void LCD1602_Write_String(unsigned char x,unsigned char y,unsigned char *s) {     if (y == 0) {     LCD1602_WriteCom(0x80 + x);  //第一行   }else {     LCD1602_WriteCom(0xC0 + x);  //第二行   }        while (*s) //判断是否检测到结尾符{     LCD1602_WriteData( *s);//显示字符     s ++;  //指针加1   }}/*------------------------------------------------清屏函数
------------------------------------------------*/void LCD1602_Clear(void) 
{ LCD1602_WriteCom(0x01); delay_ms(5);
}

四、实验效果 

五、资料获取

项目分享

相关文章:

  • 误触网络重置,笔记本电脑wifi连接不上解决方法(Win10,Win11通用)
  • react slot传递
  • django filter 日期大于当前日期的
  • 游戏引擎学习第247天:简化DEBUG_VALUE
  • 游戏引擎学习第248天:清理数据块显示
  • HQChart k线图配置
  • (七)RestAPI 毛子(Http 缓存/乐观锁/Polly/Rate limiting)
  • MIT XV6 - 1.1 Lab: Xv6 and Unix utilities - sleep
  • springboot不连接数据库启动(原先连接了mysql数据库)
  • 【Axure高保真原型】3级多选下拉列表
  • rocketmq一些异常记录
  • 基于云原生架构的后端微服务治理实战指南
  • Python中的协程(Coroutine)
  • django admin 去掉新增 删除
  • 秒杀系统 Kafka 架构进阶优化
  • 用Node.js施展文档比对魔法:轻松实现Word文档差异比较小工具,实现Word差异高亮标注(附完整实战代码)
  • [原创](现代Delphi 12指南):[macOS 64bit App开发]: NSString类型与CFStringRef类型字符串相互转换.
  • Cursor 和Trae 产品使用及MCP应用
  • 【操作系统原理07】输入/输出系统
  • 部署mongodb三幅本集群
  • “上海-日喀则”直飞航线正式通航,将于5月1日开启首航
  • 报告:到2030年我国无人机产业将率先实现万亿规模
  • 阿曼外交大臣:伊美下一轮谈判暂定5月3日举行
  • 苏迪曼杯即将在厦门打响,国羽向创纪录的14冠进军
  • “爱泼斯坦案”关键证人弗吉尼亚·朱弗雷自杀身亡
  • 精准滴灌“种企业”,苏南强县常熟新的进阶密码