?? key.lst
字號:
C51 COMPILER V7.02a KEY 03/24/2004 21:27:28 PAGE 1
C51 COMPILER V7.02a, COMPILATION OF MODULE KEY
OBJECT MODULE PLACED IN KEY.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE KEY.C BROWSE DEBUG OBJECTEXTEND
stmt level source
1 /***************************************************************
2 功能:實(shí)現(xiàn)16只按鍵的識別,并在數(shù)碼管上顯示對應(yīng)的按下的那只鍵
3 作者:SG
4 時(shí)間:2004-03-15
5 版本:V1.0
6 ***************************************************************/
7
8 /*-------------------------------------------------------------
9 #define 分別定義按鍵key1 --- key16對應(yīng)的數(shù)值
10 -------------------------------------------------------------*/
11 #define key1 1
12 #define key2 2
13 #define key3 3
14 #define key4 4
15 #define key5 5
16 #define key6 6
17 #define key7 7
18 #define key8 8
19 #define key9 9
20 #define key10 0
21 #define key11 0x0a
22 #define key12 0x0b
23 #define key13 0x0c
24 #define key14 0x0d
25 #define key15 0x0e
26 #define key16 0x0f
27
28 /*-------------------------------------------------------------
29 sbit分別定義CPU 管腳對應(yīng)的硬件連接
30 -------------------------------------------------------------*/
31 sfr KeyPort = 0x80;
32 sbit _ReadKey = 0xa5;
33 sbit row1 = 0xa6;
34 sbit row2 = 0xa7;
35 sbit KD0 = 0x80;
36 sbit KD1 = 0x81;
37 sbit KD2 = 0x82;
38 sbit KD3 = 0x83;
39 sbit KD4 = 0x84;
40 sbit KD5 = 0x85;
41 sbit KD6 = 0x86;
42 sbit KD7 = 0x87;
43
44 void Delay_xMs(unsigned int x);
45 void Hc164(unsigned char temp );
46
47 /*-------------------------------------------------
48 功能:判別有無按鍵,并返回按下的是哪個(gè)鍵
49 -------------------------------------------------*/
50 bit ReadKeyVal(unsigned char *key)
51 {
52 1 unsigned char i,temp[2];
53 1 _ReadKey = 0;
54 1 KeyPort = 0xFF;
55 1 row1 = 0;
C51 COMPILER V7.02a KEY 03/24/2004 21:27:28 PAGE 2
56 1 row2 = 0;
57 1 temp[0] = KeyPort ;
58 1 if( temp[0] == 0xFF )
59 1 {
60 2 _ReadKey = 1;
61 2 return(1);
62 2 }
63 1 temp[0] = 0xFF;
64 1 temp[1] = 0xFF;
65 1 for( i = 0;i < 2;i++ )
66 1 {
67 2 row1 = 0;
68 2 row2 = 1;
69 2 if ( !KD0 )
70 2 temp[i] = key1;
71 2 else if ( !KD1 )
72 2 temp[i] = key3;
73 2 else if ( !KD2 )
74 2 temp[i] = key5;
75 2 else if ( !KD3 )
76 2 temp[i] = key7;
77 2 else if ( !KD4 )
78 2 temp[i] = key9;
79 2 else if ( !KD5 )
80 2 temp[i] = key11;
81 2 else if ( !KD6 )
82 2 temp[i] = key13;
83 2 else if ( !KD7 )
84 2 temp[i] = key15;
85 2 row1 = 1;
86 2 row2 = 0;
87 2 if ( !KD0 )
88 2 temp[i] = key2;
89 2 else if ( !KD1 )
90 2 temp[i] = key4;
91 2 else if ( !KD2 )
92 2 temp[i] = key6;
93 2 else if ( !KD3 )
94 2 temp[i] = key8;
95 2 else if ( !KD4 )
96 2 temp[i] = key10;
97 2 else if ( !KD5 )
98 2 temp[i] = key12;
99 2 else if ( !KD6 )
100 2 temp[i] = key14;
101 2 else if ( !KD7 )
102 2 temp[i] = key16;
103 2 Delay_xMs(10);
104 2 }
105 1 if ( temp[0] != 0xFF && temp[0] == temp[1] )
106 1 {
107 2 *key = temp[0];
108 2 _ReadKey = 1;
109 2 return(0);
110 2 }
111 1 _ReadKey = 1;
112 1 return(1);
113 1 }
114
115 /*-------------------------------------------------
116 主程序
117 功能:實(shí)現(xiàn)16只按鍵的識別,并在數(shù)碼管上顯示
C51 COMPILER V7.02a KEY 03/24/2004 21:27:28 PAGE 3
118 對應(yīng)的按下的那只鍵
119 -------------------------------------------------*/
120 void main()
121 {
122 1 unsigned char key;
123 1 Hc164(16); //關(guān)閉顯示
124 1 while(1)
125 1 {
126 2 if ( !ReadKeyVal(&key)) //識別有無按鍵
127 2 {
128 3 Hc164(key); //顯示按下的鍵
129 3 }
130 2 }
131 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 300 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 7
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -