📄 24c02.lst
字号:
C51 COMPILER V3.20, SN-50203648 24C02 10/04/07 22:09:10 PAGE 1
DOS C51 COMPILER V3.20, COMPILATION OF MODULE 24C02
OBJECT MODULE PLACED IN 24C02.OBJ
COMPILER INVOKED BY: C:\BIN\C51.EXE 24C02.C DB OE SMALL ROM(LARGE)
stmt level source
1 #include<reg51.h>
2 sbit v1=P2^2;
3 sbit v2=P2^4;
4 sbit v3=P2^3;
5 sbit h1=P2^7;
6 sbit h2=P2^6;
7 sbit h3=P2^5;
8
9 sbit led1=P1^0;
10 sbit led2=P1^1;
11 sbit led3=P1^2;
12 sbit led4=P1^3;
13 sbit led5=P1^4;
14 sbit shu4=P2^0;
15 sbit shu2=P2^1;
16 sbit shu1=P3^5;
17 sbit shu3=P3^3;
18 sbit sda=P3^6;
19 sbit scl=P3^7;
20 void start();
21 void delay1();
22 void delayms(unsigned int i);
23 unsigned int read(unsigned int word_address);
24 void write(unsigned int word_address,da);
25 unsigned int keyboar();
26
27 unsigned int b,b1;
28
29 void t0()interrupt 1 using 1 /*中断程序负责显示b的值 */
30 {
31 1 unsigned char a1=0,a2=0,a3=0,a4=0;
32 1 static unsigned char yima[]={0xef,0x8c,0xb7,0xbe,0xdc,0x7e,0x7f,0xac,0xff,0xfe};
33 1 static int k=0;
34 1 //b++;
35 1 a1=b/1000;
36 1 a2=(b-a1*1000)/100;
37 1 a3=(b-a1*1000-a2*100)/10;
38 1 a4=b-a1*1000-a2*100-a3*10;
39 1 if(k==0){shu4=1;shu1=0;shu2=0;shu3=0;P0=yima[a1];}
40 1 else if(k==1){shu4=0;shu1=1;shu2=0;shu3=0;P0=yima[a4];}
41 1 else if(k==2){shu4=0;shu1=0;shu2=1;shu3=0;P0=yima[a3];}
42 1 else if(k==3){shu4=0;shu1=0;shu2=0;shu3=1;P0=yima[a2];}
43 1 k++;
44 1 if(k>3)k=0;
45 1
46 1 TH0=230;
47 1 }
48
49 main()
50 {
51 1
52 1 b=read(1);
53 1 EA=1;
54 1 TR0=1;
55 1 ET0=1;
C51 COMPILER V3.20, SN-50203648 24C02 10/04/07 22:09:10 PAGE 2
56 1 TMOD=0X01;
57 1 while(1)
58 1 {
59 2 b1=keyboar();/*把按键的代表的值给b */
60 2 if(b1>0)
61 2 {
62 3 if(b!=b1)
63 3 {
64 4 b=b1;
65 4 write(1,b);/*把b的值写到24c02的地址为1的空间 */
66 4
67 4 }
68 3 }
69 2 }
70 1
71 1 }
72
73
74 unsigned int keyboar()/*线反转法 */
75 {
76 1 static unsigned int a=0;
77 1 unsigned char a1=0,b1=0;
78 1 /*行线为输入线,列线为输出线 */
79 1 v1=v2=v3=0;
80 1 h1=h2=h3=1;
81 1 if(P2<224)/*检查行是否有按键按下 */
82 1 {
83 2 delayms(10);
84 2 if(P2<224)
85 2 {
86 3 /*行线为输入线,列线为输出线 */
87 3 v1=v2=v3=0;
88 3 h1=h2=h3=1;
89 3 a1=P2;
90 3 /*行线为输出线,列线为输入线 */
91 3 h1=h2=h3=0;
92 3 v1=v2=v3=1;
93 3 b1=P2;
94 3
95 3 a=a1|b1|0x03; /*与0x03相或是为了屏蔽p2.0和p2.1的影响*/
96 3
97 3 }
98 2 }
99 1
100 1 else {
101 2 h1=h2=h3=0;
102 2 v1=v2=v3=1;
103 2 if(P2<28)/*检查列是否有按键按下 */
104 2 {
105 3 delayms(10);
106 3 if(P2<28)
107 3 {
108 4 /*行线为输入线,列线为输出线 */
109 4 v1=v2=v3=0;
110 4 h1=h2=h3=1;
111 4 a1=P2;
112 4 /*行线为输出线,列线为输入线 */
113 4 h1=h2=h3=0;
114 4 v1=v2=v3=1;
115 4 b1=P2;
116 4
117 4 a=a1|b1|0x03;/*与0x03相或是为了屏蔽p2.0和p2.1的影响*/
C51 COMPILER V3.20, SN-50203648 24C02 10/04/07 22:09:10 PAGE 3
118 4
119 4
120 4 }
121 3 }
122 2
123 2 }
124 1
125 1 if(a==219){return 2;}
126 1 else if(a==207){return 1;}
127 1 else if(a==215){return 3;}
128 1 else if(a==187){return 5;}
129 1 else if(a==175){return 4;}
130 1 else if(a==183){return 6;}
131 1 else if(a==123){return 8;}
132 1 else if(a==111){return 7;}
133 1 else if(a==119){return 9;}
134 1 else return 0;
135 1
136 1
137 1 }
138
139 void delayms(unsigned int i)
140 {
141 1 unsigned int j;
142 1 for(;i>0;i--)
143 1 for(j=100;j>0;j--);
144 1 }
145
146 unsigned int read(unsigned int word_address)
147 {unsigned int i=0,m=0,j=0,k=0,read_d=0xa1,write=0xa0,b=0,da2=0;
148 1 bit a=1,c=0;
149 1 start();
150 1 j=0;
151 1 while(1)//device address
152 1 {
153 2
154 2 k=(write<<j)&0x80;j++;
155 2 if(k>1)b=1;
156 2 else b=0;
157 2 sda=b;
158 2 delay1();
159 2 scl=1;
160 2 delay1();
161 2 scl=0;
162 2 delay1();
163 2 sda=1;
164 2 if(sda==0)break;
165 2
166 2
167 2 }
168 1 //sda=1;//check ack
169 1 //a=sda;
170 1
171 1 scl=1;
172 1 delay1();
173 1 scl=0;
174 1 j=0;
175 1 while(1)//word address
176 1 {
177 2
178 2 k=(word_address<<j)&0x80;j++;
179 2 if(k>1)b=1;
C51 COMPILER V3.20, SN-50203648 24C02 10/04/07 22:09:10 PAGE 4
180 2 else b=0;
181 2 sda=b;
182 2 delay1();
183 2 scl=1;
184 2 delay1();
185 2 scl=0;
186 2 delay1();
187 2 sda=1;
188 2 if(sda==0)break;
189 2 }
190 1 //sda=1;//check ack
191 1 //a=sda;
192 1
193 1 scl=1;
194 1 delay1();
195 1 scl=0;
196 1
197 1 start();
198 1 j=0;
199 1 for(i=0;i<8;i++)
200 1 {
201 2
202 2 k=(read_d<<j)&0x80;
203 2 if(k>1)b=1;
204 2 else b=0;
205 2 sda=b;
206 2 delay1();
207 2 scl=1;
208 2 delay1();
209 2 scl=0;
210 2 j++;
211 2
212 2 }
213 1
214 1 // sda=1;//check ack
215 1
216 1 //read_d data
217 1 for(i=0;i<8;i++)
218 1 {
219 2 scl=1;
220 2 delay1();
221 2 scl=0;
222 2 b=sda;
223 2 b=b<<7;
224 2 da2=(da2>>1)|b;
225 2 }
226 1 sda=1;
227 1 delay1();
228 1 scl=1;
229 1 delay1();
230 1 sda=0;
231 1 // scl=0;
232 1
233 1
234 1 return da2;
235 1
236 1 }
237
238 void write(unsigned int word_address,da)
239 { unsigned int i=0,m=0,j=0,k=0,//word_addr=0x00,
240 1 read_d=0xa1,write=0xa0;
241 1 bit b=0;
C51 COMPILER V3.20, SN-50203648 24C02 10/04/07 22:09:10 PAGE 5
242 1 bit a=1,c=0;
243 1 start();
244 1 while(1)//device address
245 1 {
246 2
247 2 k=(write<<j)&0x80;
248 2 if(k>1)b=1;
249 2 else b=0;
250 2 sda=b;
251 2 delay1();
252 2 scl=1;
253 2 delay1();
254 2 scl=0;
255 2 delay1();
256 2 sda=1;
257 2 if(sda==0)break;
258 2 j++;
259 2
260 2
261 2 }
262 1
263 1 sda=1;//check ack
264 1 while(sda==0)break;
265 1 a=sda;
266 1 // j=0;
267 1 scl=1;
268 1 delay1();
269 1 scl=0;
270 1 while(sda==1)break;
271 1 j=0;
272 1 while(1)//word address
273 1 {
274 2
275 2 k=(word_address<<j)&0x80;
276 2 if(k>1)b=1;
277 2 else b=0;
278 2 sda=b;
279 2 delay1();
280 2 scl=1;
281 2 delay1();
282 2 scl=0;
283 2 delay1();
284 2 sda=1;
285 2 if(sda==0)break;
286 2 delay1();
287 2 j++;
288 2
289 2 }
290 1
291 1 sda=1;//check ack
292 1 while(sda==0)break;
293 1 a=sda;
294 1 // j=0;
295 1 scl=1;
296 1 delay1();
297 1 scl=0;
298 1 while(sda==1)break;
299 1 for(i=0;i<8;i++)//write data
300 1 {
301 2 c=(da>>i)&0x01;
302 2 sda=c;
303 2 delay1();
C51 COMPILER V3.20, SN-50203648 24C02 10/04/07 22:09:10 PAGE 6
304 2 scl=1;
305 2 delay1();
306 2 scl=0;
307 2 }
308 1 sda=1;//check ack
309 1 a=sda;
310 1 while(sda==0)break;//check ack;
311 1 scl=1;
312 1 delay1();
313 1 scl=0;
314 1 a=sda;
315 1 delay1();
316 1 sda=0;
317 1 delay1();
318 1 scl=1;
319 1 delay1();
320 1 sda=1;
321 1 a=sda;//stop write
322 1 delay1();
323 1 scl=0;
324 1
325 1 delay1();
326 1
327 1
328 1 }
329
330 void delay1()
331 {unsigned int i=100;
332 1 for(;i>0;i--);
333 1 }
334
335
336 void start()
337 {
338 1 scl=1;
339 1 scl=0;
340 1 sda=1;
341 1 scl=1;
342 1 sda=0;
343 1 scl=0;
344 1
345 1 }
346
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1438 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 18 38
IDATA SIZE = ---- ----
BIT SIZE = ---- 5
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -