原创 DS1084的控制程序

2007-8-25 20:58 2746 4 4 分类: 工程师职场

     这两天在调了一个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 
 


 

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
我要评论
0
4
关闭 站长推荐上一条 /1 下一条