单片机解密FPGA三人抢答器核心代码
单片机解密module Top_Qiangdaqi(
input clk,//主频信号,50MHZ
input rst_n,//低电平复位
//input [2:0]kint,//按键输入
input PLA_A,PLA_B,PLA_C,//按键输入
//input key_ctrl,//主持人按键
output led_d0=0,led_d1,led_d2,led_d3,
output buzzer,//蜂鸣器
output [5:0]seg_sel,
output [7:0]seg_data
);
/*-----------------------按键信号锁存,消抖,LED显示-----------------------*/
/*--------记录按键状态--------*/
reg key_rst;
always @(posedge clk or negedge rst_n)begin
if(!rst_n)key_rst <= 1'b1;//低电平复位,key_rst信号为1
else key_rst <= PLA_C&PLA_B&PLA_A;//按键按下时,key_rst信号为0
end
reg key_rst_r;
always @(posedge clk or negedge rst_n)begin
if(!rst_n)key_rst_r <= 1'b1;
else key_rst_r <= key_rst;//上升沿将key_rst信号锁存到key_rst_r里
end
/*--------添加20MS消抖--------*/
wire key_clr=key_rst_r &(~key_rst);//key_rst由1变为0时,key_clr 的值变为高,维持一个时钟周期,模拟按键情况
reg [19:0]c;//1KHZ---[15:0]clk_1k+[3:0]counter_delay
always @(posedge clk or negedge rst_n)begin
if(!rst_n) c <= 20'd0;
else if(key_clr) c <= 20'd0;
else c <= c+1'b1;
end
reg [2:0] reg_key;
always @(posedge clk or negedge rst_n)begin
if(!rst_n) reg_key <= 3'b111;//低电平复位,三个按键全部赋高电平
else if(c==20'hffffff)//满20ms,将按键值锁存到reg_key,20'hffffff=1111_1111_1111_1111_1111
reg_key <= {PLA_C,PLA_B,PLA_A};
end
//时钟上升沿时将reg_key的信号锁存到reg_key_r里
reg [2:0]reg_key_r;
always @(posedge clk or negedge rst_n)begin
if(!rst_n) reg_key_r <= 3'b111;
else reg_key_r <= reg_key;
end
/*--------控制LED显示--------*/
wire [2:0] led_swt=reg_key_r[2:0]&(~reg_key[2:0]);
reg d0;reg d1;reg d2;reg d3;
always @(posedge clk or negedge rst_n)begin
if(!rst_n)begin//全亮
d0 <= 1'b0;
d1 <= 1'b0;
d2 <= 1'b0;
d3 <= 1'b0;
end
单片机解密else begin//按键控制LED翻转
if(led_swt[1]&led_swt[2])d0 <= ~d0;//倒计时触发灯
//两个按键同时按下也不会因为if语句对LED有干扰
if(led_swt[0]&(!led_swt[1])&(!led_swt[2])&led_d2==1'b0&led_d3==1'b0)d1 <= ~d1;
if(led_swt[1]&(!led_swt[0])&(!led_swt[2])&led_d1==1'b0&led_d3==1'b0)d2 <= ~d2;
if(led_swt[2]&(!led_swt[0])&(!led_swt[1])&led_d1==1'b0&led_d2==1'b0)d3 <= ~d3;
// if(led_swt[0]&led_d2==1'b0&led_d3==1'b0)d1 <= ~d1;
// if(led_swt[1]&led_d1==1'b0&led_d3==1'b0)d2 <= ~d2;
// if(led_swt[2]&led_d1==1'b0&led_d2==1'b0)d3 <= ~d3;
end
end

芯片解密