📄 keypad.c
字号:
#include <stdio.h>#include "../frame/frm_hd_device.h"#include " ../kernel/kern_irq.h"#include "keypad.h"D_UINT16 drv_get_numb(KEYCODE *key , int keycode){ int row,col; if((keycode&0x00000080) !=0) key->short_long = 1; // 是长按键 else key->short_long = 0; // 是短按键 if((keycode&0x00000060) !=0) key->push_pop = 1; // 按键被按下 else key->push_pop = 0; // 按键释放 row = keycode&0x00000038; col = keycode&0x00000007; key->key_value = code[row][col]; printf("the key->key_value is:%c\n",key->key_value); printf("row=%d,col=%d\n",row,col); KP_STS = 0x00000001; return 0;}D_UINT8 handler(D_INT32 irq, void *devid, void *dd){ KEYCODE *key_val; int keycode1 = KP_DAT; drv_get_numb(*key_val , keycode1); printf("%d%d%d\n",key_val->short_long,key_val->push_pop,key_val->key_value); return 0; } D_UINT8 drv_keypad_ioctl(D_UINT8 request, void *param) //修改为重按键形式{ /* KEYCODE *key_val; *int keycode2 = KP_DAT;*/ int* pp = (int*)param; if(*pp == 0) { KP_CTRL =0x00000000; KP_CTRL = KP_CTRL|0x00015000; //设定Re_press和时间间隔为150ms(5x30ms); } kern_enable_irq(6); kern_request_irq(6, handler, 0x000F000A, 0); // get_numb(*key_val , keycode2); return TRUE;} D_BOOL drv_keypad_init(d_device *keypad){ if(!keypad) return FALSE; KP_CTRL =0x00000000; KP_CTRL =0x00000a00; printf("the initialization is ok\n"); kern_enable_irq(6); kern_request_irq(6, handler, 0x000F000A, 0); printf("the irq is opened\n"); return 0;} void drv_keypad_exit(void){ KP_CTRL =0x00000000; printf("the rtc is exit\n"); }int main(){ int parm; D_UINT8 reqt; scanf("%d\n",&parm); d_device *key; printf("begin test\n"); drv_keypad_init(key); printf("KP_STS = 0x%d\n",KP_STS); drv_keypad_ioctl(reqt , &parm); drv_keypad_exit(); printf("over!\n"); return 0; }d_device keypad = {0x0F,0x0A,drv_keypad_init,drv_keypad_exit,NULL,NULL,drv_keypad_ioctl,NULL,NULL,handler,0};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -