📄 main.lst
字号:
211 4 {
212 5 c=nbit;
213 5 do
214 5 {
215 6 m[c-1]=n[c-1];
216 6 c--;
217 6 }
218 5 while (c>0);
219 5 write7279(UNDECODE+5,0x48);
220 5 SBUF=0x40;
221 5 delay10ms(10);
222 5 mnset=1;
223 5 if (ynset==128) sok=1;
224 5 }
225 4 }
226 3 if (nbit==0 && a==1 && num<6) //如果要猜的位数还没设,就把输入的值给nbit
227 3 {
228 4 nbit=num;
229 4 nn=num;
230 4 SBUF=0x20+nbit;
231 4 delay10ms(10);
232 4 send_byte(CMD_RESET);
233 4 write7279(UNDECODE+5, 0x01);
234 4 write7279(DECODE0+6, nbit+ynset);
235 4 nok=1;
236 4 };
237 3 }
238 2 }
239 1
240 1 if (key_number==0x1c) //投降认输
241 1 {
C51 COMPILER V7.50 MAIN 04/07/2006 23:02:33 PAGE 5
242 2 send_byte(CMD_RESET);
243 2 SBUF=0x1f;
244 2 delay10ms(10);
245 2 start=0;
246 2 nbit=0;
247 2 nbset=0;
248 2 mnset=0;
249 2 ynset=0;
250 2 agree=0;
251 2 request=0;
252 2 nok=0;
253 2 sok=0;
254 2 write7279(DECODE0+3, 0x00);
255 2 }
256 1 while (!key);//等待键盘扫描结束以便输入下个数值
257 1 }
258
259 //**********************串口中断*****************************************
260 //*** 进行两机间的数据交换 ****
261 //***********************************************************************
262 void serial(void) interrupt 4
263 {
264 1 signed char h,l,i,j,z;
265 1 if (RI==1)
266 1 {
267 2 h=SBUF>>4;//对收到的数拆分,高位h为标识符,低位l为对应的数值
268 2 l=SBUF&0x0f;
269 2 if (h==1 && l!=0x0f && start!=1) //h=1是否开始,或投降
270 2 {
271 3 if (request==0) request=1;
272 3 else agree=1;
273 3 send_byte(CMD_RESET);
274 3 write7279(DECODE0+6,1);
275 3 if (request==1 && agree==1)
276 3 {
277 4 write7279(UNDECODE+6, 0x01);
278 4 start=1;
279 4 }
280 3 }
281 2 if (h==1 && l==0x0f)//投降
282 2 {
283 3 start=0;
284 3 nbit=0;
285 3 nbset=0;
286 3 mnset=0;
287 3 ynset=0;
288 3 agree=0;
289 3 request=0;
290 3 nok=0;
291 3 sok=0;
292 3 send_byte(CMD_RESET);
293 3 write7279(DECODE0+3, 0x01);
294 3 //
295 3 }
296 2 if (start==1)//双方就绪,判断收到的数
297 2 {
298 3 if (h==2) //h=2 要猜的位数
299 3 {
300 4 nbit=l;
301 4 nn=nbit;
302 4 nbset=1;
303 4 write7279(DECODE0+6, nbit+ynset);
C51 COMPILER V7.50 MAIN 04/07/2006 23:02:33 PAGE 6
304 4 write7279(UNDECODE+5, 0x01);
305 4 nok=1;
306 4 }
307 3
308 3 if (h==4) //h=3 对方是否已设定好要让你猜的数组
309 3 {
310 4
311 4 ynset=128;
312 4 write7279(DECODE0+6, nbit+ynset);
313 4 if (mnset==1) sok=1;
314 4 }
315 3 if (h==5) //h=5 对方发过来的要让你验证的数组
316 3 {
317 4 y[nn-1]=l;
318 4 nn--;
319 4 if (nn==0) //收完了对方发过来的数组,跟自己设好的数组对比一下
320 4 {
321 5 nn=nbit;
322 5 guess=0;
323 5 write7279(UNDECODE+5, 0x48);
324 5 z=0;
325 5 r2[1]=0;
326 5 r2[0]=0;
327 5 for (i=nbit-1;i>=0;i--)
328 5 {
329 6 if (y[i]==m[i])
330 6 r2[1]++;
331 6 }
332 5
333 5 for (i=nbit-1;i>=0;i--)
334 5 {
335 6 for (j=0;j<nbit;j++)
336 6 if (y[i]==m[j])
337 6 z++;
338 6 }
339 5 r2[0]=z-r2[1];
340 5 SBUF=0x60+r2[1];//返回对方猜对的个数
341 5 delay10ms(10);
342 5 SBUF=0x60+r2[0];
343 5 delay10ms(10);
344 5 if (r2[1]==nbit) //如果全对,已方认输
345 5 {
346 6 SBUF=0x1f;
347 6 delay10ms(10);
348 6 start=0;
349 6 nbit=0;
350 6 nbset=0;
351 6 mnset=0;
352 6 ynset=0;
353 6 agree=0;
354 6 request=0;
355 6 nok=0;
356 6 sok=0;
357 6 send_byte(CMD_RESET);
358 6 write7279(DECODE0+3, 0x00);
359 6 }
360 5 }
361 4 }
362 3 if (h==6) //h=6 对方发来的结果,即你猜对了多少个
363 3 {
364 4 r1[r-1]=l;
365 4 r--;
C51 COMPILER V7.50 MAIN 04/07/2006 23:02:33 PAGE 7
366 4 if (r==0)
367 4 {
368 5 r=2;
369 5 a=nbit+1;
370 5 n[0]=0;
371 5 n[1]=0;
372 5 n[2]=0;
373 5 n[3]=0;
374 5 n[4]=0;
375 5 write7279(UNDECODE+4,0x00);
376 5 write7279(DECODE1,0x0b);
377 5 write7279(DECODE0+1,r1[0]);
378 5 write7279(DECODE1+2,0x0a);
379 5 write7279(DECODE0+3,r1[1]);
380 5 }
381 4 }
382 3 }
383 2 RI=0;
384 2 }
385 1 if (TI==1) //退出中断
386 1 TI=0;
387 1
388 1
389 1 }
390
391 //**********************主函数************************************
392 //
393 //***************************************************************
394 void main()
395 {
396 1 unsigned int tt;
397 1 for (tmr=0;tmr<0x2000;tmr++);//测试
398 1 send_byte(CMD_RESET);
399 1 send_byte(CMD_TEST);
400 1
401 1 for (tt=0;tt<2;tt++) {delay10ms(100);}
402 1 send_byte(CMD_RESET);
403 1
404 1 init();//初始化
405 1 write7279(DECODE0+6,0);
406 1 while(1)
407 1 {
408 2
409 2
410 2
411 2 }
412 1 }
413
414
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1822 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 34 9
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 + -