📄 key.lst
字号:
C51 COMPILER V7.09 KEY 04/03/2007 16:19:07 PAGE 1
C51 COMPILER V7.09, COMPILATION OF MODULE KEY
OBJECT MODULE PLACED IN Key.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE Key.c BROWSE
line level source
1 #include "fx2.h"
2 #include "fx2regs.h"
3 #include "io.h"
4 #include "key.h"
5
6 /*********************宏定义***************************/
7 #define OKey_Macro_MaxKeyNum 9 /*最大键码数*/
8 #define OKey_Macro_ClearTrembleLength 100 /*消颤队列长度*/
9 #define OKey_Macro_NoKey 0xFF
10
11 BYTE OKey_RD_OldKey ;
12 BYTE OKey_RD_CountKey ;
13 WORD OKey_RD_Counter ;
14 BYTE OKey_Value;
15
16 struct OKey_RD_KeyTable_Struct
17 {
18 BYTE ScanCode;
19 BYTE KeyEventID;
20 };
21 code struct OKey_RD_KeyTable_Struct OKey_RD_KeyTable [OKey_Macro_MaxKeyNum+1] = /*键码表 OKey_Macro_MaxKe
-yNum + 1 */
22 {
23 {Macro_ScanS1, 1}, {Macro_ScanS2, 2},
24 {Macro_ScanS3, 3}, {Macro_ScanS4, 4},
25 {Macro_ScanS5, 5}, {Macro_ScanS6, 6},
26 {Macro_ScanS7, 7}, {Macro_ScanS8, 8},
27 {Macro_ScanUnhand,0x7F}, {Macro_ScanNoKey, 0xFF}
28 };
29
30 BYTE OKey_MD_TransKey (BYTE in_key)
31 {
32 1 BYTE i ;
33 1
34 1 i = 0;
35 1 while ((in_key != OKey_RD_KeyTable[i].ScanCode) && (i < OKey_Macro_MaxKeyNum))
36 1 i ++ ;
37 1 return (OKey_RD_KeyTable[i].KeyEventID) ;
38 1 }
39
40 /*********************** 公有函数 **********************/
41 /*************************************************/
42 /* Name: OKey_RP_Scan */
43 /* Descrip: 键盘扫描 */
44 /* Input: 无 */
45 /* Output: 无 */
46 /*************************************************/
47 BYTE OKey_RP_Scan()
48 {
49 1 BYTE temp_code ,temp_scan;
50 1
51 1 temp_code = *KEY; /* 读键盘 */
52 1 if (temp_code == Macro_ScanUnhand) /*没有键按下*/
53 1 {
54 2 if (OKey_RD_OldKey == Macro_ScanUnhand) /* 上次也没按下 */
C51 COMPILER V7.09 KEY 04/03/2007 16:19:07 PAGE 2
55 2 {
56 3 return (OKey_Macro_NoKey); /*无键*/
57 3 }
58 2 }
59 1 else /* 本次有键按下 */
60 1 {
61 2 if (OKey_RD_OldKey != Macro_ScanUnhand) /* 上次没按下 */
62 2 {
63 3 return (OKey_Macro_NoKey); /*无键*/
64 3 }
65 2 }
66 1 if (temp_code == OKey_RD_CountKey)
67 1 {
68 2 OKey_RD_Counter ++ ;
69 2 if (OKey_RD_Counter >= OKey_Macro_ClearTrembleLength)
70 2 {
71 3 OKey_RD_Counter = 0 ;
72 3 temp_scan = OKey_MD_TransKey(temp_code);
73 3 if (temp_scan != Macro_ScanNoKey)
74 3 {
75 4 if (OKey_RD_CountKey == OKey_RD_OldKey)
76 4 return (OKey_Macro_NoKey);
77 4 else
78 4 {
79 5 OKey_RD_OldKey = OKey_RD_CountKey;
80 5 return (temp_scan) ;
81 5 }
82 4 }
83 3 else
84 3 return (OKey_Macro_NoKey);
85 3 }
86 2 else
87 2 return (OKey_Macro_NoKey);
88 2 }
89 1 else
90 1 {
91 2 OKey_RD_Counter = 0;
92 2 OKey_RD_CountKey = temp_code;
93 2 return (OKey_Macro_NoKey);
94 2 }
95 1 }
96
97 /*************************************************/
98 /* Name: OKey_RP_Init */
99 /* Descrip: 初始化 */
100 /* Input: 无 */
101 /* Output: 无 */
102 /*************************************************/
103 void OKey_RP_Init()
104 {
105 1 OKey_RD_OldKey = OKey_Macro_NoKey;
106 1 OKey_RD_CountKey = OKey_Macro_NoKey;
107 1 OKey_RD_Counter = 0;
108 1 OKey_Value = 0xFF;
109 1 }
110
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 147 ----
CONSTANT SIZE = 20 ----
XDATA SIZE = ---- ----
C51 COMPILER V7.09 KEY 04/03/2007 16:19:07 PAGE 3
PDATA SIZE = ---- ----
DATA SIZE = 5 ----
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 + -