⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.lst

📁 用单片机控制触摸屏
💻 LST
📖 第 1 页 / 共 3 页
字号:
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 + -