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

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 Stata链式中介效应代码修改
  • ¥15 latex投稿显示click download
  • ¥15 请问读取环境变量文件失败是什么原因?
  • ¥15 在若依框架下实现人脸识别
  • ¥15 添加组件无法加载页面,某块加载卡住
  • ¥15 网络科学导论,网络控制
  • ¥15 利用Sentinel-2和Landsat8做一个水库的长时序NDVI的对比,为什么Snetinel-2计算的结果最小值特别小,而Lansat8就很平均
  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错