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

📄 main.c

📁 基于ARM2440开发板的触摸屏 触点定位显示坐标的程序
💻 C
字号:
/****************************************Copyright (c)**************************************************
**                               Guangzhou ZHIYUAN Electronics Co.,LTD.
**                                      graduate school
**                                 http://www.zyinside.com
**
**--------------File Info-------------------------------------------------------------------------------
** File name:			main.c
** Last modified Date:  2004-09-16
** Last Version:		1.0
** Descriptions:		The main() function example template
**
**------------------------------------------------------------------------------------------------------
** Created by:			Chenmingji
** Created date:		2004-09-16
** Version:				1.0
** Descriptions:		The original version
**
**------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
** Version:
** Descriptions:
**
********************************************************************************************************/
#include "config.h"

#define BEEP         (1<<10)  /*GPH10口*/
#define BEEP_MASK    (~BEEP)

//uint8 r;

// 定义显示缓冲区
char  disp_buf[50];
void  DelayNS(uint32  dly)
{  
	uint32  i;

   	for(; dly>0; dly--) 
       for(i=0; i<50000; i++);
}

void RunBeep(void)
{
	rGPHDAT=rGPHDAT&BEEP_MASK;
	DelayNS(5);
	rGPHDAT=rGPHDAT|BEEP;
	DelayNS(5);
}

/************************************************************************************************
** Function name: GetLCD_XY
** Descriptions: 读取触摸屏上触摸点的坐标。 程序会一直等待,直到有触摸输入。  
** Input: x       用于保存触摸点x坐标(LCD)的变量指针
**        y       用于保存触摸点y坐标(LCD)的变量指针
** Output: 无
***********************************************************************************************/
void  GetLCD_XY(uint16 *vx, uint16 *vy)
{   uint16  vx_dat, vy_dat;
    uint16  vx_dat1, vy_dat1;    
while(1)
    {   // 判断是否有触摸动作(通过ADS7843的PENIRQ引脚进行判断)
        while(1)
        {   vy_dat = ADS7843_WriteRead(AIN_Y);
            if(vy_dat != 0) break;            

        } 
        // 进行数据采集
        vx_dat = ADS7843_WriteRead(AIN_X);
        vy_dat = ADS7843_WriteRead(AIN_Y);
        vx_dat1 = ADS7843_WriteRead(AIN_X);
        vy_dat1 = ADS7843_WriteRead(AIN_Y);
        
        if((vy_dat<3) || (vy_dat1<3)) continue;
        
        if(vx_dat>vx_dat1) 
        {   
            if((vx_dat-vx_dat1) > 32) continue;
        }
        else
        {               
        if((vx_dat1-vx_dat) > 32) continue; 
        }        
        if(vy_dat>vy_dat1) 
        {   
            if((vy_dat-vy_dat1) > 64) continue;
        }
        else
        {   
            if((vy_dat1-vy_dat) > 64) continue; 
        } 
        *vx = (vx_dat+vx_dat1) >> 1;
        *vy = (vy_dat+vy_dat1) >> 1;  
        return;                        
    }    
}

uint16 x, y;
/************************************************************************************************
** Function name: main
** Descriptions: 读取触摸屏的触摸点坐标值,然后通过串口发送到PC机显示。        
** Input: 无
** Output: 系统返回值0
***********************************************************************************************/
int  main(void)
{	
    
    // 初始化I/O   
    rGPECON = (rGPECON & (~(0x0F<<18))) | (0x05<<18);  // GPE9、GPE10口为输出口(CS,CLK)
    rGPEUP = rGPEUP & (~(3<<9));    
    rGPGCON = (rGPGCON & (~(0x0F<<20))) | (0x01<<20);   // GPG10口为输出口(DI),GPG11为 输入口(DO)
	rGPHCON=(rGPHCON&(~(0x03<<20)))|(0x01<<20);         //GPF10口为输出口
   
    rGPGUP = rGPGUP & (~(1<<10));
    UART_Select(0);             // 选用UART0
    UART_Init();                // 初始化UART0	
    UART_SendStr("\n\n\nTouch Screen Test X/Y position. \n");
  //  UART_SendStr("Separate  conversion mode test. \n\n");		
	while(1)
	{	//RunBeep();
	   // if((x-1800<=50)||(1800-x<=50)||(y-1500<=50)||(1500-y<=50))
	    if((x-1800)*(x-1800)+(y-1500)*(y-1500)<=200*200)
	    {
	    	GetLCD_XY(&x, &y);
	   		sprintf(disp_buf, "X的坐标值是: %04d \n", x);
			UART_SendStr(disp_buf);	
			sprintf(disp_buf, "Y的坐标值是: %04d \n\n\n", y);
			UART_SendStr(disp_buf);
			RunBeep();
	    }
	    else
	    {
		    GetLCD_XY(&x, &y);
		    sprintf(disp_buf, "X的坐标值是: %04d \n", x);
			UART_SendStr(disp_buf);	
			sprintf(disp_buf, "Y的坐标值是: %04d \n\n\n", y);
			UART_SendStr(disp_buf);		
			DelayNS(20);
		}
	}	
	   	return(0);
}

/*********************************************************************************************************
**                            End Of File
********************************************************************************************************/

⌨️ 快捷键说明

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