📄 main.lst
字号:
C51 COMPILER V7.50 MAIN 10/10/2008 18:23:29 PAGE 9
490 3 }
491 2 else
492 2 {
493 3 if( value_pas<0 )
494 3 value_pas=value_pas*10-9 ;
495 3 else
496 3 value_pas=value_pas*10+9 ;
497 3 }
498 2 break ;
499 2 case 18: //按键+/-
500 2 if( value_flag==0 )
501 2 value_act=0-value_act ;
502 2 else
503 2 value_pas=0-value_pas ;
504 2 break ;
505 2 case 15: //按键取余数
506 2 value_flag = 1 ;
507 2 value_pas = 0 ;
508 2 operator = 4 ;
509 2 break ;
510 2 case 10: //按键开根号 删除一位
511 2 if( value_flag==0 )
512 2 value_act=value_act/10 ;
513 2 else
514 2 value_pas=value_pas/10 ;
515 2 break ;
516 2 case 5: //按键平方
517 2 value_flag = 0 ;
518 2 value = value_act*value_act ;
519 2 value_act = value ;
520 2 break ;
521 2 case 0: //按键清除
522 2 value_flag = 0 ;
523 2 value_act = 0 ;
524 2 value_pas = 0 ;
525 2 break ;
526 2 case 16: //按键+
527 2 value_flag = 1 ;
528 2 value_pas = 0 ;
529 2 operator = 0 ;
530 2 break ;
531 2 case 11: //按键-
532 2 value_flag = 1 ;
533 2 value_pas = 0 ;
534 2 operator = 1 ;
535 2 break ;
536 2 case 6: //按键*
537 2 value_flag = 1 ;
538 2 value_pas = 0 ;
539 2 operator = 2 ;
540 2 break ;
541 2 case 1: //按键/
542 2 value_flag = 1 ;
543 2 value_pas = 0 ;
544 2 operator = 3 ;
545 2 break ;
546 2 case 17: //按键=
547 2 value_flag = 0 ;
548 2 switch( operator )
549 2 {
550 3 case 0 : value = value_act+value_pas ; break ;
551 3 case 1 : value = value_act-value_pas ; break ;
C51 COMPILER V7.50 MAIN 10/10/2008 18:23:29 PAGE 10
552 3 case 2 : value = value_act*value_pas ; break ;
553 3 case 3 : value = value_act/value_pas ; break ;
554 3 case 4 : value = value_act%value_pas ; break ;
555 3 }
556 2 value_act = value ;
557 2 break ;
558 2 }
559 1 }
560
561 /*--------------------------------------------------------------------------*/
562
563 /* 触摸屏程序 */
564
565 /*--------------------------------------------------------------------------*/
566 void start() //SPI开始
567 {
568 1 DCLK = 0 ;
569 1 CS = 1 ;
570 1 DIN = 1 ;
571 1 DCLK = 1 ;
572 1 CS = 0 ;
573 1 }
574
575 WriteCharTo7843(unsigned char num) //SPI写数据
576 {
577 1 unsigned char count = 0 ;
578 1 DCLK = 0 ;
579 1 for ( count=0;count<8;count++ )
580 1 {
581 2 num <<= 1 ;
582 2 DIN = CY ;
583 2 DCLK = 0; _nop_() ; _nop_() ; _nop_() ; //上升沿有效
584 2 DCLK = 1; _nop_() ; _nop_() ; _nop_() ;
585 2 }
586 1 }
587
588
589 unsigned int ReadFromCharFrom7843 ( void ) //SPI 读数据
590 {
591 1 unsigned char count = 0 ;
592 1 unsigned int Num = 0 ;
593 1 for ( count=0;count<12;count++ )
594 1 {
595 2 Num <<= 1 ;
596 2 DCLK = 1 ; _nop_() ; _nop_() ; _nop_() ; //下降沿有效
597 2 DCLK = 0 ; _nop_() ; _nop_() ; _nop_() ;
598 2 if( DOUT ) Num++ ;
599 2 }
600 1 return ( Num ) ;
601 1 }
602
603 void Read_ADS7843()
604 {
605 1 int press_flag = 0 ;
606 1 delay(1000); //中断后延时以消除抖动,使得采样数据更准确
607 1 start(); //启动SPI
608 1 //while(BUSY); //如果BUSY信号不好使可以删除不用
609 1 delay(2);
610 1 WriteCharTo7843(0x90); //送控制字 10000100 即用12bit、非差分方式读X坐标
611 1 //while(BUSY); //如果BUSY信号不好使可以删除不用
612 1 delay(2);
613 1 DCLK=1; _nop_();_nop_();_nop_();_nop_();
C51 COMPILER V7.50 MAIN 10/10/2008 18:23:29 PAGE 11
614 1 DCLK=0; _nop_();_nop_();_nop_();_nop_();
615 1 Y=ReadFromCharFrom7843(); //读X轴坐标
616 1 WriteCharTo7843(0xD0); //送控制字 11000100 即用12bit、非差分方式读Y坐标
617 1 DCLK=1; _nop_();_nop_();_nop_();_nop_();
618 1 DCLK=0; _nop_();_nop_();_nop_();_nop_();
619 1 X=ReadFromCharFrom7843(); //读Y轴坐标
620 1 CS=1;
621 1 if ( flag==1 )
622 1 {
623 2 if( Y!=4095&&X!=0 )
624 2 {
625 3 d_x = 127-X/30 ;
626 3 d_y = 63-Y/60 ;
627 3 drawn_point ( d_x,d_y ) ;
628 3 }
629 2 }
630 1 if ( flag==2 )
631 1 {
632 2 if( Y!=4095&&X!=0 )
633 2 {
634 3 while(!PENIR);
635 3 if( press_flag==0 )
636 3 {
637 4 press_flag = 1 ;
638 4 calculator_key () ;
639 4 calculator_main () ;
640 4 if ( value_flag == 0 )
641 4 {
642 5 display_value ( value_pas,0x88 ) ;
643 5 display_value ( value_act,0x98 ) ;
644 5 }
645 4 else
646 4 {
647 5 display_value ( value_pas,0x98 ) ;
648 5 display_value ( value_act,0x88 ) ;
649 5 }
650 4 }
651 3 }
652 2 else
653 2 {
654 3 press_flag = 0 ;
655 3 }
656 2 }
657 1 }
658
659 /*主函数*/
660 void main ( void )
661 {
662 1 int j ;
663 1 init_lcd () ;
664 1 display_word(0x92,"初始化...",5);
665 1 clr_GDRAM () ;
666 1 clr_DDRAM () ;
667 1 while ( 1 )
668 1 {
669 2 scan_key () ;
670 2 switch ( flag )
671 2 {
672 3 case 0 :
673 3 display_word(0x91,"画图请按B ",5);
674 3 display_word(0x89,"计算器请按C ",6);
675 3 break ;
C51 COMPILER V7.50 MAIN 10/10/2008 18:23:29 PAGE 12
676 3 case 1 :
677 3 display_word(0x92,"返回请按A ",5);
678 3 display_word(0x8a,"清屏请按D ",5);
679 3 j = 4 ;
680 3 while ( j-- )
681 3 delay ( 50000 ) ;
682 3 clr_DDRAM () ;
683 3 while (1)
684 3 {
685 4 Read_ADS7843() ;
686 4 if ( key_A==0 )
687 4 {
688 5 flag = 0 ;
689 5 display_word(0x91,"返回主菜单",5);
690 5 display_word(0x89,"进行中... ",5);
691 5 clr_GDRAM () ;
692 5 clr_DDRAM () ;
693 5 break ;
694 5 }
695 4 if ( key_D==0 )
696 4 {
697 5 display_word(0x92,"清屏...",4);
698 5 clr_GDRAM () ;
699 5 clr_DDRAM () ;
700 5 }
701 4 }
702 3 break ;
703 3 case 2 :
704 3 clr_DDRAM () ;
705 3 while (1)
706 3 {
707 4 Read_ADS7843() ;
708 4 display_word(0x82,"计算器",3);
709 4 display_word(0x92,"返回按A ",4);
710 4 if ( key_A==0 )
711 4 {
712 5 flag = 0 ;
713 5 //clr_GDRAM () ;
714 5 clr_DDRAM () ;
715 5 break ;
716 5 }
717 4 }
718 3 }
719 2 Read_ADS7843() ;
720 2 }
721 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 2585 ----
CONSTANT SIZE = 112 ----
XDATA SIZE = ---- ----
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 + -