outputer 2022-03-16 15:19 采纳率: 90%
浏览 48
已结题

向大家咨询一个利用开发板的按键控制LED灯的问题

#题目要求:利用开发板的四个按键来控制四颗LED灯,以实现不同的显示效果。具体要求为:
1.无按键按下,LED全灭
2.按下key[0],从右向左流水灯
3.按下key[1],从左向右流水灯
4.按下key[2],LED灯闪烁
5.按下key[4],LED全亮
根据以下代码得到的结果是:无按键按下时LED不亮。单独按下任一按键LED都无反应。只有同时按下key[0],key[1]和key[2]时led交替闪烁。刚接触开发板,真不知道问题出在哪里

`timescale 1ns / 1ps

    module key_led(
    input sys_clk,
    input sys_rst_n,
    input [3:0]key,
    output [3:0]led
    );
    
  reg [23:0] cnt;
  reg [3:0] led_middle;  
  
  assign led = led_middle;
  
  always@(posedge sys_clk or negedge sys_rst_n)begin
    if(!sys_rst_n)
      cnt <= 24'd0;
    else if(cnt < 24'd999_9999)
           cnt <= cnt + 24'd1;
         else 
           cnt <= 24'd0;
    end
    
    always@(*)begin
    case(key)
    4'b0000 : led_middle = 4'b0000;//led all off
    
    4'b0001 : begin                //key[0]flow led right to lift
                if(cnt < 24'd249_9999 )
                  led_middle = 4'b0001;
                else if(cnt < 24'd499_9999)
                       led_middle = 4'b0010;
                     else if(cnt < 24'd749_9999)
                            led_middle = 4'b0100;
                          else
                            led_middle = 4'b1000;
              end
              
    4'b0010 : begin                //key[1]flow led left to right
               if(cnt <24'd249_9999 )
                  led_middle = 4'b1000;
                else if(cnt < 24'd499_9999)
                       led_middle = 4'b0100;
                     else if(cnt < 24'd749_9999)
                            led_middle = 4'b0010;
                          else
                            led_middle = 4'b0001;
              end
              
    4'b0100 : begin                //key[2]led twinkle
               if(cnt <24'd499_9999 )
                  led_middle = 4'b1111;
                else
                  led_middle = 4'b0000;
              end
              
    4'b1000 : led_middle = 4'b1111;//key[3]led all on
    default led_middle = 4'b0000;
    
    endcase
    end
endmodule

  • 写回答

1条回答 默认 最新

  • 老皮芽子 2022-03-16 16:04
    关注

    你看下电路图,估计是键盘电平整反了,应该是低电平 0 是按下键盘
    你把 25 行代码改成

    case(~key)

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 3月24日
  • 已采纳回答 3月16日
  • 创建了问题 3月16日

悬赏问题

  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同
  • ¥50 如何openEuler 22.03上安装配置drbd
  • ¥20 ING91680C BLE5.3 芯片怎么实现串口收发数据
  • ¥15 无线连接树莓派,无法执行update,如何解决?(相关搜索:软件下载)
  • ¥15 Windows11, backspace, enter, space键失灵