FPGA温湿度光照监测与数字时钟 Verilog Quartus

名称:FPGA温湿度光照监测与数字时钟 Verilog Quartus

软件:Quartus

语言:Verilog

开发板/平台:Cyclone IV FPGA开发板

功能介绍

这是一个基于 Verilog 与 Quartus 的 FPGA 环境监测及时钟设计。系统集成 DHT11 温湿度采集和 AP3216C 光照传感接口,支持设置温度、湿度及光照阈值,并通过独立 LED 输出对应的报警状态。 系统还包含数字时钟与闹钟控制功能,可通过开关和按键切换模式、调整小时与分钟,并切换 12/24 小时制。时间由数码管显示,LCD1602 接口用于显示系统信息;拨码开关和确认按键参与阈值设置及功能操作。

运行环境

硬件描述语言:Verilog。开发软件:Quartus。工程提供 DE70.qpf 项目文件及 Cyclone IV FPGA 开发板管脚分配文件。

设计思路

顶层模块 DHT11_ctrl 将温湿度采集、光照传感、时钟显示和阈值报警组织为一个完整的监测系统。DHT11 驱动通过单总线读取温湿度数据,AP3216C 接口通过 I2C 获取光照相关数据;阈值控制模块结合拨码开关、模式选择和确认按键设置温度、湿度及光照阈值,并由相应报警输出反映比较结果。 时钟部分提供时间显示、闹钟操作和 12/24 小时制切换等控制接口。显示部分连接 LCD1602 与数码管:LCD 接口用于系统信息显示,数码管输出用于时分秒显示,模式指示灯则对应操作状态。顶层通过内部连线将传感器读数、阈值设置、显示与报警模块连接起来。

模块结构

顶层模块:DHT11_ctrl。主要功能模块包括 dht11 温湿度传感器驱动、AP3216C I2C 接口、threshold_ctrl 阈值设置、dis_HEX 温湿度显示与报警,以及 Digital_clock、set_mode、display、alarm_clock 等时钟与显示控制模块;LCD1602 相关功能由 lcd1602_show 和 LCD_Driver 等模块配合实现。

开发板验证

工程提供了 DE70.qsf 管脚分配文件,并配有上板操作指南,接口分配涉及 DHT11 温湿度传感器、AP3216C 光照传感器、LCD1602、数码管、拨码开关和按键。操作时,DHT11 数据端连接 A0,AP3216C 的 I2C 时钟与数据端连接 A2、A4;可结合板载按键和开关进行模式切换、时间设置及阈值设置。

演示视频

工程配有功能演示视频和上板视频,可查看系统运行与开发板操作过程。

仿真图/仿真说明/设计文档图片

附有设计文档图片,内容涉及工程文件、程序编译、RTL 图、管脚分配和 Testbench 仿真图。

FPGA温湿度光照监测与数字时钟 Verilog Quartus 设计文档图片 image1.png

FPGA温湿度光照监测与数字时钟 Verilog Quartus 设计文档图片 image10.png

FPGA温湿度光照监测与数字时钟 Verilog Quartus 设计文档图片 image2.png

FPGA温湿度光照监测与数字时钟 Verilog Quartus 设计文档图片 image3.png

FPGA温湿度光照监测与数字时钟 Verilog Quartus 设计文档图片 image4.png

FPGA温湿度光照监测与数字时钟 Verilog Quartus 设计文档图片 image5.png

FPGA温湿度光照监测与数字时钟 Verilog Quartus 设计文档图片 image6.png

FPGA温湿度光照监测与数字时钟 Verilog Quartus 设计文档图片 image7.png

FPGA温湿度光照监测与数字时钟 Verilog Quartus 设计文档图片 image8.png

FPGA温湿度光照监测与数字时钟 Verilog Quartus 设计文档图片 image9.png

部分代码

以下展示顶层模块 DHT11_ctrl 的部分代码,完整源码请下载压缩包查看。

module DHT11_ctrl(
    input clk,          // 系统时钟: 50MHz
    input i_rst_n,      // 系统复位: 低电平有效--key0
    inout io_data,      // DHT11单总线数据端口: 双向IO--A0
	 
    // Digital_clock 控制接口
    input alarm_SW,     // 闹钟显示/设置开关--SW0
    input MODE_SW,      // 模式切换开关--SW1
    input AH_key,       // 调整小时按键--key1
    input AM_key,       // 调整分钟按键--key2
    input change,       // 12/24 小时制切换--SW3
    output [3:0] led_mode, // 模式指示灯(LDE0~LED3)	 

    input [6:0] sw_val,   // 7 个拨码开关--SW5~SW11
    input [1:0] sw_mod,   // 选择设置参数(温度/湿度/光照)--SW12,SW13
    input btn_confirm,    // 按键确认,低电平按下--key3

    output LED_temp,    // 温度报警指示灯: 高电平亮,当实际温度 > 阈值时触发--LED4
    output LED_humi,    // 湿度报警指示灯: 高电平亮,当实际湿度 > 阈值时触发--LED5
    output LED_lux,     // 光照报警指示灯: 高电平亮,当实际光照 > 阈值时触发--LED6

    // AP3216C I2C 接口
    output ap_scl,      // AP3216C I2C 时钟--A2
    inout  ap_sda,      // AP3216C I2C 数据--A4

    // LCD1602 接口
    output LCD_EN,      // LCD 使能
    output RS,          // LCD 寄存器选择
    output RW,          // LCD 读写选择
    output [7:0] DB8,   // LCD 数据总线
	 output LCD_ON,      // LCD power
	 output LCD_BLON,      //Back Light ON/

    // 数码管段选输出 (共阳极编码,低电平点亮段)
    output [7:0] HEX0,  // 时间显示: 秒个位
    output [7:0] HEX1,  // 时间显示: 秒十位
    output [7:0] HEX2,  // 时间显示: 分个位
    output [7:0] HEX3,  // 时间显示: 分十位

    output [7:0] HEX4,  // 时间显示: 时个位
    output [7:0] HEX5,  // 时间显示: 时十位
    output [7:0] HEX6,  // 预留(默认熄灭)
    output [7:0] HEX7   // 预留(默认熄灭)
);

// 内部连线:用于连接传感器驱动模块输出的温湿度原始数据
wire [7:0] temp_data;   // 采集到的8位温度数据
wire [7:0] humi_data;   // 采集到的8位湿度数据
wire [15:0] als_data;   // 光照强度(lux)
wire [9:0]  ps_data;    // 距离(接近)数据
wire [6:0] set_temp;    // 温度阈值
wire [6:0] set_humi;    // 湿度阈值
wire [6:0] set_lux;     // 光照阈值

// DHT11 显示模块的数码管输出仅用于内部连接
wire [7:0] dht_hex0;
wire [7:0] dht_hex1;
wire [7:0] dht_hex2;
wire [7:0] dht_hex3;
wire [7:0] dht_hex4;
wire [7:0] dht_hex5;
wire [7:0] dht_hex6;
wire [7:0] dht_hex7;


assign LCD_ON =1;
assign LCD_BLON=1;
//---------------------------------------------------------
// 实例化:DHT11 传感器驱动模块
// 功能:按照DHT11时序协议从传感器读取40位数据,并解析出温湿度。
//---------------------------------------------------------
dht11 i_dht11(
    .i_clk   (clk),       // 输入时钟
    .i_rst_n (i_rst_n),   // 复位信号
    .io_data (io_data),   // 双向数据总线
    .o_temp  (temp_data), // 输出解析后的温度
    .o_humi  (humi_data)  // 输出解析后的湿度
);

//---------------------------------------------------------
// 实例化:显示与报警控制模块
// 功能:1. 将温湿度数据拆分为十位和个位;
//       2. 进行阈值比较,驱动LED报警;
//       3. 将数值转换为数码管7段码显示。
//---------------------------------------------------------
dis_HEX i_dis_HEX(
    .clk      (clk),       // 输入时钟
    .temp     (temp_data), // 实时温度输入
    .humi     (humi_data), // 实时湿度输入
    .set_temp (set_temp),  // 预设温度阈值
    .set_humi (set_humi),  // 预设湿度阈值
    .LED_temp (LED_temp),  // 温度报警输出
    .LED_humi (LED_humi),  // 湿度报警输出
    // 数码管显示输出
    .HEX0     (dht_hex0),
    .HEX1     (dht_hex1),
    .HEX2     (dht_hex2),
    .HEX3     (dht_hex3),
    .HEX4     (dht_hex4),
    .HEX5     (dht_hex5),
    .HEX6     (dht_hex6),
    .HEX7     (dht_hex7)
);

//---------------------------------------------------------
// 实例化:阈值控制模块
//---------------------------------------------------------
threshold_ctrl i_threshold_ctrl(
    .clk        (clk),
    .rst_n      (i_rst_n),
    .sw_val     (sw_val),
    .sw_mod     (sw_mod),
    .btn_confirm(btn_confirm),
    .set_temp   (set_temp),
    .set_humi   (set_humi),
    .set_lux    (set_lux)
);

//---------------------------------------------------------
// 实例化:AP3216C 传感器接口
// ... 以下代码略,完整源码请下载压缩包查看

代码文件(付费下载)

📥 付费后此处显示完整工程压缩包下载链接。
1、代码文件需要付费后才可见。
2、支付问题请联系微信公众号客服。
3、优质Verilog/VHDL代码资源,所见即所得。
Verilog/VHDL资源下载 » FPGA温湿度光照监测与数字时钟 Verilog Quartus

注册为本站会员,充值100得150,详情咨询客服

目前为止共有 *** 位优秀的会员加入! 立刻加入会员