📄 section2_5pm6.lst
字号:
241 1 IN6=1;
C51 COMPILER V8.02 SECTION2_5PM6 09/05/2007 19:51:41 PAGE 5
242 1 START=0;
243 1 LASTS=1;
244 1 LASTB=0;
245 1 time1=1;
246 1 time2=1;
247 1 counter1=170;
248 1 counter2=50;
249 1 EA=1;
250 1 while(1)
251 1 {
252 2 LEDG=~LEDG;
253 2 avge=pingjun();
254 2 if(xianshi==1)
255 2 {BCD_H_L(avge-200,0); }
256 2 a=IN0;
257 2 bb=IN1;
258 2 c=IN2;
259 2 //d=IN3;
260 2 //e=IN4;
261 2 f=IN5;
262 2 g=IN6;
263 2 if(backward==1)
264 2 {
265 3 START=1;
266 3 LASTS=0;
267 3 BACK=0;
268 3 LASTB=1;
269 3 counter2=0;
270 3 judgementback(90,20,20);
271 3 }
272 2 if(forward==1)
273 2 {
274 3 START=1;
275 3 LASTS=0;
276 3 BACK=1; //前进
277 3 LASTB=0;
278 3 judgement(90,20,20);
279 3 }
280 2 if(black==1)
281 2 {
282 3 START=1;
283 3 LASTS=0;
284 3 TR1=1; //开定时器
285 3 time2=0;
286 3 judgement(90,20,20);
287 3 }
288 2 if(keykey==1)
289 2 {
290 3 chazhi1=abs((int)(avge-avge0));
291 3 if(chazhi1>10) //chazhi1>=20
292 3 {
293 4 START=1;
294 4 LASTS=0;
295 4 counter2=50;
296 4
297 4 if(avge>(avge0+chazhi-2))
298 4 {
299 5 BACK=0;
300 5 LASTB=1;
301 5 //delayms(5);
302 5 judgementback(0,40,15);
303 5 }
C51 COMPILER V8.02 SECTION2_5PM6 09/05/2007 19:51:41 PAGE 6
304 4 if(avge<(avge0-chazhi))
305 4 {
306 5
307 5 BACK=1;
308 5 LASTB=0;
309 5 //delayms(5);
310 5 judgement(0,40,15);
311 5
312 5 }
313 4 }
314 3
315 3 else
316 3 {
317 4 START=0;
318 4 LASTS=1;
319 4 delayms(70);
320 4 TR1=1; //开定时器
321 4 time1=0;
322 4 time2=1;
323 4
324 4
325 4 }
326 3 }
327 2
328 2 }
329 1 }
330 /*PCA中断子程序*/
331 void PCA_ISR (void) interrupt 9
332 {
333 1
334 1 CCF0 = 0; /*清匹配中断标志*/
335 1
336 1 }
337 /*键盘中断子程序*/
338 void led(void) interrupt 19
339 {
340 1 uchar key,t;
341 1 EA=0;
342 1 key=CH452_Read();
343 1 if(0x62==key)
344 1 {
345 2 delayms(2);
346 2 avge0=avge;
347 2 black=0;
348 2 BCD_H_L(avge0-200,1);
349 2 }
350 1 if(0x63==key)
351 1 {
352 2 delayms(2);
353 2 black=1;
354 2 xianshi=0;
355 2 TR0=1;
356 2 for(t=0;t<8;t++)
357 2 CH452_Write((CH452_DIG0+ (t<<8))|16);
358 2 CH452_Write(CH452_DIG1);
359 2 stage_clk_start();
360 2 }
361 1 if(0x7A==key)
362 1 {
363 2 delayms(2);
364 2 counter1=counter1+10;
365 2 CH452_Write(CH452_DIG3 | 1);
C51 COMPILER V8.02 SECTION2_5PM6 09/05/2007 19:51:41 PAGE 7
366 2 }
367 1 if(0x7B==key)
368 1 {
369 2 delayms(2);
370 2 counter1=counter1-10;
371 2 CH452_Write(CH452_DIG3 | 0);
372 2 }
373 1 if(0x50==key)
374 1 {
375 2 delayms(2);
376 2 transform=1;
377 2 CH452_Write(CH452_DIG7 | 1);
378 2
379 2 }
380 1 if(0x58==key)
381 1 {
382 2 delayms(2);
383 2 transform=0;
384 2 CH452_Write(CH452_DIG7 | 2);
385 2 }
386 1 EA=1;
387 1 }
388
389 /*定时器0中断子程序*/
390 void T0_ISR(void) interrupt 1 using 0
391 {
392 1 TR0=0;
393 1 TF0=0;
394 1 TH0=0x7D ;
395 1 TL0=0xCC ; //0xCC由0xCB+1得来
396 1 TR0=1;
397 1 if(T0_OF<10)
398 1 T0_OF++;
399 1 else
400 1 {
401 2
402 2 if(sec<59)
403 2 sec++;
404 2 else
405 2 {
406 3 sec=0;
407 3 min++;
408 3 CH452_Write(CH452_DIG3 | min); //先写min,因为人眼分辨不出
409 3 CH452_Write(0x1FB);
410 3 }
411 2 CH452_Write(CH452_DIG1 | (sec%10));
412 2 CH452_Write(CH452_DIG2 | (sec/10));
413 2 if(stage_clk_flag)
414 2 {
415 3 stage_sec++;
416 3 CH452_Write(CH452_DIG4 | (stage_sec%10));
417 3 if(stage_sec/10) CH452_Write(CH452_DIG5 | (stage_sec/10));
418 3 }
419 2 T0_OF=0;
420 2 }
421 1 }
422
423 /*定时器1中断子程序*/
424 void TIMER1_ISR (void) interrupt 3 using 1
425 {
426 1 uchar i;
427 1 TR1=0;
C51 COMPILER V8.02 SECTION2_5PM6 09/05/2007 19:51:41 PAGE 8
428 1 TF1=0;
429 1 TH1=0x7D;
430 1 TL1=0xFB;
431 1 TR1=1;
432 1 if(time1==1) //执行黑线判断程序17s
433 1 {
434 2 if(--counter1==0)
435 2 {
436 3 TR1=0; //关定时器
437 3 time1=0; //标志
438 3 keykey=1;//执行角度黑线判断程序
439 3 black=0; //不执行黑线判断程序
440 3 }
441 2
442 2 }
443 1 if(time2==1) //判断3s后5s显示
444 1 {
445 2 if(--counter2==0)
446 2 {
447 3 TR1=0; //关定时器
448 3 time2=0;//标志
449 3 keykey=0;
450 3 counter2=0;
451 3 stage_clk_flag=0;//stage_clk_stop();//显示平衡的时间
452 3 CH452_Write(CH452_TWINKLE | 0x30);
453 3 CH452_Write(CH452_DIG0|12);
454 3 CH452_Write(CH452_TWINKLE | 0x01);
455 3 for(i=5;i>0;i--)
456 3 {
457 4 CH452_Write(CH452_DIG7 | i);
458 4 SPOKER=1;
459 4 delay_s(1);
460 4 SPOKER=0;
461 4 delay_s(1);
462 4 }
463 3 CH452_Write(CH452_DIG7);//计数显示
464 3 stage_clk_start();
465 3 CH452_Write(CH452_DIG0|16);
466 3 if(transform==0){ keykey=1;}//循环角度判断
467 3 if(transform==1) {forward=1;}//平衡后前进
468 3
469 3 }
470 2 }
471 1
472 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 2165 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = 60 ----
PDATA SIZE = ---- ----
DATA SIZE = 32 25
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 + -