📄 keypad.lst
字号:
C51 COMPILER V7.50 KEYPAD 06/30/2008 23:35:47 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE KEYPAD
OBJECT MODULE PLACED IN keypad.OBJ
COMPILER INVOKED BY: D:\Edu\Software\Keil\C51\BIN\C51.EXE keypad.c BROWSE NOAREGS INCDIR(..\common) DEBUG OBJECTEXTEND
line level source
1
2 /*
3 ****************************************************
4
5 键盘
6
7 ****************************************************
8 */
9
10
11 #include <reg52.H>
12 #include "Typedef.H"
13 #include "UserDef.H"
14 #include "Keypad.h"
15
16
17 /* 按键对照表 */
18 static INT32U code KeyMap[][2] = {
19 // 扫描码 虚键码
20 0xFFFF, VK_NULL,
21 0xFFEF, VK_0,
22 0xFFFD, VK_1,
23 0xFFDF, VK_2,
24 0xFDFF, VK_3,
25 0xFFFB, VK_4,
26 0xFFBF, VK_5,
27 0xFBFF, VK_6,
28 0xFFF7, VK_7,
29 0xFF7F, VK_8,
30 0xF7FF, VK_9,
31 0xEFFF, VK_ADD,
32 0xDFFF, VK_SUB,
33 0xBFFF, VK_MUL,
34 0x7FFF, VK_DIV,
35 0xFEFF, VK_EQU,
36 0xFFFE, VK_CLR,
37 };
38
39
40 /* 端口定义 */
41 sbit KP_Col0 = P1^0;
42 sbit KP_Col1 = P1^1;
43 sbit KP_Col2 = P1^2;
44 sbit KP_Col3 = P1^3;
45 sbit KP_Row0 = P1^4;
46 sbit KP_Row1 = P1^5;
47 sbit KP_Row2 = P1^6;
48 sbit KP_Row3 = P1^7;
49
50
51 /* 全局变量 */
52
53
54 /***************************************************
55
C51 COMPILER V7.50 KEYPAD 06/30/2008 23:35:47 PAGE 2
56 按键扫描程序
57
58 ****************************************************/
59 INT8U Keypad_GetKey(void)
60 {
61 1 static INT8U cnt = 0; //按键消抖计数器
62 1 static INT16U PrevImg = 0x0FFF; //上次的扫描码
63 1 static INT8U PrevKey = VK_NULL; //上次有效按键的虚键码
64 1 INT16U img;
65 1 INT8U n;
66 1 BOOLEAN find;
67 1
68 1 img = 0;
69 1 find = FALSE;
70 1
71 1 //获取扫描码
72 1 P1 = 0xFF;
73 1 KP_Col0 = 0;KP_Col1 = 1;KP_Col2 = 1;KP_Col3 = 1;
74 1 img |= (P1>>4); img <<= 4;
75 1 KP_Col0 = 1;KP_Col1 = 0;KP_Col2 = 1;KP_Col3 = 1;
76 1 img |= (P1>>4); img <<= 4;
77 1 KP_Col0 = 1;KP_Col1 = 1;KP_Col2 = 0;KP_Col3 = 1;
78 1 img |= (P1>>4); img <<= 4;
79 1 KP_Col0 = 1;KP_Col1 = 1;KP_Col2 = 1;KP_Col3 = 0;
80 1 img |= (P1>>4);
81 1
82 1 //消抖
83 1 if (PrevImg != img)
84 1 {
85 2 cnt = 0;
86 2 PrevImg = img;
87 2 return VK_NULL;
88 2 }
89 1
90 1 PrevImg = img;
91 1 cnt ++;
92 1 if (cnt < 5)
93 1 {
94 2 return VK_NULL;
95 2 }
96 1
97 1 //本次消抖完毕,计数器清零,为下次消抖做准备
98 1 cnt = 0;
99 1
100 1 //获取按键的虚键码
101 1 for (n=0;n<(sizeof(KeyMap)/8);n++)
102 1 {
103 2 if (KeyMap[n][0] == img)
104 2 {
105 3 find = TRUE;
106 3 break;
107 3 }
108 2 }
109 1
110 1 if (find == TRUE)
111 1 {
112 2 if (KeyMap[n][1] != PrevKey) //只识别改变的按键动作
113 2 {
114 3 PrevKey = KeyMap[n][1];
115 3 return KeyMap[n][1];
116 3 }
117 2 else
C51 COMPILER V7.50 KEYPAD 06/30/2008 23:35:47 PAGE 3
118 2 return VK_NULL;
119 2 }
120 1 else
121 1 return VK_INVALID;
122 1 }
123
124
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 273 ----
CONSTANT SIZE = 136 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 4 3
IDATA SIZE = ---- ----
BIT SIZE = ---- 1
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -