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

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

悬赏问题

  • ¥170 如图所示配置eNSP
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改
  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果
  • ¥15 键盘指令混乱情况下的启动盘系统重装