📄 play.lst
字号:
253 void LCDSHOW(uchar number)//调用预置画面
254 {
255 1 LCDGBOC(0);//关光标
256 1 LCDXY(0,0);//将光标置于(0,0)处
257 1 LCDOVERLAP(0);//采用重叠方式
258 1 LCDDAT(0x1B);
259 1 LCDDAT(0x50);
260 1 LCDDAT(number);//调用相关画面
261 1 }
262 //*********************************************************************
263 void ALARM(uchar alarm)//报警画面显示函数
264 {
265 1 MOTORSTOP;//关电机
266 1 DAC0CN=0x00;//将DAC0CN寄存器的最高位DAC0EN置0表示关DAC0
267 1 SFRPAGE=DAC1_PAGE;
268 1 DAC1CN=0x00;
269 1 SFRPAGE=LEGACY_PAGE;
270 1 BEEP=1;//蜂明器鸣叫
271 1 LCDSHOW(alarm);//显示错误画面
272 1 }
273 //*********************************************************************
274 void AIWR(uchar dat)//向串口0写数据函数
275 {
276 1 SBUF0=dat;
277 1 while(!TI0){}
278 1 TI0=0;
279 1 }
280 //
281 uint WRITEAI(uchar addr,uint dat)//AI8080P写数据函数
282 {
283 1 uint CRC;
284 1 ERRORNUM=0;
285 1 again:
286 1 CRC=AIADDR+0x43+addr*256+dat;
287 1 AIOVERFLG=0;
288 1 AITIME=0;
289 1 delay100us();
290 1 TR=1;
291 1 delay100us();
292 1 REN0=0;//暂时不能接收数据
293 1 RI0=0;
294 1 TI0=0;
295 1 ES0=0;
296 1 AIDATNUM=0;
297 1 TIMEFLG=0;
298 1 AIWR(AIADDR+0x80);
299 1 AIWR(AIADDR+0x80);//传2遍地址
300 1 AIWR(0x43);
301 1 AIWR(addr);
302 1 AIWR(dat%256);
303 1 AIWR(dat/256);//传数据
C51 COMPILER V7.07 PLAY 04/24/2003 17:03:47 PAGE 6
304 1 AIWR(CRC%256);
305 1 AIWR(CRC/256);//传CRC码
306 1 delay100us();
307 1 ES0=1;//开串口0的中断,准备接收数据
308 1 REN0=1;//允许接收数据
309 1 TR=0;
310 1 while(!AIOVERFLG){}
311 1 TR=1;
312 1 if(TIMEFLG)
313 1 {
314 2 ERRORNUM++;
315 2 if(ERRORNUM == 10)
316 2 {
317 3 ALARM(COMMUERROR);
318 3 while(1){}
319 3 }
320 2 goto again;
321 2 }
322 1 else
323 1 {
324 2 CRC=AIBUF[0]+AIBUF[1]*256+AIBUF[2]+AIBUF[3]*256+AIBUF[4]+AIBUF[5]*256+AIBUF[6]+AIBUF[7]*256+AIADDR;
325 2 if(CRC != (AIBUF[8]+AIBUF[9]*256))//如果校验错误则表有问题
326 2 {
327 3 ERRORNUM++;
328 3 if(ERRORNUM == 10)
329 3 {
330 4 ALARM(COMMUERROR);
331 4 while(1){}
332 4 }
333 3 goto again;
334 3 }
335 2 else
336 2 {
337 3 return(AIBUF[0]+AIBUF[1]*256);
338 3 }
339 2 }
340 1 }
341 //
342 uint READAI(uchar addr)//AI808P读数据函数
343 {
344 1 uint CRC;
345 1 ERRORNUM=0;
346 1 again:
347 1 CRC=AIADDR+0x52+addr*256;
348 1 AIOVERFLG=0;
349 1 AITIME=0;
350 1 delay100us();
351 1 TR=1;
352 1 delay100us();
353 1 REN0=0;//暂时不能接收数据
354 1 RI0=0;
355 1 TI0=0;
356 1 ES0=0;
357 1 AIDATNUM=0;
358 1 TIMEFLG=0;
359 1 AIWR(AIADDR+0x80);
360 1 AIWR(AIADDR+0x80);//传2遍地址
361 1 AIWR(0x52);
362 1 AIWR(addr);
363 1 AIWR(0);
364 1 AIWR(0);//传数据
365 1 AIWR(CRC%256);
C51 COMPILER V7.07 PLAY 04/24/2003 17:03:47 PAGE 7
366 1 AIWR(CRC/256);//传CRC码
367 1 delay100us();
368 1 ES0=1;//开串口0的中断,准备接收数据
369 1 REN0=1;//允许接收数据
370 1 TR=0;
371 1 while(!AIOVERFLG){}
372 1 TR=1;
373 1 if(TIMEFLG)
374 1 {
375 2 ERRORNUM++;
376 2 if(ERRORNUM == 10)
377 2 {
378 3 ALARM(COMMUERROR);
379 3 while(1){}
380 3 }
381 2 goto again;
382 2 }
383 1 else
384 1 {
385 2 CRC=AIBUF[0]+AIBUF[1]*256+AIBUF[2]+AIBUF[3]*256+AIBUF[4]+AIBUF[5]*256+AIBUF[6]+AIBUF[7]*256+AIADDR;
386 2 if(CRC != (AIBUF[8]+AIBUF[9]*256))//如果校验错误则表有问题
387 2 {
388 3 ERRORNUM++;
389 3 if(ERRORNUM == 10)
390 3 {
391 4 ALARM(COMMUERROR);
392 4 while(1){}
393 4 }
394 3 goto again;
395 3 }
396 2 else
397 2 {
398 3 return(AIBUF[6]+AIBUF[7]*256);
399 3 }
400 2 }
401 1 }
402 //
403 void AISAVE()//存储工艺参数到AI808P表
404 {
405 1 uchar i;
406 1 for(i=0;i<20;i++)
407 1 {
408 2 WRITEAI(0x1A+i*2,GY[GYNUM].temperature[i]);
409 2 if(GY[GYNUM].time[i+1]==0)
410 2 {
411 3 WRITEAI(0x1B+i*2,-121);
412 3 break;
413 3 }
414 2 else
415 2 {
416 3 WRITEAI(0x1B+i*2,GY[GYNUM].time[i+1]);
417 3 }
418 2 }
419 1 }
420 //*********************************************************************
421 //键盘函数
422 uchar keycode()//该函数是在有键按下时才进入的函数
423 {
424 1 if(((key_temp[0] != 0x3F) && (key_temp[1] != 0x3F))||
425 1 ((key_temp[0] != 0x3F) && (key_temp[2] != 0x3F))||
426 1 ((key_temp[1] != 0x3F) && (key_temp[2] != 0x3F)) )//如果出现有2个以上键同时按下的情况则返回0xFF作
427 1 {
C51 COMPILER V7.07 PLAY 04/24/2003 17:03:47 PAGE 8
428 2 return (0xFF);//所以返回0xFF
429 2 }
430 1 else//如果不是则进行下面
431 1 {
432 2 if(key_temp[2] == 0x3F)//如果2排没有键按下,那么只有可能是0排或者1排有键按下,因为同时按下已经在前面过滤
-了
433 2 {
434 3 if(key_temp[0] != 0x3F)//如果0排有键按下,那么返回按下的键值
435 3 {
436 4 switch(key_temp[0])
437 4 {
438 5 case 0x3E: {return ('S');break;}//返回 确定
439 5 case 0x3D: {return ('C');break;}//返回 取消
440 5 case 0x3B: {return ('M');break;}//返回 手动
441 5 case 0x37: {return ('U');break;}//返回 上
442 5 case 0x2F: {return ('R');break;}//返回 右
443 5 default: {return (0xFF);break;}//避免同一排有2个以上的键按下
444 5 }
445 4 }
446 3 else//如果0排没有键按下,那么只有可能是1排了
447 3 {
448 4 switch(key_temp[1])
449 4 {
450 5 case 0x3E: {return ('0');break;}//返回 0
451 5 case 0x3D: {return ('1');break;}//返回 1
452 5 case 0x3B: {return ('2');break;}//返回 2
453 5 case 0x37: {return ('3');break;}//返回 3
454 5 case 0x2F: {return ('4');break;}//返回 4
455 5 case 0x1F: {return ('L');break;}//返回 左
456 5 default: {return (0xFF);break;}//避免同一排有2个以上的键按下
457 5 }
458 4 }
459 3 }
460 2 else//如果2排有键按下,则进行下面
461 2 {
462 3 switch(key_temp[2])//返回2排的键值
463 3 {
464 4 case 0x3E: {return ('5');break;}//返回 5
465 4 case 0x3D: {return ('6');break;}//返回 6
466 4 case 0x3B: {return ('7');break;}//返回 7
467 4 case 0x37: {return ('8');break;}//返回 8
468 4 case 0x2F: {return ('9');break;}//返回 9
469 4 case 0x1F: {return ('D');break;}//返回 下
470 4 default: {return (0xFF);break;}//避免不规范的组合键
471 4 }
472 3 }
473 2 }
474 1 }
475 //
476 void kbscan (void)//键盘扫面函数
477 {
478 1 uchar record[3];
479 1 KEYX0=0;KEYX1=0;KEYX2=0;
480 1 //P1 |=0x3F;
481 1 if((P1 & 0x3F) != 0x3F)//有键按下才进入
482 1 {
483 2 KEYX0=0;KEYX1=1;KEYX2=1;
484 2 record[0]=P1 & 0x3F;
485 2 KEYX0=1;KEYX1=0;KEYX2=1;
486 2 record[1]=P1 & 0x3F;
487 2 KEYX0=1;KEYX1=1;KEYX2=0;
488 2 record[2]=P1 & 0x3F;
C51 COMPILER V7.07 PLAY 04/24/2003 17:03:47 PAGE 9
489 2 if((key_temp[0]==record[0]) && (key_temp[1]==record[1]) && (key_temp[2]==record[2]))
490 2 {//第一次按下一个键,那么该条件等式可定不成立
491 3 if(keyturn)
492 3 {
493 4 KEY=keycode();
494 4 keyturn=0;
495 4 }
496 3 }
497 2 else
498 2 {
499 3 key_temp[0]=record[0];
500 3 key_temp[1]=record[1];
501 3 key_temp[2]=record[2];
502 3 keyturn=1;
503 3 }
504 2 }
505 1 else//当没有键按下时,初始化键盘相关参数为无键按下状态的值
506 1 {
507 2 key_temp[0]=0x3F;
508 2 key_temp[1]=0x3F;
509 2 key_temp[2]=0x3F;
510 2 KEY=0xFF;
511 2 }
512 1 }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -