/*测试环境:quatersII7.2 FPGA:ED2开发版 GPIO0_0 外接频率输入
*/
module frequency (clk_x,clk,segdat1,segdat2,segdat3,segdat4,segdat5,segdat6,segdat7,segdat8);
input clk,clk_x;
output segdat1,segdat2,segdat3,segdat4,segdat5,segdat6,segdat7,segdat8;
reg [6:0] segdat1,segdat2,segdat3,segdat4,segdat5,segdat6,segdat7,segdat8;
reg [3:0] dispdat1,dispdat2,dispdat3,dispdat4;
reg [24:0] count;
reg [15:0] fosc,fosc_flash;
reg second;
reg flag;
initial
begin
segdat5=7'b1111111;
segdat6=7'b1111111;
segdat7=7'b1111111;
segdat8=7'b1111111;
flag=1'b0;
end
////////////////////////////jiang shi zhong fen ping cheng 1 HZ////////////////////////////////////
always @ (posedge clk)
begin
count=count+1;
if(count==25'd25000000)
begin
count=25'b0000000000000000000000000;
second=~second;
end
end
///////////////////////display//////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////
/*
/////////////////////////jiang ping lv de mei yi wei zhi fu gei xiang ying de shu chu guan jiao//////////////////////////////////////////////////////
always @(count[11:10])
begin
case(count[11:10])
2'b00: segdat1=fosc[3:0];
2'b01: segdat2=fosc[7:4];
2'b10: segdat3=fosc[11:8];
2'b11: segdat4=fosc[15:12];
endcase
end
*/
/////////////////jiang shu chu ping lv de zhi fu gei wei xuan chu ji cun qi///////////////////////////////////////////
always @(count[11:10])
begin
case(count[11:10])
2'b00: dispdat1=fosc[3:0];
2'b01: dispdat2=fosc[7:4];
2'b10: dispdat3=fosc[11:8];
2'b11: dispdat4=fosc[15:12];
endcase
end
//////////////////////yong wei xuan shu chu ji cun qi kong zhi segdat1 shu ma guan de ju ti shu chu zhi////////////////////////////////////////////////////
////////////////////////////////di yi ge shu ma guan de xian shi/////////////////////////////
always @(dispdat1)
begin
case(dispdat1)
4'h0: segdat1=7'b1000000;//0
4'h1: segdat1=7'b1111001;//1
4'h2: segdat1=7'b0100100;//2
4'h3: segdat1=7'b0110000;//3
4'h4: segdat1=7'b0011001;//4
4'h5: segdat1=7'b0010010;//5
4'h6: segdat1=7'b0000010;//6
4'h7: segdat1=7'b1111000;//7
4'h8: segdat1=7'b0000000;//8
4'h9: segdat1=7'b0010000;//9
endcase
end
////////////////////////////////di er ge shu ma guan de xian shi/////////////////////////
always @(dispdat2)
begin
case(dispdat2)
4'h0: segdat2=7'b1000000;//0
4'h1: segdat2=7'b1111001;//1
4'h2: segdat2=7'b0100100;//2
4'h3: segdat2=7'b0110000;//3
4'h4: segdat2=7'b0011001;//4
4'h5: segdat2=7'b0010010;//5
4'h6: segdat2=7'b0000010;//6
4'h7: segdat2=7'b1111000;//7
4'h8: segdat2=7'b0000000;//8
4'h9: segdat2=7'b0010000;//9
endcase
end
/////////////////////di san ge shu ma guan de xian shi/////////////////////////
always @(dispdat3)
begin
case(dispdat3)
4'h0: segdat3=7'b1000000;//0
4'h1: segdat3=7'b1111001;//1
4'h2: segdat3=7'b0100100;//2
4'h3: segdat3=7'b0110000;//3
4'h4: segdat3=7'b0011001;//4
4'h5: segdat3=7'b0010010;//5
4'h6: segdat3=7'b0000010;//6
4'h7: segdat3=7'b1111000;//7
4'h8: segdat3=7'b0000000;//8
4'h9: segdat3=7'b0010000;//9
endcase
end
//////////////////////di si ge shu ma guan de xian shi/////////////////////////
always @(dispdat4)
begin
case(dispdat4)
4'h0: segdat4=7'b1000000;//0
4'h1: segdat4=7'b1111001;//1
4'h2: segdat4=7'b0100100;//2
4'h3: segdat4=7'b0110000;//3
4'h4: segdat4=7'b0011001;//4
4'h5: segdat4=7'b0010010;//5
4'h6: segdat4=7'b0000010;//6
4'h7: segdat4=7'b1111000;//7
4'h8: segdat4=7'b0000000;//8
4'h9: segdat4=7'b0010000;//9
endcase
end
/*
always
begin
fosc[3:0]=4'd0;
end
*/
//ce ding wei zhi xin hao clk_x de ping lv ,bing jiang qi zhi chuan gei fosc_flash////////////
always @ (posedge clk_x)
begin
if(second)
begin
flag=1;
fosc_flash[3:0]=fosc_flash[3:0]+1;
if(fosc_flash[3:0]>4'd9)
begin
fosc_flash[3:0]=4'd0;
fosc_flash[7:4]=fosc_flash[7:4]+1;
if(fosc_flash[7:4]>4'd9)
begin
fosc_flash[7:4]=4'd0;
fosc_flash[11:8]=fosc_flash[11:8]+1;
if(fosc_flash[11:8]>4'd9)
begin
fosc_flash[11:8]=4'd0;
fosc_flash[15:12]=fosc_flash[15:12]+1;
if(fosc_flash[15:12]>4'd9)
fosc_flash[15:12]=4'd0;
end
end
end
end
else if(flag)
begin
//if(flag)
begin
flag=0;
fosc[15:0]=fosc_flash[15:0];
fosc_flash[15:0]=16'h0;
end
|
文件: |
frequency.rar |
大小: |
518KB |
下载: |
下载 | |
end
end
endmodule
/*心得与体会
1、使用数码管时,要定义一个输出端口,若是七段数码管的话就定义输出端口7位,同时定义一个段码寄存器,先将要输出的值赋给段码寄存器,用case语句将要输出的值赋给输出管脚。(注意:实际上,段码寄存器的值和输出管脚的值是相等的,这里只是用了一种间接的方式将要输出的值显示出来)
如:
always @(count[11:10])
begin
case(count[11:10])
2'b00: dispdat1=fosc[3:0];
2'b01: dispdat2=fosc[7:4];
2'b10: dispdat3=fosc[11:8];
2'b11: dispdat4=fosc[15:12];
endcase
end
always @(dispdat1)
begin
case(dispdat1)
4'h0: segdat1=7'b1000000;//0
4'h1: segdat1=7'b1111001;//1
4'h2: segdat1=7'b0100100;//2
4'h3: segdat1=7'b0110000;//3
4'h4: segdat1=7'b0011001;//4
4'h5: segdat1=7'b0010010;//5
4'h6: segdat1=7'b0000010;//6
4'h7: segdat1=7'b1111000;//7
4'h8: segdat1=7'b0000000;//8
4'h9: segdat1=7'b0010000;//9
endcase
end
上面的程序中时将检测到的值先赋给段码寄存器(如dispdat1,dispdat2...),再将段码寄存器的值赋给相应的书出管脚(如segdat1,segdat2...).这里用到的是case语句,在c语言里面用的是一个数组就可以很容易就实现。应注意次方面的技巧。
2、注意以下习程序的技巧:
always @(count[11:10])
begin
case(count[11:10])
2'b00: segdat1=fosc[3:0];
2'b01: segdat2=fosc[7:4];
2'b10: segdat3=fosc[11:8];
2'b11: segdat4=fosc[15:12];
endcase
end
上面的这段程序有一点向单片机里面的动态扫描,所不同的是,扫描的值是通过计数器count极短的跳变时间里面里完成的。这种语句使用得相当的广泛。“always @(count[11:10])
”
*/
阅读(1611) | 评论(0) | 转发(0) |