名称:LED长按点亮控制设计Verilog代码Quartus? DE1-SOC开发板
软件:Quartus
语言:Verilog
代码功能:
LED长按点亮控制
长按一秒按钮第一个led亮,再按一下(无论按多久)熄灭,再按一下第二个亮起,再按一下第三个亮,再按一下复原
FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com
本代码已在DE1-SOC开发板验证,DE1-SOC开发板如下,其他开发板可以修改管脚适配:
演示视频:
设计文档:
1.?工程文件
2.?程序文件
3.?程序编译
4.?管脚分配
5.?Testbench
6.?仿真图
部分代码展示:
//长按一秒按钮第一个led亮,再按一下(无论按多久)熄灭, //再按一下第二个亮起,再按一下第三个亮,再按一下复原 module?key_led( input?clk,//时钟 input?key_in,//按键 output?[2:0]?led//输出led ); parameter?second_1=32'd50000000;//1秒计数参数(下载到板子上用该句) //parameter?second_1=32'd500;//1秒计数参数(减小计数值,加快仿真时间,软件仿真用该句) reg?[3:0]?cur_state,next_state; //状态定义 parameter?s_idle=4'd0; parameter?s_wait=4'd1; parameter?s_led1_on=4'd2; parameter?s_led1_off=4'd3; parameter?s_led2_off=4'd4; parameter?s_led2_on=4'd5; parameter?s_led3_off=4'd6; parameter?s_led3_on=4'd7; parameter?s_led1_wait=4'd8; parameter?s_end=4'd9; reg?[31:0]?count=32'd0; //状态机第一段 always@(posedge?clk) cur_state<=next_state; always@(*) case(cur_state) s_idle: if(key_in==0)//按键按下 next_state=s_wait; else next_state=s_idle; s_wait://等待1秒 if(count>=second_1)//1秒 next_state=s_led1_on; else?if(key_in==1)//按键释放 next_state=s_idle;//回到初始状态 else next_state=s_wait; s_led1_on://第一个led亮 if(key_in==1)//按键释放 next_state=s_led1_wait; else? next_state=s_led1_on; s_led1_wait: if(key_in==0)//按键按下 next_state=s_led1_off; else next_state=s_led1_wait; s_led1_off: if(key_in==1)//按键释放 next_state=s_led2_off; else? next_state=s_led1_off; s_led2_off: if(key_in==0)//按键按下 next_state=s_led2_on; else next_state=s_led2_off; s_led2_on://第2个led亮 if(key_in==1)//按键释放 next_state=s_led3_off; else next_state=s_led2_on; s_led3_off: if(key_in==0)//按键按下 next_state=s_led3_on; else next_state=s_led3_off; s_led3_on://第3个led亮 if(key_in==1)//按键释放 next_state=s_end; else next_state=s_led3_on; s_end: if(key_in==0)//按键按下 next_state=s_idle; else next_state=s_end; default:next_state=s_idle; endcase
点击链接获取代码文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=1171
阅读全文