TA的每日心情 | 开心 2024-10-25 14:50 |
---|
签到天数: 1071 天 连续签到: 1 天 [LV.10]以坛为家III
|
本帖最后由 TLLED 于 2021-5-8 08:09 编辑
这节来学习下电容触摸按键的驱动。 功能:按下电容触摸按键,改变LED0-LED3指示灯的状态。
一、硬件电路
电容触摸硬件电路
二、驱动程序
2.1、touch.v
- //touche.v
- module touch(
- input clk, //时钟信号50Mhz
- input rst_n, //复位信号
- input t_key, //触摸按键
- output reg switch,
- output reg beep_val
- );
-
- //reg define
- reg touch_key_d0;
- reg touch_key_d1;
- //wire define
- wire touch_en;
- //根据按键信号的下降沿判断按下了按键
- assign touch_en = touch_key_d1 & (~touch_key_d0);
- always @ (posedge clk or negedge rst_n) begin
- if(rst_n == 1'b0) begin
- touch_key_d0 <= 1'b0;
- touch_key_d1 <= 1'b0;
- end
- else begin
- touch_key_d0 <= t_key;
- touch_key_d1 <= touch_key_d0;
- end
- end
- //对触摸按键端口接收的数据延迟两个周期
- always @ (posedge clk or negedge rst_n) begin
- if (rst_n == 1'b0)
- begin
- switch <= 1'b0;
- beep_val <= 1'b0;
- end
- else
- begin
- if (touch_en)
- begin
- beep_val <= ~beep_val;
- switch <= ~switch;
- end
- else
- switch <= switch;
- end
- end
- endmodule
复制代码
2.2、led.v
- //led.v
- module led(
- input clk , //系统时钟
- input rst_n, //系统复位,低电平有效
- input key_status, //输入按键值
-
- output reg [3:0] led_val //4个LED灯
- );
- //改变LED的显示状态
- always @(posedge clk or negedge rst_n) begin
- if (!rst_n)
- led_val <= 4'b0000; //全亮
- else begin
- if(key_status)
- led_val <= 4'b0101;
- else
- led_val <= 4'b1010;
- end
- end
- endmodule
复制代码
2.3、程序源码
fpag_test_20210507.rar
(402.42 KB, 下载次数: 4)
|
|