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
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库基于FPGA的温控风扇(2) - 图文(8)在线全文阅读。
相关推荐: