数字系统实验:三位数码管

一、日志(2019.3.4完成)

1.1、3位数码管实验下载:

在下载时首先要查看芯片的状态,是否与实际芯片相符,通过assignment->device进行查看,由于我的板子是cyclone||-ep2c5t144c8,便设置。如果不设置的话,在下载的过程中会报错,提示板子的型号不正确。
选好板子后再通过assignment->pins进行针脚设置。之后再进行全编译,为processing->compiler tool进行全编译。之后通过tools->programmer进行下载,注意驱动设置为USB,选择正确的sof文件。下载后的结果如图所示
在这里插入图片描述
实际上在实际中是一种频闪的状态,这是由于clk3的时钟信号的频率只有1Khz,已经可以产生视觉暂留。可以通过下方的拨码开关对显示数值进行调整,拨码开关每四位一组,满足“8421”。修改左上方的时钟信号的档位可以对时钟信号的频率进行微调,发现是进行频闪,且顺序为从左到右依次闪烁。

1.2、示波器测量位选信号和时钟信号:

时钟信号:
在这里插入图片描述
其中的黄色是时钟信号,可以看出时钟信号是一个十分规整的方波,占空比大约为50%,频率为1.00002KHZ,这与时钟信号的特性有关。
位选信号:
在这里插入图片描述
可以看出位选信号也是一个方波,但占空比不一定为50%,而是60%,这是因为我们这里是三个数码管循环显示,在计数器的时候产生的是0,1,2,3,其比值为2:1:1:1,其中0表示了一个数码管,1表示了一个数码管,2,3共同表示了一个数码管,导致最终的三个数码管的时间之比为2:1:2。其频率为200.005HZ

二、报告

2.1、实验目的:

实验目的是熟悉quartus||的数字系统设计流程,DDA系列数字系统实验平台的使用,图形输入、文本输入(硬件描述语言)、层次设计的过程,三位数码管的使用方法、代码编写和针脚设计,以及图形输入的注意事项和画图技巧。
我的实验资源是一台基于windows 10 专业版的联想拯救者r700电脑,一块装有cyclone||-ep2c5t144c8的DDA数字系统实验平台,以及quartus||配套软件

2.2、设计

2.2.1、模4计数器电路图:

以下是一个简单的Verilog代码,用于控制三位数码管的显示: ```verilog module digit_display( input clk, // 时钟信号 input [7:0] data, // 8位数据输入 output reg [2:0] seg_select, // 数码管位选信号 output reg [6:0] seg_data // 数码管段选信号 ); reg [7:0] digit_map [0:9]; // 数字映射表 // 数字映射表 initial begin digit_map[0] = 8'b00111111; digit_map[1] = 8'b00000110; digit_map[2] = 8'b01011011; digit_map[3] = 8'b01001111; digit_map[4] = 8'b01100110; digit_map[5] = 8'b01101101; digit_map[6] = 8'b01111101; digit_map[7] = 8'b00000111; digit_map[8] = 8'b01111111; digit_map[9] = 8'b01101111; end reg [7:0] digit [0:2]; // 三个数码管的当前显示数字 always @ (posedge clk) begin // 数码管位选信号递增 if (seg_select == 3'b000) begin seg_select <= 3'b001; end else if (seg_select == 3'b001) begin seg_select <= 3'b010; end else if (seg_select == 3'b010) begin seg_select <= 3'b000; end // 根据位选信号选择当前需要显示的数码管 case (seg_select) 3'b000: digit[0] <= digit_map[data / 100]; 3'b001: digit[1] <= digit_map[(data / 10) % 10]; 3'b010: digit[2] <= digit_map[data % 10]; endcase end // 数码管段选信号的输出 always @ (seg_select) begin case (seg_select) 3'b000: seg_data <= ~digit[0]; 3'b001: seg_data <= ~digit[1]; 3'b010: seg_data <= ~digit[2]; endcase end endmodule ``` 这个模块包括一个8位数据输入,用于控制数码管显示的数字。代码中使用了一个数字映射表,将数字映射到对应的数码管段选信号。数码管段选信号的输出取反,因为常用的数码管是共阴极的,即当段选信号为低电平时,对应的数码管段才会亮。模块还包括一个时钟信号和数码管位选信号的输出,用于控制数码管的刷新。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值