📄 显示部分程序.lst
字号:
281 下面这个函数用于任何点描点
282 --------------------------------------------------*/
283
284 void LCD_Display(uchar x,y)
285 {
286 1 uchar a[8];
287 1 uchar j;
288 1 y=63-y;
289 1 for(j=0;j<8;j++) a[j]=0x0;
290 1 a[0]=0x01;
291 1 a[7]=0x80;
292 1 if((x==0)||(x==96))
293 1 {
294 2 for(j=0;j<8;j++)
295 2 a[j]=0xff;
296 2 }
297 1 /* if(x%2==0)
298 1 {
299 1 a[pointY>>3]|=0x01<<(pointY&0x07);
300 1 a[(pointY+16)>>3]|=0x01<<((pointY+16)&0x07);
301 1 a[(pointY+32)>>3]|=0x01<<((pointY+32)&0x07);
302 1 a[(pointY+48)>>3]|=0x01<<((pointY+48)&0x07);
303 1 }
C51 COMPILER V9.01 显示部穇程序 09/02/2013 21:55:46 PAGE 6
304 1
305 1 if(x==pointX)
306 1 for(j=0;j<64;j++)
307 1 if(j%2==0)
308 1 a[j>>3]|=0x01<<(j&0x07);
309 1 if(x==(pointX+16))
310 1 for(j=0;j<64;j++)
311 1 if(j%2==0)
312 1 a[j>>3]|=0x01<<(j&0x07);
313 1 if(x==(pointX+32))
314 1 for(j=0;j<64;j++)
315 1 if(j%2==0)
316 1 a[j>>3]|=0x01<<(j&0x07);
317 1 if(x==(pointX+48))
318 1 for(j=0;j<64;j++)
319 1 if(j%2==0)
320 1 a[j>>3]|=0x01<<(j&0x07);
321 1 if(x==(pointX+64))
322 1 for(j=0;j<64;j++)
323 1 if(j%2==0)
324 1 a[j>>3]|=0x01<<(j&0x07);
325 1 if(x==(pointX+80))
326 1 for(j=0;j<64;j++)
327 1 if(j%2==0)
328 1 a[j>>3]|=0x01<<(j&0x07);
329 1 */
330 1 a[y/8]|=0x01<<(y&0x07);
331 1
332 1 LCD_ror_wr(x,a);
333 1
334 1 }
335
336
337 unsigned char ad1()
338 {
339 1 ADC_CONTR=0x80;//开 A/D 转换电源,选择AD速度
340 1 P1ASF=0x00;//选择 P1.0 作为 A/D 转换通道
341 1 ADC_CONTR|=0x08;//启动 A/D 转换
342 1 while((ADC_CONTR&0x10)==0);//等待 A/D 转换结束
343 1 ADC_CONTR&=0xE7;//将 ADC_FLAG 清0
344 1 Delay_us(4);
345 1 return(ADC_RES);//保存 A/D 转换结果
346 1 }
347
348 unsigned char ad2()
349 {
350 1 ADC_CONTR=0x81;//开 A/D 转换电源,选择AD速度
351 1 P1ASF=0x02;//选择 P1.0 作为 A/D 转换通道
352 1 ADC_CONTR|=0x08;//启动 A/D 转换
353 1 while((ADC_CONTR&0x10)==0);//等待 A/D 转换结束
354 1 ADC_CONTR&=0xE7;//将 ADC_FLAG 清0
355 1 Delay_us(4);
356 1 return(ADC_RES);//保存 A/D 转换结果
357 1 }
358
359
360 /*------------------------------------------------
361 下面这个函数?
362 --------------------------------------------------*/
363 void zhi(uchar x,y,n,uchar *s)
364 {
365 1 uchar i;
C51 COMPILER V9.01 显示部穇程序 09/02/2013 21:55:46 PAGE 7
366 1 for(i=0;i<n;i++)
367 1 if((x+i)>63)
368 1 {
369 2 LCD_WriteCommand(0xB8+y,Right);
370 2 LCD_WriteCommand(0x40+x+i-64,Right);
371 2 LCD_WriteData(s[i],Right);
372 2 }
373 1 else
374 1 {
375 2 LCD_WriteCommand(0xB8+y,Left);
376 2 LCD_WriteCommand(0x40+x+i,Left);
377 2 LCD_WriteData(s[i],Left);
378 2 }
379 1 }
380
381
382 void stop_play(void) interrupt 0
383 {
384 1
385 1 stop=1;
386 1 while(stop){stop=key2;}
387 1 }
388
389
390 void play_stop(void) interrupt 2
391 {
392 1
393 1 gao=0;
394 1 di=0;
395 1 cai[0]=0;
396 1 cai[1]=255;
397 1 cai[2]=0;
398 1 cai[3]=0;
399 1 cai0[0]=0;
400 1 cai0[1]=9;
401 1 cai0[2]=0;
402 1 shi=0;
403 1 ge=0;
404 1 ms=0;
405 1
406 1
407 1 }
408 /*---------------------------------------------------------------------------
409 下面这个函数初始化一开始的显示值。
410 ---------------------------------------------------------------------------*/
411 void display_int(void)
412 {
413 1 zhi(98,0,5,Table3+5*0); //显示PPV 单位 V 小数点。
414 1 zhi(104,0,5,Table3+5*0);
415 1 zhi(110,0,5,Table3+5*1);
416 1 zhi(117,2,5,Table3+5*1);
417 1 zhi(107,2,1,Table4);
418 1
419 1 zhi(98,4,5,Table3+5*4); //显示 FREQ 和 单位 HZ 小数点
420 1 zhi(104,4,5,Table3+5*5);
421 1 zhi(110,4,5,Table3+5*6);
422 1 zhi(116,4,5,Table3+5*7);
423 1 zhi(117,6,5,Table3+5*2);
424 1 zhi(123,6,5,Table3+5*3);
425 1 //zhi(107,6,1,Table4);
426 1
427 1 zhi(101,2,5,Table+5*shi);
C51 COMPILER V9.01 显示部穇程序 09/02/2013 21:55:46 PAGE 8
428 1 zhi(110,2,5,Table+5*ge);
429 1
430 1 zhi(98,6,5,Table+5*0);
431 1 zhi(104,6,5,Table+5*0);
432 1 zhi(110,6,5,Table+5*0);
433 1 for(x=0;x<98;x++)
434 1 {
435 2 LCD_Display(x,0);
436 2 }
437 1
438 1
439 1 }
440 /*---------------------------------------------------------------------------
441 下面这个函数初始化一开始变量值,和中断
442 ---------------------------------------------------------------------------*/
443 void data_int(void)
444 {
445 1 x=0;
446 1 EA=1;
447 1 EX0=1;
448 1 EX1=1;
449 1 P3=0Xff;
450 1 P1=0Xff;
451 1
452 1 cai[0]=0;
453 1 cai[1]=255;
454 1 cai[2]=0;
455 1 cai[3]=0;
456 1 cai0[0]=0;
457 1 cai0[1]=9;
458 1 cai0[2]=0;
459 1 shi=0;
460 1 ge=0;
461 1
462 1
463 1 }
464
465
466
467 /*---------------------------------------------------------------------------
468 下面这个函数计算峰峰值 和 频率 并显示出来
469 ---------------------------------------------------------------------------*/
470 void display_vvp_hz(void)
471 {
472 1
473 1 cai[3]=ad1();
474 1 // cai0[2]=gao+di;
475 1 n=(unsigned int)cai[3];
476 1 m=n/4;
477 1 shi=m/10;
478 1 ge=m%10;
479 1 zhi(101,2,5,Table+5*shi);
480 1 zhi(110,2,5,Table+5*ge);
481 1 cai[0]=ad2();
482 1 n=(unsigned int)cai[0];
483 1 count=n*2;
484 1 shu3=count/100;
485 1 count=count%100;
486 1 shu1=count/10; // 获取计数值的十位
487 1 shu2=count%10;
488 1 zhi(98,6,5,Table+5*shu3);
489 1 zhi(104,6,5,Table+5*shu1);
C51 COMPILER V9.01 显示部穇程序 09/02/2013 21:55:46 PAGE 9
490 1 zhi(110,6,5,Table+5*shu2);
491 1
492 1 }
493
494
495 //定时器0的中断函数
496 void T0_int() interrupt 1
497 {
498 1 TL0=0xf0;
499 1 TH0=0xdb;
500 1
501 1 time--;
502 1 if(time==0){ //定时1s
503 2 shu1=TH1;
504 2 shu2=TL1;
505 2 count=shu1*256+shu2;
506 2 flag=1;
507 2 TH1=0;
508 2 TL1=0;
509 2 time=108;
510 2 }
511 1
512 1 }
513
514 /*---------------------------------------------------------------------------
515 下面这个函数为主函数?
516 ---------------------------------------------------------------------------*/
517 void main(void)
518 {
519 1 LCD_Initial();
520 1 Delay_x10ms(10);
521 1 LCD_CLR(Left);
522 1 Delay_x10ms(10);
523 1 LCD_CLR(Right);
524 1 Delay_x10ms(10);
525 1
526 1 data_int();
527 1 display_int();
528 1
529 1 while(1)
530 1
531 1 {
532 2
533 2 caiy1=ad1(); caiy2=ad1(); //caiy3=ad1(); caiy4=ad1();
534 2 y=(9*caiy1+caiy2)/80;
535 2 caix1=ad2(); caix2=ad2(); //caix3=ad2(); caix4=ad2();
536 2 x=(9*caix1+caix2)/80;
537 2
538 2 if(y<64) //当接收到的数据是有效值的时候
539 2 {
540 3 y=y+5;
541 3 x=x+8;
542 3 LCD_Display(x,y); //显示在液晶屏上描绘当前数据点。
543 3 display_vvp_hz();
544 3 // 时间轴 加1;下一个点会描绘在X+1处。
545 3 }
546 2
547 2 if(x==97) x=0; //当时间轴满了,超过了方格范围,时间轴变回起点。
548 2 Delay_x10ms(10); //延时,延时值MS越大,单位时间内能取得的点越少,波形显示就越窄。。反之
-越宽。
549 2
550 2 }
C51 COMPILER V9.01 显示部穇程序 09/02/2013 21:55:46 PAGE 10
551 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1692 ----
CONSTANT SIZE = 109 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 101 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 + -