?? matrix_key.lst
字號:
C51 COMPILER V7.09 MATRIX_KEY 07/05/2007 19:59:42 PAGE 1
C51 COMPILER V7.09, COMPILATION OF MODULE MATRIX_KEY
OBJECT MODULE PLACED IN Matrix_Key.obj
COMPILER INVOKED BY: D:\A\KEIL\C51\BIN\C51.EXE MATRIX_KEY\Matrix_Key.c BROWSE DEBUG OBJECTEXTEND PRINT(.\Matrix_Key.lst)
- OBJECT(Matrix_Key.obj)
line level source
1 #include "Matrix_Key.h"
2 /*
3 * 矩陣鍵盤通用程序(引腳輸入輸出方向不切換)
4 */
5
6 //KEY_PINS 低4位為ROW(監聽) 高4位為COL(輸出,低電平)
7 // 7 6 5 4 3 2 1 0
8 // Co4 Co3 Co2 Co1 Ro4 Ro3 Ro2 Ro1
9
10 /* COL 4 3 2 1
11 ROW 4
12 3
13 2
14 1
15 */
16
17 unsigned char row=0,col=0;
18
19
20 //<返回其列號(col) 需要事先準備其行號掩碼>
21 static unsigned char Matrix_Key_Scan_Col(const unsigned char rowbitmask)
22 {
23 1 unsigned char i=0;
24 1 unsigned char colmask;
25 1 KEY_PINS = 0x0f;
26 1 colmask=0x0f;
27 1 while ( (KEY_PINS & rowbitmask)==0)
28 1 {
29 2 colmask = colmask<<1;
30 2 KEY_PINS = colmask | 0x0f;
31 2 i++;
32 2 }
33 1 return i;
34 1 }
35
36
37 //<檢測是否有按鍵按下,并返回其行號(row)>
38 static unsigned char Matrix_Key_Scan_Row()
39 {
40 1 KEY_PINS = 0x0f;
41 1
42 1 if (ROW1 == 0)
43 1 {
44 2 return 1;
45 2 }
46 1 else if (ROW2 == 0)
47 1 {
48 2 return 2;
49 2 }
50 1 else if (ROW3 == 0)
51 1 {
52 2 return 3;
53 2 }
54 1 else if (ROW4 == 0)
C51 COMPILER V7.09 MATRIX_KEY 07/05/2007 19:59:42 PAGE 2
55 1 {
56 2 return 4;
57 2 }
58 1 return 0;
59 1 }
60
61 unsigned char Matrix_Key_Detect() //行/列
62 {
63 1 static unsigned char keep_time;
64 1 static unsigned char keep_row;
65 1 static unsigned char keep_col;
66 1 static unsigned char state = 0;
67 1 unsigned char uScanReturn;
68 1
69 1 switch (state)
70 1 {
71 2 case 0: //檢測是否有按鈕按下
72 2 if (Matrix_Key_Scan_Row() != 0 )
73 2 { //<初始化>
74 3 keep_time = 0;
75 3 keep_row = 0;
76 3 keep_col = 0;
77 3 state++;
78 3 }
79 2 break;
80 2 case 1:
81 2 uScanReturn = Matrix_Key_Scan_Row();
82 2 if (uScanReturn != 0 ) //按鍵按下姿態
83 2 {
84 3 if (keep_time<250) keep_time++;
85 3 if (keep_row == 0)
86 3 {
87 4 keep_row = uScanReturn;
88 4 }
89 3 if (keep_row != 0 && keep_col == 0)
90 3 {
91 4 keep_col = Matrix_Key_Scan_Col( 0x01<<(keep_row-1) );
92 4 }
93 3 }
94 2 else //按鍵松起姿態
95 2 {
96 3 if (keep_time>5) //檢測到有效按鍵
97 3 {
98 4 keep_time = 0;
99 4 state++;
100 4 }
101 3 else //按鍵無效
102 3 {
103 4 state = 0;
104 4 }
105 3 }
106 2 break;
107 2 case 2:
108 2 if (Matrix_Key_Scan_Row() == 0 ) //按鍵松起姿態(保持)
109 2 {
110 3 if (keep_time<250) keep_time++;
111 3 if (keep_time>5) //檢測到有效松起
112 3 {
113 4 /* 返回信息:檢測到有效按鍵,并可以執行對應操作 */
114 4 state = 0;
115 4 row = keep_row;
116 4 col = keep_col;
C51 COMPILER V7.09 MATRIX_KEY 07/05/2007 19:59:42 PAGE 3
117 4 return 1;
118 4 }
119 3 }
120 2 else //按鍵被重新按下
121 2 {
122 3 keep_time=0; //重新計時
123 3 }
124 2 break;
125 2 }
126 1 return 0;
127 1
128 1 }
129
130
131
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 195 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 6 ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -