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

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日
  • 展开全部

悬赏问题

  • ¥50 关于#html5#的问题:H5页面用户手机返回的时候跳转到指定页面例如(语言-javascript)
  • ¥15 无法使用此凭据登录,因为你的域不可用,如何解决?(标签-Windows)
  • ¥15 yolov9的训练时间
  • ¥15 二叉树遍历没有报错但无法正常运行
  • ¥15 在linux系统下vscode运行robocup3d上场球员报错
  • ¥15 Python语言实验
  • ¥15 SAP HANA SQL 增加合计行
  • ¥20 用C#语言解决一个英文打字练习器,有偿
  • ¥15 srs-sip外部服务 webrtc支持H265格式
  • ¥15 在使用abaqus软件中,继承到assembly里的surfaces怎么使用python批量调动