diff --git a/README.md b/README.md new file mode 100644 index 0000000000000000000000000000000000000000..5724e81af0a6ff275a01190f6433889afbe1d301 --- /dev/null +++ b/README.md @@ -0,0 +1,152 @@ +# 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() +``` +