?? 矩陣鍵盤掃描程序.lst
字號:
C51 COMPILER V8.02 __陣鍵盤掃描程序 05/14/2008 18:45:38 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE __陣鍵盤掃描程序
OBJECT MODULE PLACED IN 矩陣鍵盤掃描程序.OBJ
COMPILER INVOKED BY: C:\keil\C51\BIN\C51.EXE 矩陣鍵盤掃描程序.c BROWSE DEBUG OBJECTEXTEND
line level source
1 //MCU:AT89S51
2 //晶振:12M
3 #include"AT89X51.H"
4 unsigned char code numcode[]={0xc0,0xf9,0xa4,0xb0,0x99,
5 0x92,0x82,0xf8,0x80,0x90,
6 0X88,0X83,0XC6,0XA1,0X86,0X8E,0XFF
7 };//數(shù)字0~9及ABCDEF共陽數(shù)碼管代碼
8 unsigned char code charcode[]={0xc0,0xc7,0xc7,0x86,0x89};
9 // HELLO 字樣共陽數(shù)碼管代碼
10
11 unsigned char code bitcode[]={0xfe,0xfd,0xfb,0xf7,
12 0xef,0xdf,0xbf,0x7f}; //數(shù)碼管位選代碼
13 unsigned char dispbuf[8]={16,16,16,0,1,2,3,4};
14 unsigned char disp_bit_count;
15
16 unsigned char disp_count;
17 unsigned char temp;
18 unsigned char key;
19
20 unsigned char i,j;
21
22
23 /********1ms延時子程序***********/
24 delay_nms(unsigned int n)
25 {
26 1 unsigned int i;
27 1 unsigned char j;
28 1
29 1 for(i=0;i<n;i++)
30 1 for(j=0;j<120;j++)
31 1 ; //空操作
32 1 }
33
34 unsigned char keyscan(void)
35 {
36 1 P2=0xff;
37 1 P2_4=0;
38 1 temp=P2;
39 1 temp=temp&0x0f;
40 1 if (temp!=0x0f)
41 1 {
42 2 delay_nms(10);
43 2 temp=P2;
44 2 temp=temp&0x0f;
45 2 if (temp!=0x0f)
46 2 {
47 3 temp=P2;
48 3 temp=temp&0x0f;
49 3 switch(temp)
50 3 {
51 4 case 0x0e:
52 4 key=7;
53 4 break;
54 4 case 0x0d:
55 4 key=8;
C51 COMPILER V8.02 __陣鍵盤掃描程序 05/14/2008 18:45:38 PAGE 2
56 4 break;
57 4 case 0x0b:
58 4 key=9;
59 4 break;
60 4 case 0x07:
61 4 key=10;
62 4 break;
63 4 }
64 3 temp=P2;
65 3 temp=temp & 0x0f;
66 3 while(temp!=0x0f)
67 3 {
68 4 temp=P2;
69 4 temp=temp&0x0f;
70 4 }
71 3 }
72 2 }
73 1
74 1 P2=0xff;
75 1 P2_5=0;
76 1 temp=P2;
77 1 temp=temp&0x0f;
78 1 if (temp!=0x0f)
79 1 {
80 2 delay_nms(10);
81 2 temp=P2;
82 2 temp=temp&0x0f;
83 2 if (temp!=0x0f)
84 2 {
85 3 temp=P2;
86 3 temp=temp&0x0f;
87 3 switch(temp)
88 3 {
89 4 case 0x0e:
90 4 key=4;
91 4 break;
92 4 case 0x0d:
93 4 key=5;
94 4 break;
95 4 case 0x0b:
96 4 key=6;
97 4 break;
98 4 case 0x07:
99 4 key=11;
100 4 break;
101 4 }
102 3 temp=P2;
103 3 temp=temp & 0x0f;
104 3 while(temp!=0x0f)
105 3 {
106 4 temp=P2;
107 4 temp=temp&0x0f;
108 4 }
109 3 }
110 2 }
111 1
112 1 P2=0xff;
113 1 P2_6=0;
114 1 temp=P2;
115 1 temp=temp&0x0f;
116 1 if (temp!=0x0f)
117 1 {
C51 COMPILER V8.02 __陣鍵盤掃描程序 05/14/2008 18:45:38 PAGE 3
118 2 delay_nms(10);
119 2 temp=P2;
120 2 temp=temp&0x0f;
121 2 if(temp!=0x0f)
122 2 {
123 3 temp=P2;
124 3 temp=temp&0x0f;
125 3 switch(temp)
126 3 {
127 4 case 0x0e:
128 4 key=1;
129 4 break;
130 4 case 0x0d:
131 4 key=2;
132 4 break;
133 4 case 0x0b:
134 4 key=3;
135 4 break;
136 4 case 0x07:
137 4 key=12;
138 4 break;
139 4 }
140 3 temp=P2;
141 3 temp=temp&0x0f;
142 3 while(temp!=0x0f)
143 3 {
144 4 temp=P2;
145 4 temp=temp&0x0f;
146 4 }
147 3 }
148 2 }
149 1
150 1 P2=0xff;
151 1 P2_7=0;
152 1 temp=P2;
153 1 temp=temp & 0x0f;
154 1 if (temp!=0x0f)
155 1 {
156 2 delay_nms(10);
157 2 temp=P2;
158 2 temp=temp&0x0f;
159 2 if (temp!=0x0f)
160 2 {
161 3 temp=P2;
162 3 temp=temp & 0x0f;
163 3 switch(temp)
164 3 {
165 4 case 0x0e:
166 4 key=0;
167 4 break;
168 4 case 0x0d:
169 4 key=13;
170 4 break;
171 4 case 0x0b:
172 4 key=14;
173 4 break;
174 4 case 0x07:
175 4 key=15;
176 4 break;
177 4 }
178 3 temp=P2;
179 3 temp=temp & 0x0f;
C51 COMPILER V8.02 __陣鍵盤掃描程序 05/14/2008 18:45:38 PAGE 4
180 3 while(temp!=0x0f)
181 3 {
182 4 temp=P2;
183 4 temp=temp & 0x0f;
184 4 }
185 3 }
186 2 }
187 1 return (key);
188 1 }
189
190
191 void main(void)
192 {
193 1 TMOD=0x02; //使用定時器0,選擇方式2(常數(shù)自動重裝的8位定時器)
194 1 TH0=0x06; //保存數(shù)值,用于自動重裝
195 1 TL0=0x06; //定時250uS初值
196 1 TR0=1; //開定時器0
197 1 ET0=1; //開定時器0溢出中斷
198 1 EA=1; //開總中斷
199 1 while(1)
200 1 {
201 2 dispbuf[0]=keyscan();
202 2
203 2 }
204 1 }
205
206 /**********T0250uS中斷服務程序***************/
207 void t0(void) interrupt 1 using 0
208 {
209 1 disp_count++;
210 1 if(disp_count==8)
211 1 {
212 2 disp_count=0;
213 2 if(disp_bit_count>=3)
214 2 P0=charcode[dispbuf[disp_bit_count]];
215 2 else
216 2 P0=numcode[dispbuf[disp_bit_count]];
217 2 P1=bitcode[disp_bit_count];
218 2 disp_count=0;
219 2 disp_bit_count++;
220 2 if(disp_bit_count==8)
221 2 {
222 3 disp_bit_count=0;
223 3 }
224 2
225 2 }
226 1
227 1
228 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 488 ----
CONSTANT SIZE = 30 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 14 ----
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 + -