7 使用定時器去掉按鍵輸入中產生抖動

2021-09-26 16:11:44 字數 2984 閱讀 7747

1. 電路圖

2. linux核心中使用定時器的步驟

static

struct timer_list ***_timer;

/* 定義全域性的定時器 */

init_timer

(&***_timer)

;/* 初始化定時器 */

buttons_timer.function = ***_function;

/* 設定超時呼叫函式 */

buttons_timer.expires =0;

/* 超時時間, 如果不設定預設為0 */

add_timer

(&***_timer)

;/* 向核心註冊定時器 ,當超時時間到後就會呼叫定時器函式buttons_timer_function */

mod_timer

(&***_timer, jiffies+hz/

100)

;/* 個性超時時間 */

3. 驅動**(seven_drv.c)
#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

/* 描述:使用定時器去機械抖動

* 原理:

* 在載入驅動時初始化定時器,設定超時呼叫函式,將定時器加入核心定時器鍊錶

* 在中斷函式中啟動定時器,設定超時時間為10ms去抖動

* 在超時函式中檢測輸入按鍵值,上報按鍵值

*/static

struct class *seven_drv_class;

static

struct class_device *seven_drv_class_dev;

static

struct fasync_struct *buttons_async;

static

struct timer_list buttons_timer;

/* 鍵值:按下時, 0x01, 0x02, 0x03, 0x04

* 鍵值:鬆開時, 0x81, 0x82, 0x83, 0x84

*/typedef

struct

s3c2440_buttons_desc;

s3c2440_buttons_desc pins_desc=

,,,,

};static

struct pins_desc *irq_pd;

unsigned

int key_val;

/* 等待佇列:

* 當沒有按鍵被按下時,如果有程序呼叫s3c24xx_buttons_read函式,

* 它將休眠

*/static

declare_wait_queue_head

(button_waitq)

;/* 中斷事件標誌, 中斷服務程式將它置1,s3c24xx_buttons_read將它清0 */

static

volatile

int ev_press =0;

static

void buttons_timer_function (

unsigned

long data)

irqreturn_t buttons_irq

(int irq,

void

*dev_id)

intseven_drv_open

(struct inode *inode,

struct file *file)

ssize_t seven_drv_read

(struct file *file,

char __user *buf, size_t size,

loff_t *ppos)

intseven_drv_close

(struct inode *inode,

struct file *file)

unsigned

intseven_drv_poll

(struct file *file,

struct poll_table_struct *wait)

intseven_drv_fsync

(int fd,

struct file *filp,

int on)

static

struct file_operations seven_drv_fops =

;static

int major;

static

int __init seven_drv_init

(void

)static

void __exit seven_drv_exit

(void

)module_init

(seven_drv_init)

;module_exit

(seven_drv_exit)

;module_license

("gpl"

);

4. 測試**
#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define dev_device "/dev/buttons_delay"

intmain

(int argc,

char

*ar**)

while(1

)close

(fd)

;return0;

}

使用定時器實現按鍵防抖動

button.c include include include include include include include include include include include include static struct class sixthdrv class static str...

定時器的使用

為了模擬翻頁場景 為了測試記憶體是否洩露 需要用定時任務重新整理介面。寫了個小例子。一上來是空白頁,3秒鐘後顯示第1頁,以後間隔3秒,頁號增加,直到第5頁。首先,在controlller標頭檔案中增加 nstimer timer 定時器變數。在實現 中建立乙個頁號變數 import list dem...

定時器的使用

標籤 空格分隔 知識補充 cadisplaylink 螢幕1秒重新整理60次,每一次螢幕重新整理的時候就會呼叫,1秒呼叫60次 建立乙個定時器,target物件會呼叫sel方法 cadisplaylink displaylinkwithtarget id target selector sel se...