概述
1.一般利用按键或者拨码开关实现递增/递减控制,该计数器可以写成CNT<=CNT+2*K-1,当K=1时,CNT<=CNT+1,为递增计数,否则为递减计数。
2.递增计数到99时需要回0,而递减到0时需要回到99。
3.数码管需要译码输出,且扫描显示,当显示2位数时,未使用到的数码管均要设置为不予选中(0)。
4.该程序在安路EF1A650LG144开发板上验证通过,软件版本5.6.1,代码如下:
module CNT99 (CLK1Hz,CLK1KHz,DG,Q,K);
input CLK1Hz,CLK1KHz,K;//CLK1Hz为计数器时钟,CLK1KHz为数码管扫描时钟,K为计数器增减控制
output reg [7:0] Q; //段码
output reg [7:0] DG= 8'b00000001; //位码,1选中
reg [6:0] CNT; //计数器
reg [3:0] data; //要显示的数
always @ (posedge CLK1Hz) //上升沿触发
if ((CNT>=99)&&K) //递增计数到99
CNT<=0;
else if ((CNT==0)&&(!K)) //递减计数到0时再从99开始
CNT<=99;
else
CNT<=CNT+2*K-1; //增减控制
always @ (posedge CLK1KHz) //扫描显示
case(DG)
8'b00000001: begin data<=CNT/10; DG<={DG[6:0],DG[7]};end //十位
8'b00000010: begin data<=CNT%10; DG<={DG[0],DG[7:1]};end //个位
default:begin data<=10;DG=8'b00000001;end
endcase
always @(data) //数码管译码,DP,G-A,0点亮
case(data)
0:Q=8'b11000000;
1:Q=8'b11111001;
2:Q=8'b10100100;
3:Q=8'b10110000;
4:Q=8'b10011001;
5:Q=8'b10010010;
6:Q=8'b10000010;
7:Q=8'b11111000;
8:Q=8'b10000000;
9:Q=8'b10010000;
default:Q=8'b11111111;
endcase
endmodule
5.高云MiniStar开发板(GW1NSR)主频时钟为27M,且只有此一个输出,需要分频产生1KHz扫描时钟和1Hz的计数时钟,另数码管仅有4个,故都需相应作出调整,代码如下:
module CNT99 (CLK,DG,Q,K);
input CLK,K;//CLK,27M时钟,K为计数器增减控制
output reg [7:0] Q; //段码
output reg [3:0] DG=4'b0001; //位码,1选中
reg [6:0] CNT; //计数器
reg [3:0] data; //要显示的数
reg CLK1KHz,CLK1Hz;
reg [13:0] N1K; //分频到1KHz计数器
reg [8:0] N; //分频到1Hz计数器
always@(posedge CLK)//分频产生扫描时钟
if (N1K>=13499) begin N1K<=0; CLK1KHz<=~CLK1KHz; end
else N1K<=N1K+1;
always@(posedge CLK1KHz)//分频产生计数时钟
if (N>=499) begin N<=0; CLK1Hz<=~CLK1Hz; end
else N<=N+1;
always @ (posedge CLK1Hz) //上升沿触发
if ((CNT>=99)&&K) //递增计数到99
CNT<=0;
else if ((CNT==0)&&(!K)) //递减计数从99开始
CNT<=99;
else
CNT<=CNT+2*K-1; //增减控制
always @ (posedge CLK1KHz) //扫描显示
case(DG)
4'b0001: begin data<=CNT/10; DG<=4'b0010;end //十位
4'b0010: begin data<=CNT%10; DG<=4'b0001;end //个位
default: begin data<=10; DG<=4'b0010;end
endcase
always @(data) //数码管译码,DP,G-A,0点亮
case(data)
0:Q=8'b11000000;
1:Q=8'b11111001;
2:Q=8'b10100100;
3:Q=8'b10110000;
4:Q=8'b10011001;
5:Q=8'b10010010;
6:Q=8'b10000010;
7:Q=8'b11111000;
8:Q=8'b10000000;
9:Q=8'b10010000;
default:Q=8'b11111111;
endcase
endmodule
最后
以上就是过时草莓为你收集整理的两位十进制递增/递减计数器的Verilog代码的全部内容,希望文章能够帮你解决两位十进制递增/递减计数器的Verilog代码所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复