📄
字号:
193 3 P0=table[t]; //段选码送P0
194 3 delay(5);
195 3 }
196 2
197 2 } //(0)处结束
198 1
199 1 while (1) //开始报警
200 1 {
201 2 BeepCount(100);
202 2 }
203 1
204 1 while(1);
205 1 }
206
207
208 /********************************************************************************************
209 * 函数名称:KeyNum()
210 * 功 能:检测用户按下的键盘所对应的键盘号并直接转换成段码
211 * 入口参数:无
212 * 出口参数:无
213 * 说 明:用户可根据自己的键盘编号修改该函数。
214 *********************************************************************************************/
215 int KeyNum(void)
216 {
217 1
218 1 int KeyTemp;
219 1
220 1 KeyTemp=0;
221 1
222 1 if(keydown()==1)
223 1 {
224 2
225 2 col1=0; col2=1; col3=1; col4=1;
226 2
227 2 if (row1==0) { KeyTemp=7; }
228 2 if (row2==0) { KeyTemp=4; }
229 2 if (row3==0) { KeyTemp=1; }
230 2 if (row4==0) { KeyTemp=15; }
231 2
232 2 col1=1; col2=0; col3=1; col4=1;
233 2
234 2 if (row1==0) { KeyTemp=8; }
235 2 if (row2==0) { KeyTemp=5; }
236 2 if (row3==0) { KeyTemp=2; }
237 2 if (row4==0) { KeyTemp=0; }
238 2
239 2 col1=1; col2=1; col3=0; col4=1;
240 2
241 2 if (row1==0) { KeyTemp=9; }
C51 COMPILER V7.07 最新 07/20/2008 15:07:46 PAGE 5
242 2 if (row2==0) { KeyTemp=6; }
243 2 if (row3==0) { KeyTemp=3; }
244 2 if (row4==0) { KeyTemp=14; }
245 2
246 2 col1=1; col2=1; col3=1; col4=0;
247 2
248 2 if (row1==0) { KeyTemp=10; }
249 2 if (row2==0) { KeyTemp=11; }
250 2 if (row3==0) { KeyTemp=12; }
251 2 if (row4==0) { KeyTemp=13; }
252 2
253 2 while ( KeyUp()!=1);
254 2
255 2 return KeyTemp;
256 2
257 2 }
258 1 else
259 1 return 16;
260 1 }
261
262 /********************************************************************************************
263 * 函数名称:delay()
264 * 功 能:软件延时
265 * 入口参数:count 延时参数,值越大,延时越长
266 * 出口参数:无
267 *********************************************************************************************/
268 void delay(int count)
269 {
270 1 int i;
271 1
272 1 while(--count != 0)
273 1 {
274 2 for(i = 0; i < 125; i++);
275 2 }
276 1 }
277 /********************************************************************************************
278 * 函数名称:BeepCount()
279 * 功 能:蜂鸣器按指定次数缝鸣
280 * 入口参数:count
281 * 出口参数:无
282 *********************************************************************************************/
283 void BeepCount(int count)
284 {
285 1 for(;count>0;count--)
286 1 {
287 2
288 2 P3_1=1;delay(120);
289 2 P3_1=0;delay(120);
290 2 }
291 1 }
292 /********************************************************************************************
293 * 函数名称:Keydown()
294 * 功 能:检测键盘是否按下
295 * 入口参数:无
296 * 出口参数:返回1表示键盘按下,返回0表示键盘未按下
297 * 注 意:该函数有消抖功能
298 *********************************************************************************************/
299 int keydown(void)
300 {
301 1 col1=0; col2=0; col3=0; col4=0;
302 1
303 1 if((row1==0) || (row2==0) || (row3==0) || (row4==0))
C51 COMPILER V7.07 最新 07/20/2008 15:07:46 PAGE 6
304 1 {
305 2 delay(1);
306 2 if((row1==0) || (row2==0) || (row3==0) || (row4==0))
307 2 return 1; //返回1表示键盘按下
308 2 else
309 2 return 0;
310 2 }
311 1 else
312 1 return 0;
313 1 }
314 /********************************************************************************************
315 * 函数名称:KeyUp()
316 * 功 能:检测键盘是否弹起
317 * 入口参数:无
318 * 出口参数:返回1表示键盘弹起,返回0表示键盘未弹起
319 * 注 意:该函数有消抖功能
320 *********************************************************************************************/
321 int KeyUp(void)
322 {
323 1 col1=0; col2=0; col3=0; col4=0;
324 1
325 1 if((row1==1) && (row2==1) && (row3==1) && (row4==1))
326 1 {
327 2 delay(1);
328 2 if((row1==1) && (row2==1) && (row3==1) && (row4==1))
329 2 return 1; //返回1表示键盘弹起
330 2 else
331 2 return 0;
332 2 }
333 1 else
334 1 return 0;
335 1 }
336 /********************************************************************************************
337 * 函数名称:display()
338 * 功 能:显示键号
339 * 入口参数:无
340 * 出口参数:无
341 * 注 意:
342 *********************************************************************************************/
343 void display(void)
344 {
345 1 uchar i=0;
346 1 int a;
347 1 int b;
348 1 int k=0;
349 1 int t;
350 1 int table[8]={0xFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF};
351 1 int code duanma[]={0xC0,0xF9,0xA4,0xB0,
352 1 0x99,0x92,0x82,0xF8,
353 1 0x80,0x90,0x88,0x83,
354 1 0xC6,0xA1,0x86,0x8E,
355 1 0xFF,0xBF};
356 1 uchar code weima[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
357 1 while(1)
358 1 {
359 2 a=keydown(); //将判键是否按下函数的值赋给a
360 2 if(a==1) //若为1表示有键按下
361 2 {
362 3 b=KeyNum();
363 3 table[k]=duanma[b];
364 3 k++;
365 3 }
C51 COMPILER V7.07 最新 07/20/2008 15:07:46 PAGE 7
366 2
367 2
368 2 for(t=0;t<8;t++)
369 2 {
370 3 P2=weima[t]; //位码送P2
371 3 P0=table[t]; //段选码送P0
372 3 delay(1);
373 3 }
374 2
375 2
376 2 }
377 1 }
378
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1079 ----
CONSTANT SIZE = 104 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 52 27
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 + -