| 
 
| //按键记数,数码管动态显示,两位 //
 
 module test(clk,key,dispcode,CS);
 input clk,key;
 output reg [6:0] dispcode = N0;
 output reg [1:0]CS;
 reg [6:0]num;
 reg [3:0]num_t;
 reg [19:0]count1;
 reg [7:0]count2;
 reg timeflag;
 reg keyflag = 1,lastkeyflag=1; // 1 up ,0 down
 
 
 /*
 共阴极 :不带小数点
 0,  1,  2,  3,  4,  5,  6,  7,
 3fh,06h,5bh,4fh,66h,6dh,7dh,07h
 8,  9,
 7fh,6fh,00h*/
 parameter
 N0 = 7'h3f,
 
 N1  = 7'h06,
 
 N2  = 7'h5b,
 
 N3  = 7'h4f,
 
 N4  = 7'h66,
 
 N5  = 7'h6d,
 
 N6  = 7'h7d,
 
 N7  = 7'h07,
 
 N8  = 7'h7f,
 
 N9  = 7'h6f,
 
 N10 = 7'h77;
 
 
 
 always @(posedge clk)
 
 begin
 
 
 if(count1 < 20'd500000)  //10ms
 
 count1 = count1+1'd1;
 
 else
 
 begin
 
 count1=0;
 
 if(count2 < 1) //
 
 count2=count2+1'd1;
 
 else
 
 begin
 
 count2=0;
 
 timeflag = ~timeflag; //每10ms翻转一次
 
 end
 
 end
 
 end
 
 always @(posedge timeflag)  //延时去抖动
 
 begin
 
 if(lastkeyflag==0 && key == 0)
 
 keyflag = 0;
 
 if(lastkeyflag==1 && key == 1)
 
 keyflag = 1;
 
 
 lastkeyflag = key;
 
 end
 
 always @(negedge keyflag)
 
 begin
 
 num <= num + 1'd1; //对num的赋值必须用=,不能用<= ,否则num的值会显示100;而且必须统一
 
 if(num>99)
 
 num <= 0;
 
 end
 
 always @(posedge timeflag)
 //数码管动态显示
 
 begin
 
 CS = CS + 1;
 
 if(CS > 2'd2)
 
 CS = 2'd1;
 
 
 if(CS==2'd1)
 
 num_t = num%10;
 
 if(CS==2'd2)
 
 num_t = num/10;
 
 case(num_t)
 
 4'd0 : dispcode = N0;
 
 4'd1 : dispcode = N1;
 
 4'd2 : dispcode = N2;
 
 4'd3 : dispcode = N3;
 
 4'd4 : dispcode = N4;
 
 4'd5 : dispcode = N5;
 
 4'd6 : dispcode = N6;
 
 4'd7 : dispcode = N7;
 
 4'd8 : dispcode = N8;
 
 4'd9 : dispcode = N9;
 
 4'd10: dispcode = N10;
 
 default: dispcode = 7'h40;
 
 endcase
 
 end
 
 
 endmodule
 
 
 问题:
 always @(posedge timeflag)        //数码管动态显示
 这条语句如果改成 always @(timeflag)        就不对了,timeflag我设置的是10ms翻转一次,改完之后应该动态扫描的频率更快了才对啊?
 哪位大神指导一下,谢谢!
 | 
 |