基于FPGA的温度监控系统 - 图文

发布时间 : 星期日 文章基于FPGA的温度监控系统 - 图文更新完毕开始阅读

山东科技大学学士学位论文 附录

附录

附录A系统总体电路图

附录B 系统总程序

DS18B20驱动: module ds18b20( input clk, //50M input rst, //复位 output [7:0] seg, //数码管 output [1:0] en, //数码管使能 inout dq //ds18b20 数据线 );

37

山东科技大学学士学位论文 附录

wire clk_1k; //数码管扫描时钟 wire clk_1m; //1us 时钟,用于控制传感器读写时序 reg[15:0] temp; //16位温度数据 wire[15:0] disp_dat; reg[8:0] state; reg[19:0] cnt; reg[2:0] cnt_bit; reg[7:0] data_w; //写到传感器的数据 reg[7:0] data_r; //从传感器读入的数据 reg link; reg dq_out; wire dq_in; wire[11:0] bcd;

assign dq = (link)? dq_out : 1'bz; assign dq_in = dq;

parameter RESET1 = 9'b0_0000_0001, // 复位1 RESET2 = 9'b0_0000_0010, // 复位2

WRITE_CC1 = 9'b0_0000_0100, // 第一次写入跳过rom命令 WRITE_44 = 9'b0_0000_1000, // 写入温度转换命令WRITE_CC2 = 9'b0_0001_0000, // 第二次写入跳过rom命令 WRITE_BE = 9'b0_0010_0000, // 写入读命令 READ1 = 9'b0_0100_0000, // 读入第一个字节 READ2 = 9'b0_1000_0000, // 读入第二个字节 WAIT_800MS = 9'b1_0000_0000; // 等待800ms

clk_gen uu0( .rst(rst), .clk(clk), //产生1k 和 1m时钟 .clk_1k(clk_1k), .clk_1m(clk_1m) );

bin2bcd uu1( .data(disp_dat), //二进制转bcd码,从传感器读入的数据是二进制的,转换为bcd后才能显示 .bcd_out(bcd)

38

山东科技大学学士学位论文 附录

); disp uu2( .rst(rst), //数码管显示 .clk(clk_1k), .data(bcd), .seg(seg), .en(en) );

assign disp_dat =(temp[15])? (~temp+1) : temp; 度为负,取反加1

always @(posedge clk_1m or negedge rst) begin if(~rst) begin cnt <= 0; state <= RESET1; end else case(state) RESET1: begin cnt <= cnt + 1; if(cnt < 'd500) begin link <= 1; dq_out <= 0; end else if(cnt < 'd1000) begin link <= 0; end else begin cnt <= 0; state <= WRITE_CC1; data_w <= 8'hcc;

39

//若最高位为1,则温 //第一次复位 山东科技大学学士学位论文 附录

cnt_bit <= 0; end end

WRITE_CC1: begin //写入跳过rom命令 cnt <= cnt + 1; if(cnt < 'd5) begin link <= 1; dq_out <= 0; end else if(cnt < 'd60) begin dq_out <= data_w[cnt_bit]; end else if(cnt < 'd65) begin link <= 0; end else begin cnt <= 0; cnt_bit <= cnt_bit + 1; if(cnt_bit == 'd7) begin state <= WRITE_44; cnt_bit <= 0; data_w <= 8'h44; end end end

WRITE_44: begin cnt <= cnt + 1; if(cnt < 'd5) begin link <= 1; dq_out <= 0; end else if(cnt < 'd60)

begin

40

//写入温度转换命令

联系合同范文客服:xxxxx#qq.com(#替换为@)