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

📄 main.c

📁 用单片机控制触摸屏
💻 C
📖 第 1 页 / 共 2 页
字号:
		  }
	      else
		  {
		     if( value_pas<0 )
			    value_pas=value_pas*10-1 ; 
			 else
			    value_pas=value_pas*10+1 ; 
		  }
		  break ;
       case 13:                                       //按键2
	      if( value_flag==0 )
		  {
		     if( value_act<0 )
			    value_act=value_act*10-2 ; 
			 else
			    value_act=value_act*10+2 ; 
		  }
	      else
		  {
		     if( value_pas<0 )
			    value_pas=value_pas*10-2 ; 
			 else
			    value_pas=value_pas*10+2 ; 
		  }
		  break ;
       case 12:                                       //按键3
	      if( value_flag==0 )
		  {
		     if( value_act<0 )
			    value_act=value_act*10-3 ; 
			 else
			    value_act=value_act*10+3 ; 
		  }
	      else
		  {
		     if( value_pas<0 )
			    value_pas=value_pas*10-3 ; 
			 else
			    value_pas=value_pas*10+3 ; 
		  }
		  break ;
	   case 9:                                       //按键4
	      if( value_flag==0 )
		  {
		     if( value_act<0 )
			    value_act=value_act*10-4 ; 
			 else
			    value_act=value_act*10+4 ; 
		  }
	      else
		  {
		     if( value_pas<0 )
			    value_pas=value_pas*10-4 ; 
			 else
			    value_pas=value_pas*10+4 ; 
		  }
		  break ;
       case 8:                                       //按键5
	      if( value_flag==0 )
		  {
		     if( value_act<0 )
			    value_act=value_act*10-5 ; 
			 else
			    value_act=value_act*10+5 ; 
		  }
	      else
		  {
		     if( value_pas<0 )
			    value_pas=value_pas*10-5 ; 
			 else
			    value_pas=value_pas*10+5 ; 
		  }
		  break ;
       case 7:                                       //按键6
	      if( value_flag==0 )
		  {
		     if( value_act<0 )
			    value_act=value_act*10-6 ; 
			 else
			    value_act=value_act*10+6 ; 
		  }
	      else
		  {
		     if( value_pas<0 )
			    value_pas=value_pas*10-6 ; 
			 else
			    value_pas=value_pas*10+6 ; 
		  }
		  break ;
       case 4:                                       //按键7
	      if( value_flag==0 )
		  {
		     if( value_act<0 )
			    value_act=value_act*10-7 ; 
			 else
			    value_act=value_act*10+7 ; 
		  }
	      else
		  {
		     if( value_pas<0 )
			    value_pas=value_pas*10-7 ; 
			 else
			    value_pas=value_pas*10+7 ; 
		  }
		  break ;
       case 3:                                       //按键8
	      if( value_flag==0 )
		  {
		     if( value_act<0 )
			    value_act=value_act*10-8 ; 
			 else
			    value_act=value_act*10+8 ; 
		  }
	      else
		  {
		     if( value_pas<0 )
			    value_pas=value_pas*10-8 ; 
			 else
			    value_pas=value_pas*10+8 ; 
		  }
		  break ;
	   case 2:                                       //按键9
	      if( value_flag==0 )
		  {
		     if( value_act<0 )
			    value_act=value_act*10-9 ; 
			 else
			    value_act=value_act*10+9 ; 
		  }
	      else
		  {
		     if( value_pas<0 )
			    value_pas=value_pas*10-9 ; 
			 else
			    value_pas=value_pas*10+9 ; 
		  }
		  break ;
       case 18:                                        //按键+/-
	      if( value_flag==0 )
	         value_act=0-value_act ; 
	      else
	         value_pas=0-value_pas ; 
          break ;
	   case 15:                                        //按键取余数
	      value_flag = 1 ;
		  value_pas = 0 ;
		  operator = 4 ; 
          break ;
	   case 10:                                        //按键开根号  删除一位
	      if( value_flag==0 )
	         value_act=value_act/10 ; 
	      else
	         value_pas=value_pas/10 ; 
          break ;
	   case 5:                                       //按键平方
	      value_flag = 0 ;
		  value = value_act*value_act ;
		  value_act = value ;
          break ;
	   case 0:                                       //按键清除
	      value_flag = 0 ;
		  value_act = 0 ;
		  value_pas = 0 ;	
          break ;
       case 16:                                        //按键+
	      value_flag = 1 ;
		  value_pas = 0 ;
		  operator = 0 ; 
          break ;
       case 11:                                        //按键-
	      value_flag = 1 ;
		  value_pas = 0 ;
		  operator = 1 ; 
          break ;
       case 6:                                       //按键*
	      value_flag = 1 ;
		  value_pas = 0 ;
		  operator = 2 ; 
		  break ;
       case 1:                                       //按键/
	      value_flag = 1 ;
		  value_pas = 0 ;
		  operator = 3 ; 
		  break ;
       case 17:                                        //按键=
	      value_flag = 0 ;
		  switch( operator )
		  {
		     case 0 : value = value_act+value_pas ; break ;
		     case 1 : value = value_act-value_pas ; break ;
		     case 2 : value = value_act*value_pas ; break ;
		     case 3 : value = value_act/value_pas ; break ;
			 case 4 : value = value_act%value_pas ; break ;
		  }
		  value_act = value ;		  
		  break ;
    }
 }

 /*--------------------------------------------------------------------------*/

 /*                               触摸屏程序                                 */
 
 /*--------------------------------------------------------------------------*/
 void start() //SPI开始
 {
    DCLK = 0 ;
	CS = 1 ;
	DIN = 1 ;
	DCLK = 1 ;
	CS = 0 ;
 }

 WriteCharTo7843(unsigned char num) //SPI写数据
 {
    unsigned char count = 0 ;
	DCLK = 0 ;
	for ( count=0;count<8;count++ )
	{
	   num <<= 1 ;
	   DIN = CY ;
	   DCLK = 0; _nop_() ; _nop_() ; _nop_() ; //上升沿有效
	   DCLK = 1; _nop_() ; _nop_() ; _nop_() ;
	}
 }


 unsigned int ReadFromCharFrom7843 ( void ) //SPI 读数据
 {
    unsigned char count = 0 ;
	unsigned int Num = 0 ;
	for ( count=0;count<12;count++ )
	{
	   Num <<= 1 ;
	   DCLK = 1 ; _nop_() ; _nop_() ; _nop_() ; //下降沿有效
	   DCLK = 0 ; _nop_() ; _nop_() ; _nop_() ;
	   if( DOUT ) Num++ ;
	}
	return ( Num ) ;
 }

 void Read_ADS7843()
 {
    int press_flag = 0 ;
	delay(1000); //中断后延时以消除抖动,使得采样数据更准确
	start(); //启动SPI
	//while(BUSY); //如果BUSY信号不好使可以删除不用
	delay(2);
	WriteCharTo7843(0x90); //送控制字 10000100 即用12bit、非差分方式读X坐标 
	//while(BUSY); //如果BUSY信号不好使可以删除不用
	delay(2);
	DCLK=1; _nop_();_nop_();_nop_();_nop_();
	DCLK=0; _nop_();_nop_();_nop_();_nop_();
	Y=ReadFromCharFrom7843();  //读X轴坐标
	WriteCharTo7843(0xD0); //送控制字 11000100 即用12bit、非差分方式读Y坐标
	DCLK=1; _nop_();_nop_();_nop_();_nop_();
	DCLK=0; _nop_();_nop_();_nop_();_nop_();
	X=ReadFromCharFrom7843();  //读Y轴坐标
	CS=1;
	if ( flag==1 )
	{
	   if( Y!=4095&&X!=0 )
	   {
	      d_x = 127-X/30 ;
		  d_y = 63-Y/60 ;
		  drawn_point ( d_x,d_y ) ;
	   }
	}
	if ( flag==2 )
	{
	   if( Y!=4095&&X!=0 )
	   {
	      while(!PENIR);
	      if( press_flag==0 )
		  {
		     press_flag = 1 ;
			 calculator_key () ;
			 calculator_main () ;
			 if ( value_flag == 0 )
			 {
	            display_value ( value_pas,0x88 ) ;
				display_value ( value_act,0x98 ) ;
	         }
			 else
			 {
	            display_value ( value_pas,0x98 ) ;
				display_value ( value_act,0x88 ) ;
	         }
		  }
	   }
	   else
	   {
	      press_flag = 0 ;
	   }
	}
 }

 /*主函数*/
 void main ( void )
 {
	int j ;
	init_lcd () ;
	display_word(0x92,"初始化...",5);
	clr_GDRAM () ;
	clr_DDRAM () ; 
	while ( 1 ) 
	{
	   scan_key () ;
	   switch ( flag )
	   {
	      case 0 : 
		     display_word(0x91,"画图请按B ",5);
			 display_word(0x89,"计算器请按C ",6);
			 break ;
		  case 1 :
			 display_word(0x92,"返回请按A ",5);
			 display_word(0x8a,"清屏请按D ",5);
		     j = 4 ;
			 while ( j-- )
			    delay ( 50000 ) ;
			 clr_DDRAM () ; 
			 while (1)
			 {
			    Read_ADS7843() ;
				if ( key_A==0 )
				{
				   flag = 0 ;
				   display_word(0x91,"返回主菜单",5);
				   display_word(0x89,"进行中... ",5);
				   clr_GDRAM () ;
				   clr_DDRAM () ; 
				   break ;
				}
				if ( key_D==0 )
				{
				   display_word(0x92,"清屏...",4);
				   clr_GDRAM () ;
				   clr_DDRAM () ;
				}
			 }
			 break ;
		  case 2 :
		     clr_DDRAM () ;
			 while (1)
			 {
			    Read_ADS7843() ;
				display_word(0x82,"计算器",3);
				display_word(0x92,"返回按A ",4);
				if ( key_A==0 )
				{
				   flag = 0 ;
				   //clr_GDRAM () ; 
				   clr_DDRAM () ; 
				   break ;
				}
			 }
	   }
	   Read_ADS7843() ;
	}
 }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -