基于FPGA的温控风扇(2) - 图文(8)

2019-03-23 11:46

end

WRITE00 : // 空状态 延时 state <= S5;

WRITE01 : // 空状态 state <= WRITE1; WRITE1 : begin

cnt_1us_clear <= 0;

one_wire_buf <= 1'bZ; // 输出1 释放总线,自动拉高 if (cnt_1us == 80) // 延时80us begin

cnt_1us_clear <= 1; state <= S5; end end

//-------------------------------- // 写状态机

//--------------------------------

//++++++++++++++++++++++++++++++++ // 读状态机

//++++++++++++++++++++++++++++++++ READ0 : state <= READ1; // 空延时状态 READ1 : begin

cnt_1us_clear <= 0;

one_wire_buf <= 1'bZ; // 释放总线 if (cnt_1us == 10) // 再延时10us

begin

cnt_1us_clear <= 1; state <= READ2; end end

READ2 : // 读取数据 begin

temperature_buf[bit_valid] <= one_wire; state <= READ3; end READ3 : begin

cnt_1us_clear <= 0;

if (cnt_1us == 55) // 再延时55us begin

cnt_1us_clear <= 1; state <= S7; end end

//-------------------------------- // 读状态机

//------------------------------- default : state <= S00; endcase end end

assign one_wire = one_wire_buf; // 注意双向口的使用//-------------------------------------- // DS18B20状态机 结束

串联输送数据

//--------------------------------------

//++++++++++++++++++++++++++++++++++++++ // 对采集到的温度进行处理 开始

//++++++++++++++++++++++++++++++++++++++

wire [15:0] t_buf = temperature_buf & 16'h07FF; //temperature_buf上述读数据程序的临时寄存器

assign temperature[3:0] = (t_buf[3:0] * 10) >> 4; // 小数点后一位

assign temperature[7:4] = (t_buf[7:4] >= 10) ? (t_buf[7:4] - 10) : t_buf[7:4]; // 个位 assign temperature[11:8] = (t_buf[7:4] >= 10) ? (t_buf[11:8] + 1) : t_buf[11:8]; // 十位 assign temperature[15:12] = temperature_buf[12] ? 1 : 0; // 正负位,0正1负

//-------------------------------------- // 对采集到的温度进行处理 结束 //-------------------------------------- Endmodule

// ********************DA转换模块(手动调速与温控调速结合)程序部分********************// module da0832(clk,temperature,button,buttona,men,data);

input clk,men,button,buttona; input [15:0] temperature; output [7:0] data;

reg en;

reg [1:0] start,next,abs; wire [3:0] a,b,c,d; reg [7:0] data;

assign a = {temperature[3:0]}; //合并赋值?

assign b = {temperature[7:4]}; //个 assign c = {temperature[11:8]}; //十 assign d = {temperature[15:12]};

parameter se0=4'h0; //parameter 类似常量

parameter se1=4'h1;

parameter se2=4'h2; parameter se3=4'h3;

always @(negedge buttona) begin //调节档位 abs <= abs + 1'b1; end

always @(posedge clk) begin en <= men;

if(!en) begin //无人风扇关闭 data <= 8'h0; end

else if (en ==1 && button == 0) begin strat ,next两个变量,可单一变量 start = next; case (start) se0 : begin if(c >= 4'd2 && b >= 4'd3) begin

data <= 'h4b; 共4b份=1.5v

//温控调档

//23 度时开

//1.5v 每份5/255 v

end

else

next <= se1;

end

se1 : begin

if(c >= 4'd2 && b >= 4'd7) begin

data <= 'h80; //非阻塞赋值case语句中必须

end

//2.5v

else

next <= se2;

end

se2 : begin

if(c >= 4'd3 && b >= 4'd2) begin

data <= 'hb8; //3.5v

end

else

next <= se0;

end

endcase end

else begin //手动档位 档位输出 case(abs)

00 : data <= 'h4b; //if(data >= 'hb8) data =0; //case为并行语句 01 : data <= 'h80;

10 : data <= 'hb0; //用b0非b8以防输出过大 endcase end end

endmodule


基于FPGA的温控风扇(2) - 图文(8).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:教师招聘结构化面试题目答案大全

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: