名称:ds18b20温度显示及串口发送设计Verilog代码Quartus 开拓者开发板
软件:Quartus
语言:Verilog
代码功能:
ds18b20温度显示及串口发送
1、驱动ds18b20温度温度传感器,读取温度
2、温度显示在数码管,并可以通过串口发送至电脑
3、当温度达到报警预置时,报警
FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com
本代码已在开拓者开发板验证,开拓者开发板如下,其他开发板可以修改管脚适配:
演示视频:
设计文档:
1. 工程文件
2. 程序文件
3. 程序编译
4. RTL图
5. 管脚约束
6. Testbench
7. 仿真图
整体模块仿真
温度temp_data=2516,即25.16°,数码管显示位选和段选为sel,seg_led,蜂鸣器beep为低电平,不报警,串口信号tx发送串行温度数据到电脑。
串口发送模块仿真
仿真图分析:串口发送数据为tx_data=00011001,uart_txd信号为起始位低电平,tx_data[0]~tx_data[7],最后是停止位高电平。tx_flag在一次完整发送周期内保持高电平,低电平时表示一个字节发送完成。
蜂鸣器模块仿真
蜂鸣器模块主要是产生三种不同频率的波形,beep_clk1,beep_clk2,beep_clk3,上图显示了三种不同的频率。beep_clk1=10Hz,beep_clk2=5Hz,beep_clk3=2.5Hz。当输入din大于35度时,蜂鸣器输出beep_clk1,当大于30度是,输出beep_clk2,小于10度时输出beep_clk3。
数码管显示模块
数码管显示模块用于控制数码管的段选和位选,段选seg_led表示8段数码管所亮的数字,位选表示当前点亮哪个数码管。Dot_disp表示是否显示小数点,当dot_disp为低电平是显示小数点。图中可看出数码管显示如下图
部分代码展示:
//温度显示,串口发送,报警 module temp_disp( input sys_clk , //输入的系统时钟 input sys_rst_n , //输入的复位信号 inout dq , //ds18b20温度传感器单总线 output tx , //串口发送 output beep_out , //蜂鸣器报警 output [5:0] sel , //输出数码管位选信号 output [7:0] seg_led //输出数码管段选信号 ); //parameter define parameter POINT = 6'b000100; // 数码管小数点的位置 //wire define wire [19:0] temp_data; // 温度数值 wire sign; // 符号位 //***************************************************** //** main code //***************************************************** //例化动态数码管驱动模块 seg_led u_seg_led( //module clock .clk (sys_clk ), // 时钟信号 .rst_n (sys_rst_n), // 复位信号 //seg_led interface .seg_sel (sel ), // 位选 .seg_led (seg_led ), // 段选 //user interface .data (temp_data), // 显示的数值,对采集到的温度进行转换,保留2位小数 .point (POINT ), // 小数点具体显示的位置,从高到低,高电平有效 .en (1'b1 ), // 数码管使能信号 .sign (sign ) // 符号位(高电平显示“-”号) );
点击链接获取代码文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=1247
600