#ifndef __lcd1602_H #define __lcd1602_H

#include 'stm32f10x.h' #include 'delay.h'

/各端口定义*************/ #define GPIO_EN GPIOB // 使能端口组 #define GPIO_EN_PIN GPIO_Pin_7 // 使能端口号 #define RCC_GPIO_EN RCC_APB2Periph_GPIOB // 使能时钟组

#define GPIO_RW GPIOB // 读/写选择端口组 #define GPIO_RW_PIN GPIO_Pin_6 // 读/写选择端口号 #define RCC_GPIO_RW RCC_APB2Periph_GPIOB // 读/写时钟组

#define GPIO_RS GPIOB // 数据/命令端口组 #define GPIO_RS_PIN GPIO_Pin_5 // 数据/命令端口号 #define RCC_GPIO_RS RCC_APB2Periph_GPIOB // 数据/命令时钟组

#define GPIO_DATA_0 GPIOB // 数据线0_端口组 #define GPIO_DATA_0_PIN GPIO_Pin_8 // 数据线0_端口号 #define GPIO_DATA_1 GPIOB // 数据线1_端口组0 #define GPIO_DATA_1_PIN GPIO_Pin_9 // 数据线1_端口号 #define GPIO_DATA_2 GPIOB // 数据线2_端口组 #define GPIO_DATA_2_PIN GPIO_Pin_10 // 数据线2_端口号 #define GPIO_DATA_3 GPIOB // 数据线3_端口组 #define GPIO_DATA_3_PIN GPIO_Pin_11 // 数据线3_端口号 #define GPIO_DATA_4 GPIOB // 数据线4_端口组 #define GPIO_DATA_4_PIN GPIO_Pin_12 // 数据线4_端口号 #define GPIO_DATA_5 GPIOB // 数据线5_端口组 #define GPIO_DATA_5_PIN GPIO_Pin_13 // 数据线5_端口号 #define GPIO_DATA_6 GPIOB // 数据线6_端口组 #define GPIO_DATA_6_PIN GPIO_Pin_14 // 数据线6_端口号 #define GPIO_DATA_7 GPIOB // 数据线7_端口组 #define GPIO_DATA_7_PIN GPIO_Pin_15 // 数据线7_端口号 #define RCC_GPIO_DATA RCC_APB2Periph_GPIOB // 数据线时钟组

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

/基本指令************/ #define SET_EN GPIO_SetBits(GPIO_EN, GPIO_EN_PIN) //EN 使能 输出1 #define CLE_EN GPIO_ResetBits(GPIO_EN, GPIO_EN_PIN) // 输出0 #define SET_RW GPIO_SetBits(GPIO_RW, GPIO_RW_PIN) //RW 读写 输出1 #define CLE_RW GPIO_ResetBits(GPIO_RW, GPIO_RW_PIN) // 输出0 #define SET_RS GPIO_SetBits(GPIO_RS, GPIO_RS_PIN) //RS 指令 输出1 #define CLE_RS GPIO_ResetBits(GPIO_RS, GPIO_RS_PIN) // 输出0 /******************************************************************/

void Lcd_GPIO_init(void); void Lcd_Init( void ) ; void Lcd_En_Toggle(void); void Lcd_Busy(void); void Gpio_data(unsigned char x); void Lcd_Write_Command(unsigned char x,char Busy); void Lcd_Write_Data( unsigned char x); void Lcd_SetXY(unsigned char x,unsigned char y); void Lcd_Puts(unsigned char x,unsigned char y, unsigned char *string); void Lcd_1Put(unsigned char x,unsigned char y, unsigned char Data0);

#endif

STM32 LCD1602驱动代码解析

本代码实现了STM32平台下对LCD1602液晶显示屏的驱动控制,让我们来一步步解读这段代码。

1. 端口定义

代码首先定义了LCD1602所使用的STM32 GPIO端口,包括:

  • 控制端口:
    • GPIO_EN:使能信号EN端口,用于控制LCD1602的使能信号输入
    • GPIO_RW:读写选择信号RW端口,用于控制LCD1602的读写操作
    • GPIO_RS:数据/命令选择信号RS端口,用于选择是写入数据还是指令
  • 数据端口:
    • GPIO_DATA_0 - GPIO_DATA_7:8位并行数据线端口,用于传输显示数据

每个端口定义都包含了端口组、端口号以及对应的时钟,方便后续初始化和操作。

2. 基本指令

为了方便操作LCD1602的控制端口,代码定义了一些宏定义来实现基本指令,例如:

  • SET_EN:设置使能信号EN为高电平
  • CLE_EN:设置使能信号EN为低电平
  • SET_RW:设置读写选择信号RW为读模式
  • CLE_RW:设置读写选择信号RW为写模式
  • SET_RS:设置数据/命令选择信号RS为数据模式
  • CLE_RS:设置数据/命令选择信号RS为命令模式

通过这些宏定义,我们可以更简洁地控制LCD1602的工作状态。

3. 函数声明

代码中还声明了一些用于操作LCD1602的函数,包括:

  • Lcd_GPIO_init():初始化LCD1602使用的GPIO端口
  • Lcd_Init():初始化LCD1602,设置显示模式等
  • Lcd_En_Toggle():翻转使能信号EN,用于通知LCD1602读取数据或指令
  • Lcd_Busy():检测LCD1602是否处于忙碌状态
  • Gpio_data():设置8位数据线的值
  • Lcd_Write_Command():向LCD1602写入指令
  • Lcd_Write_Data():向LCD1602写入数据
  • Lcd_SetXY():设置光标位置
  • Lcd_Puts():显示字符串
  • Lcd_1Put():显示单个字符

通过调用这些函数,我们可以方便地控制LCD1602的显示内容、光标位置等。

总结

这段代码清晰地展示了如何使用STM32驱动LCD1602液晶显示屏。 通过定义端口、基本指令和功能函数,该代码实现了对LCD1602的全面控制。 你可以根据自己的硬件连接修改端口定义,并利用提供的函数实现丰富的显示功能。

STM32 LCD1602驱动代码解析

原文地址: https://www.cveoy.top/t/topic/jzzI 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录