ZedBoard教程PL篇(2):按键检测

编程入门 行业动态 更新时间:2024-10-23 14:27:45

ZedBoard教程PL篇(2):<a href=https://www.elefans.com/category/jswz/34/1768597.html style=按键检测"/>

ZedBoard教程PL篇(2):按键检测

 开发板环境:vivado2017.4

开发板:Zedboard 芯片型号:xc7z020clg484-1

本章主要使用用verilog编写一个按键检测程序,按一次按键LED亮一次,依次点亮八个LED灯

按键工程

 按键检测代码

`timescale 1ns / 1ps
//
// Company: 
// Engineer: 
// 
// Create Date: 2022/02/26 12:48:48
// Design Name: 
// Module Name: key_test
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//module key_test(
input           clock,//100M
input           reset,//SW0
input           key_in,//BTNC
output  [7:0]   led//LED0~LED7);reg         key_in_r1;reg         key_in_r2;wire        key_in_flag;reg         key_out;reg         key_out_r1; reg         key_out_r2;reg [19:0]  cnt;reg [7:0]   led_reg;   wire        key_out_flag;always @ (posedge clock, negedge reset)if(!reset) key_in_r1 <= 1'b1;else        key_in_r1 <= key_in;always @ (posedge clock, negedge reset)if(!reset) key_in_r2 <= 1'b1;else        key_in_r2 <= key_in_r1;assign key_in_flag = (!key_in_r2 & key_in_r1); always @ (posedge clock, negedge reset)if(!reset)cnt <= 20'h0;else if(key_in_flag)cnt <= 20'h0;elsecnt <= cnt + 1'b1;always @ (posedge clock, negedge reset)if(!reset)key_out <= 1'b1;else if(cnt == 20'hfffff)            key_out <= key_in;always @ (posedge clock, negedge reset)if(!reset)key_out_r1 <= 1'b1;elsekey_out_r1 <= key_out;always @ (posedge clock, negedge reset)if(!reset)key_out_r2 <= 1'b1;elsekey_out_r2 <= key_out_r1;assign  key_out_flag =   (!key_out_r2 && key_out_r1);  //点亮LEDalways@(posedge clock or negedge reset)beginif(!reset)    led_reg    <=  8'b00000001;else if(key_out_flag)beginif(led_reg == 8'b10000000)led_reg    <=  8'b00000001;else    led_reg    <=  led_reg<<1;end        
endassign  led =   led_reg;endmodule

按键检测约束文件

set_property PACKAGE_PIN T22 [get_ports {led[0]}]
set_property IOSTANDARD LVCMOS33 [get_ports {led[0]}]
set_property PACKAGE_PIN T21 [get_ports {led[1]}]
set_property IOSTANDARD LVCMOS33 [get_ports {led[1]}]
set_property PACKAGE_PIN U22 [get_ports {led[2]}]
set_property IOSTANDARD LVCMOS33 [get_ports {led[2]}]
set_property PACKAGE_PIN U21 [get_ports {led[3]}]
set_property IOSTANDARD LVCMOS33 [get_ports {led[3]}]
set_property PACKAGE_PIN V22 [get_ports {led[4]}]
set_property IOSTANDARD LVCMOS33 [get_ports {led[4]}]
set_property PACKAGE_PIN W22 [get_ports {led[5]}]
set_property IOSTANDARD LVCMOS33 [get_ports {led[5]}]
set_property PACKAGE_PIN U19 [get_ports {led[6]}]
set_property IOSTANDARD LVCMOS33 [get_ports {led[6]}]
set_property PACKAGE_PIN U14 [get_ports {led[7]}]
set_property IOSTANDARD LVCMOS33 [get_ports {led[7]}]
set_property PACKAGE_PIN Y9 [get_ports clock]
set_property IOSTANDARD LVCMOS33 [get_ports clock]
set_property PACKAGE_PIN F22 [get_ports reset]
set_property IOSTANDARD LVCMOS33 [get_ports reset]set_property PACKAGE_PIN P16 [get_ports key_in]
set_property IOSTANDARD LVCMOS33 [get_ports key_in]

使用的按键

 

将reset打到下面不然会一直复位,然后按key按键,注意key按键默认没有按的时候是低电平,按键按下就会输入高电平,所以和大多少的按键相反,写程序注意按键上升沿检测按键

开发板上电后第一个led灯亮

按一下按键,第二个灯亮

 再按一下按键,第三个灯亮,每次按键都是依次点亮led,如果按了八次就会重新从第一个灯开始亮起

更多推荐

ZedBoard教程PL篇(2):按键检测

本文发布于:2023-06-27 08:19:10,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/908679.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:按键   教程   ZedBoard   PL

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!