m0_74860052 2023-04-13 23:58 采纳率: 33.3%
浏览 121
已结题

Quartus 使用verilog语言实现脉冲按键电话显示,

Quartus 使用verilog语言实现脉冲按键电话显示,verilog

img

  • 写回答

5条回答 默认 最新

  • 「已注销」 2023-04-14 07:40
    关注

    引用new bing部分回答作答:
    以下是满足上述功能的Verilog代码示例:

    module phone_display(
        input wire clk,           //时钟信号
        input wire reset,         //重置信号
        input wire [7:0] key_in,  //按键输入
        input wire re_dial,       //重拨键
        input wire off_hook,      //摘机状态信号
        output reg [7:0] display  //数码管显示输出
    );
    
    reg [7:0] last_number;       //存储最后一个拨号号码
    reg [2:0] digit_pos;         //当前数码管显示位置,0-最低位,7-最高位
    reg [24:0] timer;            //定时器,用于挂机后关闭数码管显示
    
    always @(posedge clk or posedge reset) begin
        if(reset) begin          //重置
            digit_pos <= 0;
            last_number <= 8'hFF; //默认显示无效数字
            display <= 8'hFF;
            timer <= 0;
        end
        else if(off_hook) begin  //摘机状态
            if(timer == 20000000) begin //2秒后关闭数码管显示
                display <= 8'hFF;
                digit_pos <= 0;
            end
            else if(digit_pos < 8) begin
                case(key_in)    //根据按键输入设置要显示的数字
                    8'hE0: last_number[digit_pos] <= 1;
                    8'hD0: last_number[digit_pos] <= 2;
                    8'hB0: last_number[digit_pos] <= 3;
                    8'h70: last_number[digit_pos] <= 4;
                    8'hE: last_number[digit_pos] <= 5;
                    8'hD: last_number[digit_pos] <= 6;
                    8'hB: last_number[digit_pos] <= 7;
                    8'h7: last_number[digit_pos] <= 8;
                    default: last_number[digit_pos] <= 8'hFF; //无效数字
                endcase
                digit_pos <= digit_pos + 1; //显示位置加1
            end
            else if(re_dial) begin  //重拨
                display <= last_number;
                digit_pos <= 0;
                timer <= 0;
            end
            else begin
                display <= {1'b0, last_number[7:1]}; //向左移动一位,最低位补0
                digit_pos <= 7;
                timer <= timer + 1; //定时器加1
            end
        end
        else begin //挂机状态
            display <= 8'hFF;
            digit_pos <= 0;
            timer <= 0;
        end
    end
    
    endmodule
    

    上述代码仅供参考,可能需要根据实际情况进行调整和修改。同时,该代码还需要连接到硬件平台才能正常工作,例如FPGA开发板等。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

问题事件

  • 系统已结题 4月23日
  • 已采纳回答 4月15日
  • 赞助了问题酬金15元 4月14日
  • 修改了问题 4月14日
  • 展开全部

悬赏问题

  • ¥15 uniapp的websocket和c++的websocket服务器通讯 发送的数据和接受的数据表现形式不一样
  • ¥15 pyspark配置中的错误
  • ¥15 html word表格
  • ¥15 kali安装包如何解决,请给明确方案和步骤
  • ¥15 DEA软件进行企业创新效率的计算
  • ¥15 树莓派驱动42步进电机
  • ¥20 bevfusion mit可视化遇到的问题
  • ¥15 如何获得《人工智能工程技术人员》认证?
  • ¥100 悬赏破解EFS加密,速度
  • ¥30 用MATLAB画随t变化的函数图像,式中包含了累加求和,出现报错,不知道怎么办了,请解释一下