七段数码管的动态扫描显示实验报告

时间:2024.4.5

实验四 七段数码管的动态扫描显示

一、  实验目的

1.进一步熟悉QuartusII软件进行FPGA设计的流程;

2.掌握利用宏功能模块进行常用的计数器,译码器的设计;

3.学习和了解动态扫描数码管的工作原理的程序设计方法;

二、  实验原理及过程

实验板上面常用的4为联体的共阳极7段数码管。其接口电路是把所有数码管的8个笔划段a-h同名端连接起来,而每一个数码管由一个独立的公共极COM端控制。对于这种结构的数码管,采用动态显示的方法是最为广泛的一种显示方式之一。

在轮流点亮的过程中每位显示器的点亮时间都极为短暂,但由于人的视觉暂留现象以及发光二极管的余晖效应,尽管实际上每个显示器并非同时点亮,但只要扫描的速度足够快(如达到30Hz以上),给人的印象就是一组稳定的显示数据,不会有闪烁感。

  本次实验要求在实验板上实现显示00000000-99999999的十进制计数器。使用的是宏模块产生一个16位的二进制计数器counter()作为4个数码管的显示数据;编写一个分频模块div,其输出作为计数器counter()的时钟信号;编写数码管驱动模块segmain,完成7段译码和扫描显示控制

1、    建立工程,并建立顶层图。

2、         设计计数时钟

设计一分频器,对50Mhz分频输出到计数器,让计数器以较慢速度递增。建立.v文件,输入以下代码

module int_div(clk,div_out);

input clk;

output reg div_out;

reg[31:0] clk_div;

parameter CLK_FREQ='D50_000_000;

parameter DCLK_FREQ='D10;

always@(posedge clk)

begin

  if(clk_div<CLK_FREQ/DCLK_FREQ)

     clk_div<=clk_div+1;

  else

     begin

      clk_div<=0;

      div_out=~div_out;

      end

 end

 endmodule

输入完成后,将该文件设为顶层文件,并分析该设计文件,用于检查设计错误。检查无误后,要生成一个分频器的原件符号,根据步骤建立该原件的原件符号。

3、数码管扫描显示程序设计

数码管扫描显示程序如下:

module segmain(clk,reset_n,datain,seg_data,seg_com);

input clk;

input reset_n;

input[31:0] datain;     //由于要显示8位数字所以要将输入数据设为32

output[7:0] seg_data;  //输出与例子中的一样保持不变,任然为8

output[7:0] seg_com;  //设置输出时要用到的8个端口

reg[7:0] seg_com; //由于在always语句中要用到,所以再把它们都定义为寄存器变量类型

reg[7:0] seg_data;//寄存器变量

reg[3:0] bcd_led;  //寄存器变量类型

reg[36:0] count;  //寄存器变量类型,同时count用于计数

integer t;    //一个整形变量t

always@(posedge clk)  //always语句用于判断当上升沿来到时计数器的状态,并且设置计数器的归零功能

  begin

    if(!reset_n)  count<=0;

    else

      begin

        count<=count+1;

        t=datain;

      end

  end

always@(count[14:12] or datain)  //判断已经计数的状态,并将相应的数码管变亮

  begin

    case(count[14:12])

      3'b000:

       begin

         t=t%10;

         bcd_led=t[3:0];

         seg_com=8'b11111110;

       end

      3'b001:

       begin

       t=t%100/10;

         bcd_led=t[3:0];

         seg_com=8'b11111101;

       end

      3'b010:

       begin

         t=t%1000/100;

         bcd_led=t[3:0];

         seg_com=8'b11111011;

       end

      3'b011:

       begin

       t=t%10000/1000;

         bcd_led=t[3:0];

         seg_com=8'b11110111;

       end

       3'b100:

       begin

         t=t%100000/10000;

         bcd_led=t[3:0];

         seg_com=8'b11101111;

       end

       3'b101:

       begin

         t=t%1000000/100000;

         bcd_led=t[3:0];

         seg_com=8'b11011111;

       end

       3'b110:

       begin

         t=t%10000000/1000000;

         bcd_led=t[3:0];

         seg_com=8'b10111111;

       end

       3'b111:

       begin

         t=t%100000000/10000000;

         bcd_led=t[3:0];

         seg_com=8'b01111111;

       end

       endcase

 end

 

always@(seg_com or bcd_led) 

  begin

     case(bcd_led)          //判断led的数值

       4'h0:seg_data=8'hc0;  //共阳低有效

       4'h1:seg_data=8'hf9;

       4'h2:seg_data=8'ha4;

       4'h3:seg_data=8'hb0;

       4'h4:seg_data=8'h99;

       4'h5:seg_data=8'h92;

       4'h6:seg_data=8'h82;

       4'h7:seg_data=8'hf8;

       4'h8:seg_data=8'h80;

       4'h9:seg_data=8'h90;

       4'ha:seg_data=8'h88;

       4'hb:seg_data=8'h83;

       4'hc:seg_data=8'hc6;

       4'hd:seg_data=8'ha1;

       4'he:seg_data=8'h86;

       4'hf:seg_data=8'h8e;

       default:seg_data=8'hc0;

     endcase

  end

endmodule

输入完成后,将其设为顶层文件,检验后生成原件符号。

4.调用宏模块设计计数器。双击顶层图空白处,弹出symbol对话框,展开library,找到lmp-counter,弹出宏模块设置对话框,根据讲义和实验要求对其进行设定。

5.设计完整的顶层。返回顶层原理图,根据讲义和需要添加原件完成完整的图。其图如下所示:

6.设置芯片和管脚。

参照讲义进行芯片和管脚的配置,并运行该脚本。

7.编译。

将顶层图设为当前顶层实体,然后编译

8.接好下载线,进行下载,下载完成后,会看到8个数码管会显示数值,按reset按钮则清零。

三、 实验小结

根据本次实验,进一步熟悉了quartus2软件进行设计的流程。对如何利用宏功能模块进行计数器,译码器的设计有了初步的了解与掌握。实验后了解了数码管的工作原理,对如何实现显示功能有了很大的提高。通过实验学会举一反三,能够通过课本上的例子进行其他进制的代码编写,并能够实现相应的功能。在进行调用宏模块设计计数器步骤时,要仔细参透实验要求,进行相应的设定,这样才会实现。在实验中尽可能的减少错误和警告次数的出现,并能够根据错误提示,找出问题所在,多请教老师和同学掌握和吸收实验中的精华。


第二篇:数码管动态扫描实验报告


---------实验报告

课程名称­:单片机及接口技术试验­ 项目名称:数码管动态显示程序设计

  姓名:----- 专业:----  班级:1班 学号:--------

实验操作成绩(百分制)­__________     实验指导教师签字:­__________

实验报告成绩(百分制)­__________       实验指导教师签字:­__________

更多相关推荐:
数码管动态显示实验报告

实验四数码管动态显示实验一一实验要求1在Proteus软件中画好51单片机最小核心电路包括复位电路和晶振电路2在电路中增加四个7段数码管共阳共阴自选将P1口作数据输出口与7段数码管数据引脚相连P20P23引脚输...

单片机c语言版数码管动态显示实验报告

数码管动态显示实验一实验要求1在Proteus软件中画好51单片机最小核心电路包括复位电路和晶振电路2在电路中增加四个7段数码管共阳共阴自选将P1口作数据输出口与7段数码管数据引脚相连P20P23引脚输出选控制...

EDA八段动态数码管显示设计实验报告

第十周动态数码管显示设计报告姓名学号专业班级指导教师20xx年11月8日目录EDA技术及应用课程设计任务书3实验目的5设计要求5实验设备5扫描原理5设计任务6实验程序6时序仿真波形图7仿真结果8模拟电路8设计总...

数码管动态扫描实验实验报告及程序

实验七数码管动态扫描实验姓名专业学号20xx412381成绩一实验目的1掌握KeilC51软件与protues软件联合仿真调试的方法2掌握单片机对数码管的动态显示控制方式3掌握定时器的基本使用及编程方法二实验仪...

机器人控制-数码管动态显示-仿真实验报告

机器人控制课程总结报告机器人控制仿真实验二数码管动态显示姓名李铃年级20xx级系别信息工程学院计科师学号1111000048同组人姓名杨晨年级20xx级系别信息工程学院计科师同组人学号111100005420x...

数码管动态扫描实验报告

数码管动态扫描实验一实验目的学习计数器的设计分析合测试方法学习硬件扫描显示电路的设计方法二实验仪器1PC机2SW51PROC单片机综合实验平台三实验内容编写一段程序用单片机P0口和P2口的IO输出去控制8位的数...

实验十二 数码管动态显示实验

实验十二数码管动态显示一实验目的1掌握数码管的显示原理2掌握利用数码管显示计算数机内部信息3掌握数码管动态显示的原理及使用二实验技术准备1数码管排列图实验箱共有8个共阴极数码管段码输入端ABCDEFGDP8个数...

DSP键盘接口及七段数码管显示实验报告

学生实验报告实验课名称DSP原理及运用实验项目名称键盘接口及七段数码管显示实验专业名称测控技术与仪器班级24081001学号11学生姓名徐章龙教师姓名高涛20xx年6月27日组别同组同学实验日期20xx年6月2...

实验二 LED数码管动态显示(报告要求)

实验二LED数码管动态显示一实验目的1掌握LED数码管动态显示的原理和设计方法2掌握使用KeilC51项目文件创建编译运行和硬件仿真的基本操作方法二实验原理1LED数码管的结构及显示方式2实验仪的LED接口电路...

实验四、数码管动态扫描显示实验

实验四数码管动态扫描显示实验一实验目的1学习和理解数码管动态扫描的工作原理2学习和掌握数码管动态扫描的电路接口设计及程序编写二实验设备1仿真器2单片机最小系统教学实验模块3动态数码管显示模块三实验要求使8位数码...

实验四 七段数码管的动态扫描显示

实验四七段数码管的动态扫描显示专业电子信息科学与技术姓名高晓骏学号20xx02119xx10一实验目的1进一步熟悉QuartusII软件进行FPGA设计的流程2掌握利用宏功能模块进行常用的计数器译码器的设计3学...

实验2:8255七段数码管静动态显示

微机实验报告书学号姓名班级同组名单实验日期20xx1221实验题目七段数码管的静态显示实验目标掌握数码管显示数字的原理功能键盘输入一位十进制数字09用七段数码管显示解题思路1静态显示按图10a连接好电路将825...

数码管动态显示实验报告(24篇)