# stm32-led **Repository Path**: dingl/stm32-led ## Basic Information - **Project Name**: stm32-led - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2024-04-30 - **Last Updated**: 2024-04-30 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # stm32-led #### 安装教程 1. 克隆stm32-led项目代码,git clone https://gitee.com/tukela/stm32-led.git 2. 安装cubeide 软件后,双击源码目录的.project文件即可打开项目,编译源码,可以生成stm32 bin文件 3. 安装PicsimLab模拟器软件,并打开模拟器,选择blue pill主板 #### 使用说明 1. blue pill 导入bin文件,仿真软件开始运行。 2. 点击仿真软件的Module-->spare parts-->file -->load configration. 选择源码目录下的lcd5510.pcf,即可看到运行的仿真效果 3. 修改源码main.C中的test_lcd函数,并编译运行,观察lcd输出 #### 参与贡献 ``` /** * LCD接口初始化函数 * 通过SPI通信协议与LCD进行数据传输。具体功能包括: * 设置LCD芯片使能引脚、背光控制引脚、复位引脚和数据/命令选择引脚。 * 将SPI句柄设置为传入的参数,用于后续的SPI通信。 * 设置LCD的对比度、温度控制和偏置模式。 * 可选地打开LCD背光 **/ void LcdPortInit(SPI_HandleTypeDef *spi_handle) /** * * 设置LCD的SPI句柄函数,并对LCD进行重置和设置为正常模式。 * 其中: * 将传入的SPI句柄赋值给全局变量spi_handle,用于后续的SPI通信; * 调用lcd_reset()函数对LCD进行硬件复位; * 使用osDelay(1)函数延时1ms,确保LCD硬件复位完成; * 调用lcd_set_normal_mode()函数将LCD设置为正常模式,以进行后续的显示操作。 */ void lcd_set_spi_handle(SPI_HandleTypeDef *_spi_handle) /** * 将LCD(液晶显示器)设置为正常模式。 * 内部调用了lcd_write_command函数,传入参数0x0C,向LCD发送指令,实现模式的切换。 * */ void lcd_set_normal_mode() /** * 设置LCD显示器的对比度函数。 * 函数中的lcd_set_extended_commands()函数向LCD发送扩展命令,以允许设置对比度。 * 接着,lcd_write_command(0x80 | contrast)函数将对比度值写入LCD控制器中。 * 最后,lcd_set_basic_commands()函数恢复LCD为基本命令模式。 * 通过调整contrast参数的值,可以增加或减少LCD显示器的对比度。 */ void lcd_set_contrast(uint8_t contrast) /*** * 设置LCD的温度控制 * 它首先调用lcd_set_extended_commands()函数开启扩展命令模式, * 然后通过lcd_write_command()函数发送一个包含温度控制参数的命令(0x04 | temp_control), * 最后调用lcd_set_basic_commands()函数恢复到基本命令模式。 */ void lcd_set_temp_control(uint8_t temp_control) /** * 设置LCD的偏置模式。 * 它首先通过调用lcd_set_extended_commands()函数启用扩展命令, * 然后通过lcd_write_command()函数将特定的偏置模式值 * (由bias_mode参数提供)写入LCD控制器。 * 最后,它通过调用lcd_set_basic_commands()函数恢复到基本命令模式。 * **/ void lcd_set_bias_mode(uint8_t bias_mode) /** * 设置LCD芯片使能引脚的GPIO端口和引脚号 * 参数port是一个指向GPIO端口的指针, * 参数pin是GPIO引脚号。 * 函数内部将这两个参数分别赋值给全局变量lcd_chip_enable_port和lcd_chip_enable_pin。 * 这样可以在其他函数中通过这两个全局变量来控制LCD芯片的使能信号 **/ void lcd_set_chip_enable_pin(GPIO_TypeDef *port, uint16_t pin) /** * 设置LCD背光灯的GPIO端口和引脚。 * 参数port:表示GPIO端口的指针。 * 参数pin:表示GPIO引脚的编号。 * 函数将传入的port和pin赋值给全局变量lcd_light_port和lcd_light_pin,以便在其他函数中使用。 */ void lcd_set_light_pin(GPIO_TypeDef *port, uint16_t pin) /** * 此函数设置LCD屏幕的光标到指定位置,通过组合特定指令码和行列号来完成 */ static void lcd_set_cursor(uint8_t x, uint8_t y) /** * 写入单字节数据到lcd */ static void lcd_write_byte(uint8_t data) /** * 写入数据到lcd * 它接受两个参数: * 一个指向uint8_t类型数据的指针data * 个uint16_t类型的数据大小size。 * 函数的主要功能是通过调用lcd_write_data函数, * 将data指向的数据块写入LCD设备,写入的数据大小为size字节。 **/ static void lcd_write_multiple_bytes(uint8_t *data, uint16_t size) /** * 写命令静态函数 * 它接受一个uint8_t类型的参数data,用于向LCD(液晶显示器)发送一条指令。 * 首先,函数通过HAL_GPIO_WritePin函数将lcd_data_command_pin设置为LCD指令模式。 * 接着,通过HAL_GPIO_WritePin函数将lcd_chip_enable_pin置位低电平,以使能LCD芯片。 * 然后,使用HAL_SPI_Transmit函数通过SPI(串行外设接口)将data传输给LCD芯片,传输1个字节的数据, * 超时时间为LCD_SPI_TIMEOUT。 * 最后,通过HAL_GPIO_WritePin函数将lcd_chip_enable_pin置位高电平,以取消LCD芯片的使能状态。 * */ static void lcd_write_command(uint8_t data) /** * lcd_write_data静态函数 * 它接受两个参数:一个指向uint8_t类型数据的指针data * 一个uint16_t类型的数据大小size。该函数的主要功能是通过SPI(串行外设接口)向LCD(液晶显示器)写入指定大小的数据。 * 具体实现过程如下: * 首先,通过HAL_GPIO_WritePin函数设置lcd_data_command_port上的lcd_data_command_pin引脚为LCD_DATA_MODE,以指示接下来要进行数据传输。 * 接着,通过HAL_GPIO_WritePin函数将lcd_chip_enable_port上的lcd_chip_enable_pin引脚置低电平,以使能LCD芯片。 * 然后,通过HAL_SPI_Transmit函数使用SPI接口将data指针指向的数据块传输到LCD芯片,传输的数据大小为size字节。 * 最后,通过HAL_GPIO_WritePin函数将lcd_chip_enable_port上的lcd_chip_enable_pin引脚置高电平,以取消LCD芯片的使能状态。 * */ static void lcd_write_data(uint8_t *data, uint16_t size) { HAL_GPIO_WritePin(lcd_data_command_port, lcd_data_command_pin, LCD_DATA_MODE); HAL_GPIO_WritePin(lcd_chip_enable_port, lcd_chip_enable_pin, GPIO_PIN_RESET); HAL_SPI_Transmit(spi_handle, data, size, LCD_SPI_TIMEOUT); HAL_GPIO_WritePin(lcd_chip_enable_port, lcd_chip_enable_pin, GPIO_PIN_SET); } /** * 控制LCD背光的开启或关闭 * 参数enabled为1时,表示开启背光,函数内部通过GPIO口输出低电平 * 参数enabled为0时,表示关闭背光,函数内部通过GPIO口输出高电平 * */ void lcd_backlight(uint8_t enabled) /** * 复位LCD(液晶显示器) * 通过HAL_GPIO_WritePin函数将lcd_reset_port上的lcd_reset_pin引脚置低电平,等待1ms,再置高电平。 * */ static void lcd_reset() ```