名称: DHT11温湿度采集UART传输系统的设计Verilog代码Quartus Spirit_V4开发板
软件: Quartus II
语言: Verilog HDL
代码功能
本项目实现了一个完整的温湿度监测系统,通过DHT11传感器采集环境温度和湿度数据,并将数据通过UART串口传输。系统具备以下核心功能:
·DHT11传感器数据采集:精确采集温度和湿度数据,每2秒更新一次
·数码管显示:实时显示温湿度数值,支持四位数字显示
·UART串口通信:将采集的数据通过115200波特率串口发送
·模式切换:通过开关选择显示温度或湿度数据
代码实现思路
系统架构设计
整个系统采用模块化设计,主要包含四个核心模块:
1.DHT11驱动模块:负责与DHT11传感器通信,采用状态机控制数据采集流程
2.数码管显示模块:实现动态扫描显示,将温湿度数据转换为数码管显示格式
3.UART发送模块:实现串口数据发送功能,包含波特率生成器
4.顶层控制模块:协调各模块工作,实现数据路由和模式切换
关键技术实现
·DHT11通信协议:严格按照DHT11时序要求实现主机-从机通信
·状态机设计:使用四状态状态机控制DHT11数据采集流程
·动态扫描显示:通过时分复用技术实现四位数码管显示
·波特率生成:基于50MHz时钟精确分频生成115200波特率
代码结构
模块层次结构
DH11_uart_top (顶层模块)
├── dht11 (温湿度采集模块)
├── display_num (数码管显示模块)
└── uart (串口传输模块)
├── baud_rate_gen (波特率生成器)
└── transmitter (数据发送器)
模块功能描述
1.DH11_uart_top.v:顶层模块,负责模块间连接和数据路由
2.dht11.v:DHT11传感器驱动,实现完整的数据采集协议
3.display_num.v:数码管显示控制,支持温湿度数据动态显示
4.uart.v:UART通信控制器,包含波特率生成和数据发送
5.baud_rate_gen.v:波特率时钟生成,支持115200波特率
6.transmitter.v:串口数据发送器,实现UART发送状态机
数据流设计
系统数据流清晰:DHT11采集数据 → 数码管显示 → UART发送。通过开关控制选择显示温度或湿度数据,所有模块协同工作实现实时监测功能。
FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com
本代码已在Spirit_V4开发板验证,Spirit_V4开发板如下,其他开发板可以修改管脚适配:
设计文档:
1、工程文件
2、程序文件
3、程序编译
4、RTL图
5、Testbench
6、仿真图
整体仿真图
显示模块
UART发送模块
部分代码展示:
`timescale 1ns / 1ps ////////////////////////////////////////////////////////////////////////////////// // ////////////////////////////////////////////////////////////////////////////////// module DH11_uart_top( input clk_50M,//50M时钟 input reset,//复位,按下低电平--key1 input switch,//switch,//切换(switch==1温度)和(switch==0湿度)--key2 output uart_tx,//串口发送 output uart_led,//串口发送指示灯 inout dh11_io,//温湿度传感器接口 output [3:0] bit_select,//数码管位选 output [7:0] lednum_select //数码管段选 ); wire [7:0] temp_data;//温度 wire [7:0] humi_data;//湿度 //dht11温湿度采集模块 dht11 i_dht11( .i_clk(clk_50M), .i_rst_n(reset), .io_data(dh11_io), .o_temp(temp_data), .o_humi(humi_data) ); //数码管显示模块 display_num i_display_num( . clk(clk_100M), . temp_data(temp_data), . humi_data(humi_data), . bit_select(bit_select),//数码管位选 . lednum_select(lednum_select)//数码管段选 );
488