DHT11 温湿度 LCD1602 显示与报警 FPGA 设计 Verilog Vivado
名称DHT11 温湿度 LCD1602 显示与报警 FPGA 设计 Verilog Vivado软件Vivado语言Verilog功能介绍本设计实现了基于 DHT11 的温湿度采集、数据处理和 LCD1602 字符液晶显示功能。FPGA 读取 DHT11 输出的温度、湿度数据后将数值转换为 LCD1602 可显示的 ASCII 字符在液晶第一行显示湿度信息在第二行显示温度信息适合用于温湿度监测、传感器接口学习和 FPGA 外设综合实验。 工程使用 Verilog 编写开发环境为 Vivado。设计围绕 DHT11 单总线时序、LCD1602 并口驱动、时钟分频、按键消抖、上下限数据设置以及比较报警等功能展开既包含传感器采集链路也包含人机显示输出链路结构比较完整。 该设计已经结合开发板进行上板验证配有管脚约束文件和开发板实物验证材料。对于需要直接参考 Vivado 工程、移植 DHT11 采集逻辑、学习 LCD1602 显示控制或完成课程设计的用户具有较高的复用价值。运行环境开发语言Verilog 开发软件Vivado 工程类型FPGA 工程工程文件为 DHT11_LCD1602.xpr 主要外设DHT11 温湿度传感器、LCD1602 字符液晶、按键输入及报警相关输出 约束文件pins.xdc设计思路系统以 FPGA 为核心控制器整体流程可以分为温湿度采集、数据整理、显示编码、LCD1602 驱动以及报警比较几个部分。DHT11 驱动模块负责按照传感器通信时序完成起始信号、响应检测、数据接收和有效数据输出得到可用于后级显示与判断的温度、湿度数值。 显示部分将温度和湿度的十进制数值拆分为十位、个位并加上 ASCII 偏移量转换成字符编码。LCD1602 显示内容采用两行字符组织方式第一行显示 humidity 信息第二行显示 temp 信息再由 LCD 驱动模块完成使能、读写、寄存器选择和 8 位数据总线控制。 时钟部分通过 Clock_Gen 产生适合 LCD 驱动的工作时钟降低高速系统时钟与 LCD1602 慢速控制时序之间的耦合。按键消抖模块用于提高按键输入稳定性上下限设置模块与比较模块配合可用于温湿度阈值判断及报警逻辑扩展。 顶层设计将传感器采集、阈值设置、比较报警和 LCD 显示模块连接起来形成从环境数据输入到液晶显示输出、再到报警提示的完整硬件逻辑链路。模块结构主要模块包括 LCD_TopLCD1602 显示顶层模块负责接收温度、湿度数据并组织两行显示内容。 top_dht11系统顶层相关模块用于整合 DHT11 采集、显示、阈值比较及外设接口。 dht11_driveDHT11 温湿度传感器驱动模块完成单总线通信和数据读取。 LCD_DriverLCD1602 驱动模块控制 LCD_EN、RS、RW 和 DB8 数据总线。 Clock_GenLCD 工作时钟分频模块。 display_num数值显示处理模块。 max_data_set、min_data_set上下限数据设置相关模块。 compare阈值比较与报警判断相关模块。 key_debounce按键消抖模块用于稳定按键输入。开发板验证设计已完成开发板验证工程中配置了 pins.xdc 管脚约束并配套有开发板实物照片、上板验证图片和演示视频。Vivado 工程中也包含综合、实现和 bitstream 生成结果可作为开发板移植和实测参考。 开发板验证内容覆盖 DHT11 温湿度采集、LCD1602 显示以及报警演示场景。约束文件与实物验证材料能够帮助用户对照 FPGA 引脚连接、外设接线和实际显示效果进行复现。演示视频演示视频包括正常上板运行效果和报警效果两部分可用于查看 DHT11 采集、LCD1602 显示以及报警逻辑在开发板上的实际运行状态。演示视频请关注公众号后获取对应资料查看。演示视频请关注公众号后获取对应资料查看。仿真图/仿真说明/设计文档图片配有 DHT11 传感器、LCD1602 液晶和开发板相关图片可用于了解外设连接对象、显示器件形态以及上板运行环境。部分代码以下展示顶层模块LCD_Top的部分代码完整代码可关注下方公众号卡片获取。module LCD_Top(clk_50M,rst,LCD_EN,RS,RW,DB8,temp_data,humi_data); input clk_50M,rst;//低电平复位 output LCD_EN,RS,RW;//LCD接口 output [7:0] DB8;//LCD接口 input [7:0] temp_data;//温度 input [7:0] humi_data;//湿度 wire clk_LCD; //用于将Clock_Gen模块clk_LCD输出连接至LCD_Driver模块的clk_LCD输入 wire [7:0] receive_data; wire [111:0] Data_First,Data_Second; wire [7:0] number1; wire [7:0] number2; wire [7:0] number3; wire [7:0] number4; assign number1humi_data/10 8h30;//转为ASCII码 assign number2humi_data%10 8h30;//转为ASCII码 assign number3temp_data/10 8h30;//转为ASCII码 assign number4temp_data%10 8h30;//转为ASCII码 //LCD分频模块 Clock_Gen U1(.clk_50M(clk_50M), .rst(rst), .clk_LCD(clk_LCD)); assign Data_First{ humidity,number1,number2}; //液晶显示的第一行的数据 assign Data_Second{ temp,number3,number4};//液晶显示的第二行的数据 //LCD驱动模块 LCD_Driver U2(.clk_LCD(clk_LCD), .rst(rst), .Data_First(Data_First),//液晶第一行 .Data_Second(Data_Second),//液晶第二行 .LCD_EN(LCD_EN), .RS(RS), .RW(RW), .DB8(DB8)); endmodule代码获取点击下方公众号卡片

相关新闻