STM32 LCD1602驱动程序代码详解
#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驱动程序的头文件,用于控制LCD1602液晶显示屏。
代码解析:
-
端口定义:
- 首先定义了LCD1602与STM32连接的各个端口和引脚,包括使能引脚(EN)、读写选择引脚(RW)、数据/命令选择引脚(RS)以及8位数据线。
- 每个端口都定义了其所属的GPIO端口组、端口号以及对应的时钟组,方便后续初始化和操作。
-
基本指令:
- 定义了一些LCD1602的基本操作指令,例如设置使能信号(SET_EN/CLE_EN)、设置读写模式(SET_RW/CLE_RW)以及设置数据/命令模式(SET_RS/CLE_RS)。
- 这些指令通过操作对应GPIO端口的位来实现对LCD1602的控制。
-
函数声明:
- 声明了LCD1602驱动程序的一些常用函数,例如初始化函数(Lcd_GPIO_init、Lcd_Init)、使能信号切换函数(Lcd_En_Toggle)、忙检测函数(Lcd_Busy)、数据发送函数(Gpio_data)、命令发送函数(Lcd_Write_Command)、数据写入函数(Lcd_Write_Data)、坐标设置函数(Lcd_SetXY)、字符串显示函数(Lcd_Puts)以及单个字符显示函数(Lcd_1Put)。
总结:
这段代码清晰地定义了LCD1602驱动程序所需的端口、指令以及函数,为后续编写具体的驱动函数和应用程序提供了基础。通过学习这段代码,可以更好地理解LCD1602的工作原理以及如何在STM32上进行驱动控制。
原文地址: https://www.cveoy.top/t/topic/jzAq 著作权归作者所有。请勿转载和采集!