📄 nedu_drive_tch.c.bak
字号:
/*
*********************************************************************************************************************
* 东软培训中心教学项目:基于ARM和uc/os-II的PDA系统
*
* (c) Copyright 2005, 东软培训中心
* All Rights Reserved
*
* 模块名称:驱动程序模块
* 文件名:NEDU_DRIVE_TCH.C
* 作者:朱成果
* 时间:2006年9月20日
* 版本:V0.01
**********************************************************************************************************************
*/
#include "44b.h"
#include "driven.h"
#include "maro.h"
#include "uhal.h"
#include "ucos_ii.h"
#define ADS7843_CMD_X (ADS7843_CTRL_START|ADS7843_GET_X|ADS7843_CTRL_12MODE|ADS7843_CTRL_DFR|ADS7843_CTRL_ENPWD)
//采样x轴电压值,数据为12位,参考电压输入模式为差分模式,允许省电模式
#define ADS7843_CMD_Y (ADS7843_CTRL_START|ADS7843_GET_Y|ADS7843_CTRL_12MODE|ADS7843_CTRL_DFR|ADS7843_CTRL_ENPWD)
int TchScr_Xmax=1760,TchScr_Xmin=330,
TchScr_Ymax=287,TchScr_Ymin=1775;//触摸屏返回电压值范围
extern U32 Sub_Mode;
extern U8 state;
/*
**********************************************************************************************************************
* TCHSCR_GETSCRXY
*
* 作者:北京博创兴业科技股份有限公司
*
* 时间:2004年
*
* 描述:获得触摸点坐标。
*
* 参数:*x:x坐标变量的地址;*y:y坐标变量的地址;bCal:折算成屏幕坐标请求
*
* 返回值:无
*
***********************************************************************************************************************
*/
void TchScr_GetScrXY(int *x, int *y, U8 bCal)
{//获得触摸点坐标
unsigned int temp;
rPDATF&=~ADS7843_PIN_CS;//打开ADS7843
SendSIOData(ADS7843_CMD_X);//发送读取x电压值控制字
SendSIOData(0);//等待8个时钟节拍,因为完成一转换需要16个时钟
temp=ReadSIOData();//读取采样值高8位
SendSIOData(ADS7843_CMD_X);
temp<<=8;
temp|=ReadSIOData();//读取低8位并与以前高8位组成16位数据
*x=(temp>>4);//去掉低4位,保留12位有效数据
SendSIOData(0);
temp=ReadSIOData();
SendSIOData(ADS7843_CMD_X);
temp<<=8;
temp|=ReadSIOData();
*x+=(temp>>4);
SendSIOData(0);
temp=ReadSIOData();
SendSIOData(ADS7843_CMD_X);
temp<<=8;
temp|=ReadSIOData();
*x+=(temp>>4);
SendSIOData(0);
temp=ReadSIOData();
SendSIOData(ADS7843_CMD_Y);
temp<<=8;
temp|=ReadSIOData();
*x+=(temp>>4);
*x>>=2; //采样4次取平均值
//读取y电压值
SendSIOData(0);
temp=ReadSIOData();
SendSIOData(ADS7843_CMD_Y);
temp<<=8;
temp|=ReadSIOData();
*y=(temp>>4);
SendSIOData(0);
temp=ReadSIOData();
SendSIOData(ADS7843_CMD_Y);
temp<<=8;
temp|=ReadSIOData();
*y+=(temp>>4);
SendSIOData(0);
temp=ReadSIOData();
SendSIOData(ADS7843_CMD_Y);
temp<<=8;
temp|=ReadSIOData();
*y+=(temp>>4);
SendSIOData(0);
temp=ReadSIOData();
SendSIOData(0);
temp<<=8;
temp|=ReadSIOData();
*y+=(temp>>4);
*y>>=2;
rPDATF|=ADS7843_PIN_CS;//关闭ADS7843
if(bCal){//对采样结果进行转换
*x=(*x-TchScr_Xmin)*LCDWIDTH/(TchScr_Xmax-TchScr_Xmin);
*y=(*y-TchScr_Ymin)*LCDHEIGHT/(TchScr_Ymax-TchScr_Ymin);
}
}
/*
**********************************************************************************************************************
* TCHSCR_GETOSXY
*
* 作者:朱成果
*
* 时间:2007年6月6日
*
* 描述:获得触摸点坐标。
*
* 参数:*x:x坐标变量的地址;*y:y坐标变量的地址
*
* 返回值:在坐标变量中
*
***********************************************************************************************************************
*/
void TchScr_GetOSXY(int *x, int *y)
{
while(1)
{
TchScr_GetScrXY(x, y,TRUE);
if(*x<0 || *y<0)
OSTimeDly(10);
else
{
OSTimeDly(100);
return;
}
}
}
/*
**********************************************************************************************************************
* GETMAINXY
*
* 作者:朱成果
*
* 时间:2007年6月1日
*
* 描述:确定状态机最上层坐标定位。
*
* 参数:无
*
* 返回值:主菜单选项编号
*
***********************************************************************************************************************
*/
U32 GetMainXY(void)
{
U32 kl;
int x,y;
TchScr_GetOSXY(&x, &y);
if(x>69 && x<250)
if(y>57 && y<83)
kl = DISTIME;
else if(y>95 && y<121)
kl = DISDATE;
else if(y>133 && y<159)
kl = DISREC;
else if(y>170 && y<196)
kl = SETRTC;
else if(y>209 && y<234)
kl = SETREC;
else
kl = NORMAL;
else
kl = NORMAL;
Uart_Printf("\nGetMainXY:x=%d,\ty=%d Mode=%d",x,y,kl);
return(kl);
}
/*
**********************************************************************************************************************
* GETTIMEXY
*
* 作者:朱成果
*
* 时间:2007年6月1日
*
* 描述:确定显示系统时间子状态机坐标。
*
* 参数:无
*
* 返回值:无
*
***********************************************************************************************************************
*/
void GetTimeXY(void)
{
OS_CPU_SR cpu_sr;
int x,y;
while(state != NORMAL)
{
TchScr_GetOSXY(&x, &y);
if(x>85 && x<245)
if(y>200 && y<227)
{
OS_ENTER_CRITICAL();
Sub_Mode = TCH_RETURN;
OS_EXIT_CRITICAL();
return;
}
Uart_Printf("\nGetTimeXY:x=%d\ty=%d\tState=%d",x,y,state);
OSTimeDly(500);
}
return;
}
/*
**********************************************************************************************************************
* GETDATEXY
*
* 作者:
*
* 时间:
*
* 描述:确定显示系统日历子状态机坐标。
*
* 参数:无
*
* 返回值:无
*
***********************************************************************************************************************
*/
void GetDateXY(void)
{
OS_CPU_SR cpu_sr;
int x,y;
while(state != NORMAL)
{
TchScr_GetOSXY(&x, &y);
if(x>210 && x<312)
if(y>184 && y<218)
{
OS_ENTER_CRITICAL();
Sub_Mode = TCH_RETURN;
OS_EXIT_CRITICAL();
return;
}
else if(y>146 && y<180)
{
OS_ENTER_CRITICAL();
Sub_Mode = TCH_NEXT;
OS_EXIT_CRITICAL();
return;
}
else if(y>108 && y<142)
{
OS_ENTER_CRITICAL();
Sub_Mode = TCH_PREV;
OS_EXIT_CRITICAL();
return;
}
Uart_Printf("\nGetDateXY:x=%d\ty=%d\tState=%d",x,y,state);
OSTimeDly(500);
}
return;
}
/*
**********************************************************************************************************************
* GETRECXY
*
* 作者:
*
* 时间:
*
* 描述:确定显示系统客户信息子状态机坐标。
*
* 参数:无
*
* 返回值:无
*
***********************************************************************************************************************
*/
void GetRECXY(void)
{
OS_CPU_SR cpu_sr;
int x,y;
while(state != NORMAL)
{
TchScr_GetOSXY(&x, &y);
if(x>226 && x<293)
if(y>186 && y<220)
{
OS_ENTER_CRITICAL();
Sub_Mode = TCH_RETURN;
OS_EXIT_CRITICAL();
return;
}
Uart_Printf("\nGetRECXY:x=%d\ty=%d\tSmode=%d\tState=%d",x,y,Sub_Mode,state);
OSTimeDly(500);
}
return;
}
/*
**********************************************************************************************************************
* GETSETRTCXY
*
* 作者:
*
* 时间:
*
* 描述:确定显示系统日历子状态机坐标。
*
* 参数:无
*
* 返回值:无
*
***********************************************************************************************************************
*/
void GetSETRTCXY(void)
{
OS_CPU_SR cpu_sr;
int x,y;
while(state != NORMAL)
{
TchScr_GetOSXY(&x, &y);
if(y>131 && y<214)
if(x>230 && x<292)
{
OS_ENTER_CRITICAL();
Sub_Mode = TCH_RETURN;
OS_EXIT_CRITICAL();
return;
}
Uart_Printf("\nSetRTCXY:x=%d\ty=%d\tKey=0x%x\tState=%d",x,y,Sub_Mode,state);
OSTimeDly(500);
}
return;
}
/*
**********************************************************************************************************************
* GETSETRECXY
*
* 作者:
*
* 时间:
*
* 描述:确定显示系统日历子状态机坐标。
*
* 参数:无
*
* 返回值:无
*
***********************************************************************************************************************
*/
void GetSETRECXY(void)
{
OS_CPU_SR cpu_sr;
int x,y;
while(state != NORMAL)
{
TchScr_GetOSXY(&x, &y);
if(x>12 && x<310)
if(y>140 && y<232)
{
OS_ENTER_CRITICAL();
Sub_Mode = TCH_RETURN;
OS_EXIT_CRITICAL();
return;
}
Uart_Printf("\nSetRECXY:x=%d\ty=%d\tKey=0x%x\tState=%d",x,y,Sub_Mode,state);
OSTimeDly(500);
}
return;
}
//end of nedu_drive_tch
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -