查看: 1301|回复: 0

【MAXII_EPM240T100_CPLD】实验二 测试8只8段LED管的连接方式

[复制链接]
  • TA的每日心情
    开心
    2019-11-19 11:07
  • 签到天数: 226 天

    连续签到: 1 天

    [LV.7]常住居民III

    发表于 2017-2-13 09:07:59 | 显示全部楼层 |阅读模式
    分享到:
    【MAXII_EPM240T100_CPLD】实验二 测试8只8段LED管的连接方式
    8段码管,需要8个IO驱动、8只管子,又需要8个IO分别驱动公共端,因此找出8个控制8段的IO和控制8只管子公共级的IO,一共16个IO口即可。根据观察P76开始是段码管,当中有连接到其他的IO,排除他,只要找到这连续的16个IO即可。
    测试按照如下方案进行:
    先在前8个IO输出高电平、在后8个IO分别输出低电平,如果前8是段码IO,就结束了;如果不是反过来再测试一边就可以找出8个段码IO和8个公共段IO了。
    经过多次编程测试,总算把8段LED和6个公共位搞清楚了,见图21
    图21 测量和测试得到CPLD_PIN的引脚关系图
    95,92,89,87,连接左边4位段码管的公共端,85,83,78,77,连接右边段码管的公共端
    91,90,88,86,84,82,79,76,分别连接段码管的各个段位和点位,见图22。

    这个程序就好编了。为了将其他不显示的LED都关掉,我们设置16+8一共24只管脚,16个用于控制8只段码LED管、8个用于将8只LED管关掉——因为这些LED是高电平关掉的。以下的图省去了,只是文字说明:
    打开qstII[Quartus II的简写]、创建新项目、目录:7led_test,项目名称led_test,...;
    新建文件,代码如下:
    //Test 7LED Test
    module led_test(
    clk, //开发板上输入时钟: 50Mhz
    rst_n, //开发板上输入复位按键
    led //输出 LED 灯,用于控制开发板上8个数码管8个LED(LED0~LED15+COM4)
    );
    input clk;
    input rst_n;
    output [23:0] led;//24'
    //寄存器定义
    reg [31:0] timer;
    reg [23:0] led;//24'
    always @(posedge clk or negedge rst_n)//检测时钟的上升沿和复位的下降沿
    begin
    if (~rst_n)//复位信号低有效
    timer <= 0;//计数器清零
    else if (timer == 32'd54_999_999) //开发板使用的晶振为 50MHz,0.1秒计数(50M*4-1=199_999_999)
    timer <= 0;//计数器计到 4 秒,计数器清零
    else
    timer <= timer + 1'b1;//计数器加 1
    end
    //=====================================================
    // LED 灯控制
    //=====================================================
    always @(posedge clk or negedge rst_n) //检测时钟的上升沿和复位的下降沿
    begin
    if (~rst_n) //复位信号低有效
    led <= 24'b111111111111111111111111;//LED 灯输出全为低,8个LED8个数码管灯灭
    else if (timer == 32'd999)//计数器计到.1秒,
    led <= 24'b111111101111111011101110;//LED1 点亮1
    else if (timer == 32'd19_999_999)//计数器计到.2秒,
    led <= 24'b111111011111110101000011;//LED2 点亮2
    else if (timer == 32'd24_999_999)//计数器计到.3秒,
    led <= 24'b111110111111101111000010;//LED3 点亮3
    else if (timer == 32'd29_999_999)//计数器计到.4秒,
    led <= 24'b111101111111011110001110;//LED4 点亮4
    else if (timer == 32'd34_999_999)//计数器计到.5秒,
    led <= 24'b111011111110111110010010;//LED5 点亮5
    else if (timer == 32'd39_999_999)//计数器计到.6秒,
    led <= 24'b110111111101111100010010;//LED6 点亮6
    else if (timer == 32'd44_999_999)//计数器计到.7秒,
    led <= 24'b101111111011111111101010;//LED7 点亮7
    else if (timer == 32'd49_999_999)//计数器计到.8秒,
    led <= 24'b011111110111111100000010;//LED8 点亮8
    else if (timer == 32'd54_999_999)//计数器计到.9秒,
    led <= 24'b000000000000000011111101;//LED. 点亮 .
    //else if (timer == 32'd59_999_999)//计数器计到1秒,
    end
    endmodule
    编译通过,设置管脚,见图23,

    24个管脚的绑定
    再次编译,通过后,双击编程下载,加入输出文件,下载,成功后见图24,图25。

    数码管静态照片展示

    动态照片展示。
    编代码出生的我,看了这些代码着实感觉不爽,但苦于新手,先照搬,小改小动,能运行出结果为好。等翅膀硬了在自己随意吧。
    回复

    使用道具 举报

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

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条

    手机版|小黑屋|与非网

    GMT+8, 2024-11-19 16:41 , Processed in 0.112337 second(s), 17 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.