根据熊光强度传感器的BH1750状态机驱动程序项目进行升级(带有LCD屏幕显示)

昨天我们使用了multi_timer +状态机来读取光强度。

这篇文章的链接如下:基于熊光强度传感器BH1750(multi_timer +状态机工程应用)的实践,今天我们采取了进一步的措施,并将其发送给OLED与OLED结合!所谓所见即所得,这是发展的最大乐趣。

在实施此小项目之前,首先让我们了解Bear Pie开发板上的此屏幕。

让我们看一下原理图的连接方式:如上图所示。

根据数据手册解释LCD控制方法:LCD_SPI_MOSI,LCD_SPI_CLK这两个引脚用于建立SPI通信协议。

传统的SPI具有SPI_MOSI(主设备输出从设备输入),SPI_MISO(主设备输入从设备输出),SPI_SCK(SPI时钟线),那么为什么这里没有SPI_MISO?这是因为只需要显示它,因此在设计模块时,从机器发送到主机的数据线是隐藏的。

您可以参阅数据表第66页的相关说明。

由于篇幅所限,将不会在此处发布。

原理图引脚使用情况分析LCD_WR_RS是芯片的命令/数据控制引脚:根据数据手册,当LCD_WR_RS引脚为低电平时,它是写命令状态;当LCD_WR_RS引脚为高电平时,它是数据写状态。

LCD_RESET是LCD的复位引脚。

当模块加电时,它被拉低。

通常,该位需要设置为1。

LCD_POWER是LCD的电源引脚。

通常,可以将其直接拉高以使其点亮并正常工作。

还有一个非常重要的功能,即LCD的芯片选择功能。

芯片选择已在原理图中直接下拉,因此可以使能芯片。

关于通信协议对于SPI通信,数据具有传输时序,即时钟相位(CPHA)和时钟极性(CPOL)的组合:CPHA的级别确定串行同步时钟是在第一个时钟转换沿还是在第一个时钟转换沿。

第一次时钟转换。

在两个时钟转换沿收集数据。

当CPHL = 0时,在第一个过渡沿执行数据收集;否则,在第一个过渡沿执行数据收集。

CPOL的电平确定串行同步时钟的空闲状态电平,并且CPOL = 0(低)。

从图中可以看出,当SCLK的第一个下降沿开始发送数据时,使用SPI0在一个时钟周期内发送8位数据,即按位传输,高位在先,低位在后。

项目实战在上一节中,我们没有使用扩展板的LED灯。

在本节中,我们将配置光源(LED_SW)并将其从原始开发板上移除。

该指示灯位于开发板的PB9端口上。

我们将在上一个项目的基础上添加与SPI相关的配置并直接实现它。

在上一部分中打开项目:1.修改LED_SW灯的配置2.配置SPI2 3.配置LCD_WR_RS,LCD_RESET,LCD_POWER 4.生成项目,然后移植熊派LCD的示例包括LCD驱动程序源代码。

将LCD相关文件添加到Keil项目中并进行编译后,发现存在错误:LIGHT_SENSOR_I2CLIGHT_SENSOR_I2C.axf:错误:L6218E:未定义的符号SPI2_WriteByte(从lcd.o引用)。

在lcd中的含义程序文件中未定义SPI2_WriteByte接口。

找到错误的地方,添加这样的功能,然后编译以解决问题。

& nbsp;& nbsp;& nbsp;接下来,在main.c中添加头文件:/ *私有包含--------------------------- -------- ----------------------- * // *用户代码开始包括* /#include“ lcd.h” #include“ HzLib.h” / *用户代码结束包括* /接下来,添加LCD显示逻辑:/ ** * @brief应用程序入口点。

* @retval int * / int main(void){/ *用户代码开始1 * / char display_buf [20] = {0}; / *用户代码结尾1 * / / * MCU配置--------------- ----------- ------------------ * / / *重置所有外围设备,初始化Flash接口和Systick。

* / HAL_Init(); / *用户代码开始Init * / / *用户代码结束Init * / / *配置系统时钟* / SystemClock_Config(); / *用户代码开始SysInit * / / *用户代码结束SysInit * / / *初始化所有已配置的外围设备* / MX_GPIO_Init(); MX_I2C1_Init(); MX_USART1_UART_Init(); MX_SPI2_Init(); / *用户代码开始2 * / / *在串行端口初始化之后添加此延迟,以防止后续的printf打印乱码* / HAL_Delay(200); LCD_Init(); LCD_Clea r(BLACK); //将屏幕清除为黑色LCD_ShowString(5,10,240,32,32,“ BearPi LuxTest”); //显示字符串,字体大小32 * 32 printf(“光强度读取测试实验 ”); Init_BH750(); timer_init(& amp; lsensor.timer1,lsensor.timeout_cb,1,1); ti