📄 keyscan.lst
字号:
C51 COMPILER V7.50 KEYSCAN 04/05/2009 01:09:53 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE KEYSCAN
OBJECT MODULE PLACED IN keyscan.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE keyscan.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include <reg52.h>
2 #define uchar unsigned char
3 #define uint unsigned int
4
5 uchar code dutable[]={ //段选表
6 0xc0,0xf9,0xa4,0xb0,0x99,
7 0x92,0x82,0xf8,0x80,0x90,
8 0x88,0x83,0xc6,0xa1,0x86,0xbf};
9 //uchar code wetable[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0xfd}; //位选表
10 uchar code wetable[]={0xfe,0xfd,0xfb,0xf7}; //位选表
11
12 uchar Time_num;
13 uint fen,miao;
14 uint Set_key_num; //设置按钮的按下次数
15 sbit Set_key=P1^5; //设置按钮
16 sbit Inc_key=P1^6; //增1按钮
17 sbit Dec_key=P1^7; //减1按钮
18
19 uchar num,temp;
20 uchar keyscan();
21
22 void delay(uchar z)
23 {
24 1 uchar x,y;
25 1 for(x=110;x>0;x--)
26 1 for(y=z;y>0;y--);
27 1 }
28
29 ////////////////////
30 // 数码管显示函数
31 void display(uint ifen,uint imiao)
32 {
33 1 uint shi_fen,ge_fen,shi_miao,ge_miao;
34 1
35 1 shi_fen = ifen/10;
36 1 ge_fen = ifen%10;
37 1 shi_miao = imiao/10;
38 1 ge_miao = imiao%10;
39 1
40 1 P2=wetable[0];
41 1 P0=dutable[shi_fen];
42 1 delay(1);
43 1
44 1 P2=wetable[1];
45 1 P0=dutable[ge_fen];
46 1 delay(1);
47 1
48 1 P2=wetable[2];
49 1 P0=dutable[shi_miao];
50 1 delay(1);
51 1
52 1 P2=wetable[3];
53 1 P0=dutable[ge_miao];
54 1 delay(1);
55 1 }
C51 COMPILER V7.50 KEYSCAN 04/05/2009 01:09:53 PAGE 2
56
57
58 void init()
59 {
60 1 P2 = 0xff;
61 1 Time_num=0;
62 1
63 1 fen = 12;
64 1 miao = 02;
65 1
66 1 TMOD=0X01;
67 1 TH0=(65536-50000)/256;
68 1 TL0=(65536-50000)%256;
69 1 EA=1;
70 1 ET0=1;
71 1 TR0=0;
72 1
73 1
74 1 }
75
76
77 void main()
78 {
79 1 init();
80 1 while(1)
81 1 {
82 2 ////////////////////
83 2 //倒计时处理
84 2 if(Time_num == 20)
85 2 {
86 3 Time_num = 0;
87 3 if(fen==0)
88 3 {
89 4 if(miao==0)
90 4 ; /////////////////////////
91 4 }
92 3 miao--;
93 3 if(miao==-1)
94 3 {
95 4 miao=59;
96 4 fen--;
97 4 }
98 3
99 3 }
100 2
101 2 keyscan();
102 2
103 2 ////////////////////
104 2 // "设置"键按下
105 2 if(num==1)
106 2 {
107 3 TR0=0;
108 3 if(Set_key_num>=3) //按了3次
109 3 {
110 4 Set_key_num = 0;
111 4 TR0=1;//开始倒计时
112 4 }
113 3 Set_key_num++; //次数加
114 3 }
115 2
116 2 ////////////////////
117 2 // "增加"键按下
C51 COMPILER V7.50 KEYSCAN 04/05/2009 01:09:53 PAGE 3
118 2 if(num==2)
119 2 {
120 3 if(Set_key==1) //按了1次,调分钟
121 3 {
122 4 if(fen==60)
123 4 fen=0;
124 4 else
125 4 fen++;
126 4 }
127 3 if(Set_key==2)
128 3 {
129 4 if(miao==60)
130 4 miao=0;
131 4 else
132 4 miao++;
133 4 }
134 3
135 3 }
136 2 ////////////////////
137 2 // "降低"键按下
138 2 if(num==3)
139 2 {
140 3 if(Set_key==1) //按了1次,调秒钟
141 3 {
142 4 if(fen==-1)
143 4 fen=60;
144 4 else
145 4 fen--;
146 4 }
147 3 if(Set_key==2)
148 3 {
149 4 if(miao==-1)
150 4 miao=0;
151 4 else
152 4 miao--;
153 4 }
154 3
155 3 }
156 2
157 2 display(fen,miao);
158 2 }
159 1
160 1
161 1 }
162
163
164 void timer0() interrupt 1
165 {
166 1 TH0=(65536-50000)/256;
167 1 TL0=(65536-50000)%256;
168 1 Time_num++;
169 1 }
170
171
172 uchar keyscan() //4*4举证键盘接到P1口,进行以此循环判断
173 {
174 1 P1=0xfe;
175 1 temp=P1;
176 1 temp=temp&0xf0;
177 1 while(temp!=0xf0)
178 1 {
179 2 delay(5);
C51 COMPILER V7.50 KEYSCAN 04/05/2009 01:09:53 PAGE 4
180 2 temp=P1;
181 2 temp=temp&0xf0;
182 2 while(temp!=0xf0)
183 2 {
184 3 temp=P1;
185 3 switch(temp)
186 3 {
187 4 case 0xee:num=1;
188 4 break;
189 4 case 0xde:num=2;
190 4 break;
191 4 case 0xbe:num=3;
192 4 break;
193 4 case 0x7e:num=4;
194 4 break;
195 4 }
196 3 while(temp!=0xf0)
197 3 {
198 4 temp=P1;
199 4 temp=temp&0xf0;
200 4 }
201 3 }
202 2 }
203 1
204 1 P1=0xfd;
205 1 temp=P1;
206 1 temp=temp&0xf0;
207 1 while(temp!=0xf0)
208 1 {
209 2 delay(5);
210 2 temp=P1;
211 2 temp=temp&0xf0;
212 2 while(temp!=0xf0)
213 2 {
214 3 temp=P1;
215 3 switch(temp)
216 3 {
217 4 case 0xed:num=5;
218 4 break;
219 4 case 0xdd:num=6;
220 4 break;
221 4 case 0xbd:num=7;
222 4 break;
223 4 case 0x7d:num=8;
224 4 break;
225 4 }
226 3 while(temp!=0xf0)
227 3 {
228 4 temp=P1;
229 4 temp=temp&0xf0;
230 4 }
231 3 }
232 2 }
233 1
234 1
235 1 P1=0xfb;
236 1 temp=P1;
237 1 temp=temp&0xf0;
238 1 while(temp!=0xf0)
239 1 {
240 2 delay(5);
241 2 temp=P1;
C51 COMPILER V7.50 KEYSCAN 04/05/2009 01:09:53 PAGE 5
242 2 temp=temp&0xf0;
243 2 while(temp!=0xf0)
244 2 {
245 3 temp=P1;
246 3 switch(temp)
247 3 {
248 4 case 0xeb:num=9;
249 4 break;
250 4 case 0xdb:num=10;
251 4 break;
252 4 case 0xbb:num=11;
253 4 break;
254 4 case 0x7b:num=12;
255 4 break;
256 4 }
257 3 while(temp!=0xf0)
258 3 {
259 4 temp=P1;
260 4 temp=temp&0xf0;
261 4 }
262 3 }
263 2 }
264 1
265 1
266 1 P1=0xf7;
267 1 temp=P1;
268 1 temp=temp&0xf0;
269 1 while(temp!=0xf0)
270 1 {
271 2 delay(5);
272 2 temp=P1;
273 2 temp=temp&0xf0;
274 2 while(temp!=0xf0)
275 2 {
276 3 temp=P1;
277 3 switch(temp)
278 3 {
279 4 case 0xe7:num=13;
280 4 break;
281 4 case 0xd7:num=14;
282 4 break;
283 4 case 0xb7:num=15;
284 4 break;
285 4 case 0x77:num=16;
286 4 break;
287 4 }
288 3 while(temp!=0xf0)
289 3 {
290 4 temp=P1;
291 4 temp=temp&0xf0;
292 4 }
293 3 }
294 2 }
295 1 return num;
296 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 741 ----
CONSTANT SIZE = 20 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
C51 COMPILER V7.50 KEYSCAN 04/05/2009 01:09:53 PAGE 6
DATA SIZE = 9 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 + -