3826|1

22

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

ZRtech Altera CycloneIV FPGA开发板——计时时钟 [复制链接]

本实验是用数码管显示一个计时时钟,由于数码管只有4位,所以只显示秒和分,时类似,由于控制数码管的段是复用的,所以每一时间只有选中的数码管才亮,其中左边两个数码管显示分,右边两个数码管显示秒。
1、同样新建工程,具体步骤详见https://bbs.eeworld.com.cn/thread-444382-1-1.html
2、本实验的代码如下:
//clock
module clock(clk,DS_EN4,DS_EN3,DS_EN2,DS_EN1,DS_A,DS_B,DS_C,DS_D,DS_E,DS_F,DS_G,DS_DP);

input clk;
output wire DS_EN4,DS_EN3,DS_EN2,DS_EN1;
output wire DS_A,DS_B,DS_C,DS_D,DS_E,DS_F,DS_G,DS_DP;

wire [3:0]wei;
wire [7:0]duan;
reg [3:0]wei_r;
reg [7:0]duan_r;

reg [5:0]Hour;
reg [5:0]Minute;
reg [5:0]Second;
reg [31:0]Cout;
reg Clk_En;
wire [3:0]Second_bit,Second_ten,Minute_bit,Minute_ten,Hour_bit,Hour_ten;

wire clk_1k,clk_1s;

assign {DS_EN1,DS_EN2,DS_EN3,DS_EN4}=wei;
assign {DS_DP,DS_G,DS_F,DS_E,DS_D,DS_C,DS_B,DS_A}=duan; //数码管共阴极

fp_k fp_1k(clk,clk_1k);
fp_s fp_1s(clk_1k,clk_1s);

initial
begin
  wei_r<=4'b0000;
  duan_r<=8'b00111111;
  Second<=5'd0;
  Minute<=5'd0;
  Hour<=5'd0;
end

always @(posedge clk_1s)
begin
  if(Second<59)
   begin
    Second<=Second+1;
   end
  else if(Second==59)
   begin
    Second<=0;
    if(Minute<59)
     begin
      Minute<=Minute+1;
     end
    else if(Minute==59)
     begin
      Minute<=0;
      if(Hour<23)
       begin
        Hour<=Hour+1;
       end
      else if(Hour==23)
       begin
        Hour<=0;
       end
     end
   end
end  

binary_to_digit time1(clk,wei,Hour,Minute,Second,Second_bit,Second_ten,Minute_bit,Minute_ten,Hour_bit,Hour_ten,duan);

endmodule

//分频1k-----1s
module fp_s(clk_1k,clk_1s);
input clk_1k;
output reg clk_1s;
reg [10:0]cout;
//reg clk_en;
initial
begin
  cout<=10'd0;
  clk_1s<=1'd0;
end
always @(posedge clk_1k)
begin
  if(cout==10'd500)
   begin
    cout<=10'd0;
    clk_1s<=~clk_1s;
   end
  else
   begin
    cout<=cout+1;
   end
  //clk_1s<=clk_en;
end

endmodule
//分频48M-----1k
module fp_k(clk,clk_1k);
input clk;
output reg clk_1k;
reg [31:0]cout;
//reg clk_en;
initial
begin
  cout<=32'd0;
  clk_1k<=1'd0;
end
always @(posedge clk)
begin
  if(cout==32'd24000)
   begin
    cout<=32'd0;
    clk_1k<=~clk_1k;
   end
  else
   begin
    cout<=cout+1;
   end
  //clk_1s<=clk_en;
end

endmodule

module binary_to_digit(clk,wei_r,Hour,Minute,Second,Second_bit,Second_ten,Minute_bit,Minute_ten,Hour_bit,Hour_ten,HEX);
input clk;
output reg [3:0]wei_r;
input [5:0]Hour,Minute,Second;
output reg [3:0]Second_bit,Second_ten,Minute_bit,Minute_ten,Hour_bit,Hour_ten;
output reg [7:0]HEX;
wire clk_1k;
fp_s fp_1s(clk,clk_1k);
always @(posedge clk_1k)
begin
  Second_bit<=Second%10;
  Second_ten<=Second/10;
  Minute_bit<=Minute%10;
  Minute_ten<=Minute/10;
  Hour_bit<=Hour%10;
  Hour_ten<=Hour/10;
  if((Second_bit==4'd0)&&(Second_ten!=4'd0))
   begin
    wei_r<=4'b1101;
    case(Second_ten)
     0: HEX=7'b00111111;
     1: HEX=7'b00000110;
     2: HEX=7'b01011011;
     3: HEX=7'b01001111;
     4: HEX=7'b01100110;
     5: HEX=7'b01101101;
     6: HEX=7'b01111101;
     7: HEX=7'b00000111;
     8: HEX=7'b01111111;
     9: HEX=7'b01101111;
     //a: HEX=7'b01110111;
     //b: HEX=7'b01111100;
     //c: HEX=7'b00111001;
     //d: HEX=7'b01011110;
     //e: HEX=7'b01111001;
     //f: HEX=7'b01110001;
     //default: HEX=7'b00000000;
   endcase
   end
  else if((Second_bit==4'd0)&&(Second_ten==4'd0)&&(Minute_bit!=4'd0))
   begin
    wei_r<=4'b1011;
    case(Minute_bit)
     0: HEX=7'b00111111;
     1: HEX=7'b00000110;
     2: HEX=7'b01011011;
     3: HEX=7'b01001111;
     4: HEX=7'b01100110;
     5: HEX=7'b01101101;
     6: HEX=7'b01111101;
     7: HEX=7'b00000111;
     8: HEX=7'b01111111;
     9: HEX=7'b01101111;
     //a: HEX=7'b01110111;
     //b: HEX=7'b01111100;
     //c: HEX=7'b00111001;
     //d: HEX=7'b01011110;
     //e: HEX=7'b01111001;
     //f: HEX=7'b01110001;
     //default: HEX=7'b00000000;
    endcase
   end
  else if((Second_bit==4'd0)&&(Second_ten==4'd0)&&(Minute_bit==4'd0)&&(Minute_ten!=4'd0))
   begin
    wei_r<=4'b0111;
   case(Minute_ten)
    0: HEX=7'b00111111;
    1: HEX=7'b00000110;
    2: HEX=7'b01011011;
    3: HEX=7'b01001111;
    4: HEX=7'b01100110;
    5: HEX=7'b01101101;
    6: HEX=7'b01111101;
    7: HEX=7'b00000111;
    8: HEX=7'b01111111;
    9: HEX=7'b01101111;
    //a: HEX=7'b01110111;
    //b: HEX=7'b01111100;
    //c: HEX=7'b00111001;
    //d: HEX=7'b01011110;
    //e: HEX=7'b01111001;
    //f: HEX=7'b01110001;
    //default: HEX=7'b00000000;
   endcase
   end
  else
   begin
    wei_r<=4'b1110;
    case(Second_bit)
     0: HEX=7'b00111111;
     1: HEX=7'b00000110;
     2: HEX=7'b01011011;
     3: HEX=7'b01001111;
     4: HEX=7'b01100110;
     5: HEX=7'b01101101;
     6: HEX=7'b01111101;
     7: HEX=7'b00000111;
     8: HEX=7'b01111111;
     9: HEX=7'b01101111;
     //a: HEX=7'b01110111;
     //b: HEX=7'b01111100;
     //c: HEX=7'b00111001;
     //d: HEX=7'b01011110;
     //e: HEX=7'b01111001;
     //f: HEX=7'b01110001;
     //default: HEX=7'b00000000;
    endcase
   end
end
endmodule

3、实验结果如下:

此图对应第8秒

此图对应第40秒

此图对应第1分钟

IMG00241.jpg (282.02 KB, 下载次数: 0)

IMG00241.jpg
此帖出自FPGA/CPLD论坛

最新回复

谢谢分享  加油:)  详情 回复 发表于 2014-8-11 10:19
点赞 关注(1)
个人签名坚持就会有所收获
 

回复
举报

2万

帖子

74

TA的资源

管理员

沙发
 
谢谢分享  加油:)
此帖出自FPGA/CPLD论坛
加EE小助手好友,
入技术交流群
EE服务号
精彩活动e手掌握
EE订阅号
热门资讯e网打尽
聚焦汽车电子软硬件开发
认真关注技术本身
个人签名

加油!在电子行业默默贡献自己的力量!:)

 
 

回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表