📄 pcf8591-da-lcd1602-c51.lst
字号:
442 void Triangle()
443 {
444 1 uchar l;
445 1 for(l=0;l<255;l++)
446 1 {
447 2 IICSendByte(l); //data byte
448 2 check_ACK(); //检查应答位
449 2 if(F0 == 1)
450 2 {
451 3 SystemError = 1;
452 3 return; //置错误标志位SystemError
453 3 }
454 2 }
455 1
456 1 for(l=255;l>1;l--)
457 1 {
458 2 IICSendByte(l); //data byte
459 2 check_ACK(); //检查应答位
460 2 if(F0 == 1)
461 2 {
462 3 SystemError = 1;
463 3 return; //置错误标志位SystemError
464 3 }
465 2 }
466 1 }
467
468 /*********************************************************
469 输出方波函数
470 *********************************************************/
471 void Square()
472 {
473 1 IICSendByte(N); //data byte
474 1 check_ACK(); //检查应答位
475 1 if(F0 == 1)
476 1 {
477 2 SystemError = 1;
478 2 return; //置错误标志位SystemError
479 2 }
480 1 delay(15);
481 1 N=~N;
482 1 }
483
484 /*********************************************************
485 输出正弦波函数
486 *********************************************************/
487 void sin()
488 {
489 1 uint i;
C51 COMPILER V7.08 PCF8591_DA_LCD1602_C51 12/21/2006 16:15:07 PAGE 9
490 1 for(i=0; i<256; i++)
491 1 {
492 2 IICSendByte(sin_tab[i]); //data byte
493 2 check_ACK(); //检查应答位
494 2 if(F0 == 1)
495 2 {
496 3 SystemError = 1;
497 3 return; //置错误标志位SystemError
498 3 }
499 2 }
500 1
501 1 }
502
503 /*********************************************************
504 输出锯齿波函数
505 *********************************************************/
506 void Sawtooth()
507 {
508 1 uchar l;
509 1 for(l=0;l<255;l++)
510 1 {
511 2 IICSendByte(l); //data byte
512 2 check_ACK(); //检查应答位
513 2 if(F0 == 1)
514 2 {
515 3 SystemError = 1;
516 3 return; //置错误标志位SystemError
517 3 }
518 2 }
519 1 }
520
521 /*********************************************************
522 功能健函数
523 *********************************************************/
524 void keyscan()
525 {
526 1 uchar m;
527 1 if((K2==0)&(!START)) //启动输出后,屏蔽K2健
528 1 {
529 2 k_count++;
530 2 beep();
531 2 switch (k_count)
532 2 {
533 3 case 1:
534 3 lcd_pos(0x00);
535 3 for(m=0;m<16;m++)
536 3 lcd_wdat(dis2[m]);
537 3
538 3 lcd_pos(0x40);
539 3 for(m=0;m<16;m++)
540 3 lcd_wdat(dis5[m]);
541 3 out1=1;
542 3 out4=0;
543 3 break;
544 3
545 3 case 2:
546 3 lcd_pos(0x40);
547 3 for(m=0;m<16;m++)
548 3 lcd_wdat(dis6[m]);
549 3 out1=0;
550 3 out2=1;
551 3 break;
C51 COMPILER V7.08 PCF8591_DA_LCD1602_C51 12/21/2006 16:15:07 PAGE 10
552 3
553 3 case 3:
554 3 lcd_pos(0x40);
555 3 for(m=0;m<16;m++)
556 3 lcd_wdat(dis7[m]);
557 3 out2=0;
558 3 out3=1;
559 3
560 3 break;
561 3
562 3 case 4:
563 3 lcd_pos(0x40);
564 3 for(m=0;m<16;m++)
565 3 lcd_wdat(dis8[m]);
566 3 k_count=0;
567 3 out3=0;
568 3 out4=1;
569 3 break;
570 3
571 3 default:
572 3 out4=0; out3=0; out2=0; out1=0;
573 3 break;
574 3 }
575 2 }
576 1
577 1 if(K3==0) //启动输出
578 1 {
579 2 START=1;
580 2 beep();
581 2 }
582 1
583 1 if(K4==0) //停止输出
584 1 {
585 2 START=0;
586 2 beep();
587 2 }
588 1 }
589
590 /*******************************************************************/
591 /* */
592 /* 主函数 */
593 /* */
594 /*******************************************************************/
595 main()
596 {
597 1 uchar i;
598 1 delay(10); //延时
599 1 lcd_init(); //初始化LCD
600 1
601 1 lcd_pos(0); //设置显示位置为第一行
602 1 for(i=0;i<16;i++)
603 1 lcd_wdat(dis1[i]); //显示字符
604 1
605 1
606 1 lcd_pos(0x40); //设置显示位置为第二行
607 1 for(i=0;i<16;i++)
608 1 lcd_wdat(dis2[i]); //显示字符
609 1
610 1 delay(1500);
611 1
612 1 lcd_pos(0); //设置显示位置为第一行
613 1 for(i=0;i<16;i++)
C51 COMPILER V7.08 PCF8591_DA_LCD1602_C51 12/21/2006 16:15:07 PAGE 11
614 1 lcd_wdat(dis3[i]); //显示字符
615 1
616 1 lcd_pos(0x40); //设置显示位置为第二行
617 1 for(i=0;i<16;i++)
618 1 lcd_wdat(dis4[i]); //显示字符
619 1
620 1 DAC_PCF8591(0x40);
621 1
622 1 while(1)
623 1 {
624 2 keyscan();
625 2
626 2 while(out1&START)
627 2 {
628 3 sin(); //输出正弦波
629 3 keyscan();
630 3 }
631 2
632 2 while(out2&START)
633 2 {
634 3 Square(); //输出方波
635 3 keyscan();
636 3 }
637 2
638 2 while(out3&START)
639 2 {
640 3 Triangle(); //输出三角波
641 3 keyscan();
642 3 }
643 2
644 2 while(out4&START)
645 2 {
646 3 Sawtooth(); //输出锯齿波
647 3 keyscan();
648 3 }
649 2 }
650 1 }
651
652 //*********************************************************
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 882 ----
CONSTANT SIZE = 392 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 2 1
IDATA SIZE = 4 2
BIT SIZE = 6 1
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -