📄 key.lst
字号:
C51 COMPILER V7.10 KEY 07/02/2005 14:18:18 PAGE 1
C51 COMPILER V7.10, COMPILATION OF MODULE KEY
OBJECT MODULE PLACED IN .\key.obj
COMPILER INVOKED BY: D:\PROGRAM FILES\KEIL\C51\BIN\C51.EXE ..\..\..\..\电子文档\MON51\daxiadisk\光盘\学习板\C51\key.c BR
-OWSE DEBUG OBJECTEXTEND PRINT(.\key.lst) OBJECT(.\key.obj)
line level source
1 //**********************************************************************************
2 //**********************************************************************************
3 //键盘码读取函数及蜂鸣器驱动
4 #include <reg52.h>
5 #include "APR6008_DRIVER.H"
6 #define keypin P2
7 //入口:检测按键延时的长度,一般取1000
8 //返回:键值,返回0表示无键按下
9 unsigned char getkey(unsigned int t){
10 1 unsigned char c,c1,i;
11 1 static unsigned char oldkey;
12 1 bit iskey=0;
13 1 unsigned char code dout[4]={0x7f,0xbf,0xdf,0xef};
14 1 unsigned char din[8]={0x03,0x02,0x00,0x01,0x00,0x00,0x00,0x00};
15 1 unsigned char key[4][4]={{'*','0','#','E'},{'7','8','9','C'},{'4','5','6','D'},{'1','2','3','U'}};
16 1
17 1 while(1)
18 1 {
19 2 for(i=0;i<4;i++){
20 3 keypin = dout[i];
21 3 c = keypin &0x0f;
22 3 if (c!=0x0f){
23 4 c1=(key[din[0X0E-c]][i]); //转换出健码
24 4 iskey=1;
25 4 }
26 3 }
27 2 if(t==0){
28 3 if (iskey)
29 3 {
30 4 P2=0xff; //恢复现场
31 4 if(oldkey==c1) //如果和上次的按键一样,就当作没有按键.这是为了避免连键
32 4 {
33 5 return(0);
34 5 }
35 4 oldkey=c1; //保存上次的按键
36 4 beep(1); //按键音
37 4 return(c1);
38 4 }
39 3 else
40 3 {
41 4 oldkey=0; //返回0表示无按键
42 4 return(0);
43 4 }
44 3 }
45 2 t--;
46 2 }
47 1 }
48 //4----------------------|
49 // |
50 //5----------------| |
51 // | |
52 //6----------| | |
53 // | | |
54 //7----| | | |
C51 COMPILER V7.10 KEY 07/02/2005 14:18:18 PAGE 2
55 // |1 |2 |3 |up
56 //0----|-----|-----|-----|---------------
57 // |4 |5 |6 |down
58 //1----|-----|-----|-----|---------------
59 // |7 |8 |9 |change
60 //2----|-----|-----|-----|---------------
61 // |* |0 |# |enter
62 //3----|-----|-----|-----|---------------
63
64 //***************************************
65 //响蜂鸣器(喇叭)
66 sbit BB=P1^7;
67 void beep(unsigned char t)
68 {
69 1 unsigned char i;
70 1 unsigned int j;
71 1 for(j=0;j<t*256;j++)
72 1 {
73 2 for(i=100;i>0;i--);//给i赋的初值决定输出的频率
74 2 BB=~BB;
75 2 }
76 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 162 ----
CONSTANT SIZE = 28 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 1 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 + -