这两天在调了一个DS1804的控制程序,昨天程序就写好了,可是加上去之后却怎么也没有反应,换了几个片子都是一样的效果,气的我真是无语,结果现在才发现是有一根电源线没有接稳。哎呀,吐血呀,以后做事情一定要细心才行,特别是我们电子这一行,如果你没有足够的耐心,又不够细心的话,那你干脆改行吧!
//通过判断两个比较端的输出信号,来控制两个数字电位器的滑动,以实现信号的放大和衰减
module ds1804(clk,key1,key2,cs,inc,up_dn,cnt_up_dn);
input clk;
input key1,key2;
output cs,inc,up_dn;
output [7:0] cnt_up_dn;
wire [1:0] key;
reg cs,inc,up_dn;
reg clk1;
reg key1_1,key1_2,key2_1,key2_2;
reg [2:0] cnt_clk;
reg [7:0] cnt_up_dn;
reg [2:0] state;
parameter s0=0,s1=1,s2=2,s3=3,s4=4,s5=5,s6=6;
initial
begin
cs<=1'b1;
up_dn<=1'b0;
end
always @(posedge clk)
begin
cnt_clk=cnt_clk+1'b1;
if (cnt_clk<3'b100)
clk1<=1'b1;
else
clk1<=1'b0;
end
always @(posedge clk1)
begin
key1_1<=key1;
key1_2<=key1_1;
key2_1<=key2;
key2_2<=key2_1;
end
always @(posedge clk1)
begin
case (state)
s0:
begin
cs<=1'b0;
inc<=1'b1;
if (key1_1 && !key1_2) //when key1 have
//a rise edge,the wiper position move to H-terminal
begin
up_dn<=1'b1;
cnt_up_dn<=cnt_up_dn+1'b1;
state<=s1;
end
else if (key2_1 && !key2_2) //when key2 have
//a rise edge,the wiper position move to -terminal
begin
up_dn<=1'b0;
cnt_up_dn<=cnt_up_dn-1'b1;
state<=s1;
end
else
state<=s0;
end
s1:
begin
inc<=1'b0;
state<=s2;
end
s2:
begin
inc<=1'b1;
state<=s3;
end
s3:
begin
cs<=1'b1;
state<=s0;
end
endcase
end
endmodule
文章评论(0条评论)
登录后参与讨论