?? main.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 + -