EDN首页   博客首页

日志档案

发表于 2007-8-25 20:58:42

0

标签: 无标签

DS1084的控制程序

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

 

系统分类: 资源共享   |   用户分类: 技术   |   来源: 原创   |   【推荐给朋友】   |   【添加到收藏夹】

    阅读(737)    回复(0)  

投一票您将和博主都有获奖机会!