博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【iCore4 双核心板_FPGA】例程二:GPIO输入实验——识别按键输入
阅读量:4615 次
发布时间:2019-06-09

本文共 2759 字,大约阅读时间需要 9 分钟。

实验现象:

按键每按下一次,三色LED切换一次状态。

核心源代码:

module key_ctrl(    input clk_25m,    input rst_n,    input key,    output fpga_ledr,    output fpga_ledg,    output fpga_ledb);//--------------------key_in--------------------------------//parameter ms_10 = 250000;reg key_r;reg [17:0]low_cnt;reg [17:0]hig_cnt;always @(posedge clk_25m or negedge rst_n)    //按键消抖动,提取按键状态    if (!rst_n)        begin            key_r <= 1'd0;            low_cnt <= 18'd0;            hig_cnt <= 18'd0;        end    else if(key)                                    //检测按键状态为高时,延时10ms,把按键状态提取出来。        begin            low_cnt <= 18'd0;            if (hig_cnt == ms_10)                begin                    key_r <= key;                    hig_cnt <= hig_cnt;                end            else hig_cnt <= hig_cnt + 1'd1;        end    else                                                    //按键状态为低时,延时10ms,把按键状态提取出来。        begin            hig_cnt <= 18'd0;            if (low_cnt == ms_10)                begin                    key_r <= key;                    low_cnt <= low_cnt;                end            else low_cnt <= low_cnt + 1'd1;        end        wire key_state = key_r;//--------------------led_ctrl-----------------------------//reg [1:0]led_cnt;reg ledr,ledg,ledb;always@(negedge key_state or negedge rst_n)    //按键下降沿控制led状态切换    if (!rst_n)        begin            led_cnt <= 2'd0;        end    else if (led_cnt == 2'd2)        begin            led_cnt <= 2'd0;        end    else led_cnt <= led_cnt + 1'd1;always@(posedge clk_25m or negedge rst_n)        //led状态切换的状态机    if (!rst_n)        begin            ledr <= 1'd1;            ledg <= 1'd1;            ledb <= 1'd1;        end    else case(led_cnt)            2'd0:                                            //红灯亮                begin                    ledr <= 1'd0;                    ledg <= 1'd1;                    ledb <= 1'd1;                end            2'd1:                                            //绿灯亮                begin                    ledr <= 1'd1;                    ledg <= 1'd0;                    ledb <= 1'd1;                end            2'd2:                                            //蓝灯亮                begin                    ledr <= 1'd1;                    ledg <= 1'd1;                    ledb <= 1'd0;                end                default:                                    //都不亮                begin                    ledr <= 1'd1;                    ledg <= 1'd1;                    ledb <= 1'd1;                end        endcase            assign {fpga_ledr,fpga_ledg,fpga_ledb} = {ledr,ledg,ledb};//--------------------endmodule-----------------------------//endmodule

源代码下载链接:

链接: 密码:u1gd

iCore4链接:

转载于:https://www.cnblogs.com/xiaomagee/p/7283131.html

你可能感兴趣的文章
Linux搭建Nexus3.X构建maven私服
查看>>
Notepad++使用NppFTP插件编辑linux上的文件
查看>>
NPOI 操作Excel
查看>>
MySql【Error笔记】
查看>>
vue入门
查看>>
JS线程Web worker
查看>>
Flex的动画效果与变换!(三)(完)
查看>>
mysql常见错误码
查看>>
Openresty 与 Tengine
查看>>
使用XV-11激光雷达做hector_slam
查看>>
布局技巧4:使用ViewStub
查看>>
ddt Ui 案例2
查看>>
拿下主机后内网的信息收集
查看>>
LeetCode 876. Middle of the Linked List
查看>>
windows 下 python 让人头痛的编码
查看>>
作业一
查看>>
joj1023
查看>>
动画原理——旋转
查看>>
Finding LCM LightOJ - 1215 (水题)
查看>>
python生成器
查看>>