📄 key.lst
字号:
C51 COMPILER V7.20 KEY 09/21/2001 13:13:04 PAGE 1
C51 COMPILER V7.20, COMPILATION OF MODULE KEY
OBJECT MODULE PLACED IN key.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE key.c LARGE BROWSE DEBUG OBJECTEXTEND
line level source
1 #pragma large
2 #include "public.h"
3
4
5
6 #include "string.h"
7 #include "stdio.h"
8
9 unsigned char xdata row,col;
10
11
12
13 unsigned char data gKey,gLastKey;
14
15
16 unsigned char xdata chartable[4][8]={ {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37},
17 {0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47},
18 {0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57},
19 {0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67}};
20
21
22
23 void KeyInit()
24 {
25 1
26 1 P0=0x00; //列
27 1 P3_2=1;
28 1 P3_3=1;
29 1 P4_2=1;
30 1 P4_3=1;
31 1 gLastKey=0;
32 1 gKey=0;
33 1
34 1
35 1 }
36
37
38 unsigned char checkcol(unsigned char row,unsigned char * col)
39 {
40 1
41 1 unsigned char xdata i,tmp,tmpKey;;
42 1 switch(row)
43 1 {
44 2 case 0:
45 2 tmpKey=P3_2; //首先检测P3_2行
46 2 break;
47 2 case 1:
48 2 tmpKey=P3_3; //首先检测P3_2行
49 2 break;
50 2 case 2:
51 2 tmpKey=P4_2; //首先检测P3_2行
52 2 break;
53 2 case 3:
54 2 tmpKey=P4_3; //首先检测P3_2行
55 2 break;
C51 COMPILER V7.20 KEY 09/21/2001 13:13:04 PAGE 2
56 2 default:
57 2 tmpKey=P3_2; //首先检测P3_2行
58 2 break;
59 2 }
60 1
61 1
62 1 if(tmpKey==0)
63 1 {
64 2 Delay(10); //去抖动
65 2 switch(row)
66 2 {
67 3 case 0:
68 3 tmpKey=P3_2; //首先检测P3_2行
69 3 break;
70 3 case 1:
71 3 tmpKey=P3_3; //首先检测P3_2行
72 3 break;
73 3 case 2:
74 3 tmpKey=P4_2; //首先检测P3_2行
75 3 break;
76 3 case 3:
77 3 tmpKey=P4_3; //首先检测P3_2行
78 3 break;
79 3 default:
80 3 tmpKey=P3_2; //首先检测P3_2行
81 3 break;
82 3 }
83 2 if(tmpKey==1) //是干扰
84 2 {
85 3 KeyInit();
86 3
87 3 return 0;
88 3 }
89 2 switch(row)
90 2 {
91 3 case 0:
92 3 P3_2=0; //首先检测P3_2行
93 3 break;
94 3 case 1:
95 3 P3_3=0; //首先检测P3_2行
96 3 break;
97 3 case 2:
98 3 P4_2=0; //首先检测P3_2行
99 3 break;
100 3 case 3:
101 3 P4_3=0; //首先检测P3_2行
102 3 break;
103 3 default:
104 3 P3_2=0; //首先检测P3_2行
105 3 break;
106 3 }
107 2 tmpKey=P0; //读取列
108 2 if(tmpKey==0xFF)
109 2 {
110 3 KeyInit();
111 3 return 0;
112 3 }
113 2 Delay(10);//去抖动
114 2 tmpKey=P0;
115 2 if(tmpKey==0xFF)
116 2 {
117 3 KeyInit();
C51 COMPILER V7.20 KEY 09/21/2001 13:13:04 PAGE 3
118 3 return 0;
119 3 }
120 2 tmpKey^=0xFF;
121 2 for(i=0;i<7;i++)
122 2 {
123 3 tmp=tmpKey&0x01;
124 3 tmpKey>>=1;
125 3 if(tmp==1)
126 3 {
127 4 *col=i;
128 4 return 1;
129 4 }
130 3 }
131 2
132 2
133 2 }
134 1 }
135
136
137 unsigned char keyproc()
138 {
139 1 unsigned char data tmpKey;
140 1
141 1
142 1 if(gLastKey!=0)//上次有按钮按下,现在检测是否弹起
143 1 {
144 2 tmpKey=P0;
145 2 Delay(10);//去抖动
146 2 tmpKey=P0;
147 2 if(tmpKey==0xFF) //按钮弹起
148 2 {
149 3
150 3 tmpKey=gLastKey|0x81;//
151 3
152 3 KeyInit();
153 3
154 3 return tmpKey;
155 3 }
156 2 }
157 1
158 1 //下面开始按钮按下的检测
159 1 if(checkcol(0,&col)==1)
160 1 {
161 2 gLastKey=chartable[0][col];
162 2 return gLastKey;
163 2 }
164 1
165 1 if(checkcol(1,&col)==1)
166 1 {
167 2 gLastKey=chartable[1][col];
168 2 return gLastKey;
169 2 }
170 1
171 1 if(checkcol(2,&col)==1)
172 1 {
173 2 gLastKey=chartable[2][col];
174 2 return gLastKey;
175 2 }
176 1
177 1 if(checkcol(3,&col)==1)
178 1 {
179 2 gLastKey=chartable[3][col];
C51 COMPILER V7.20 KEY 09/21/2001 13:13:04 PAGE 4
180 2 return gLastKey;
181 2 }
182 1 return 0;
183 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 391 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = 34 5
PDATA SIZE = ---- ----
DATA SIZE = 2 1
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 + -