📄 nedu_drive_tch.c
字号:
/*
*********************************************************************************************************************
* 东软培训中心教学项目:基于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;//触摸屏返回电压值范围
int x,y;//得到的接触屏的x,y的坐标
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日
*
* 描述:确定状态机最上层坐标定位。
*
* 修改: (0709)去掉局部变量x,y.直接用GetTCHXY赋的值
*
* 参数:无
*
* 返回值:主菜单选项编号
*
***********************************************************************************************************************
*/
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日
*
* 描述:确定显示系统时间子状态机坐标。
*
* 修改: (0709)去掉局部变量x,y.直接用GetTCHXY赋的值
*
* 参数:无
*
* 返回值:无
*
***********************************************************************************************************************
*/
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
*
* 作者:胡仲华 曹攀
*
* 时间:2007年7月3日
*
* 描述:确定显示系统日历子状态机坐标。
*
* 修改: (0709)去掉局部变量x,y.直接用GetTCHXY赋的值
*
* 参数:无
*
* 返回值:无
*
***********************************************************************************************************************
*/
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>140 && y<170)
{
OS_ENTER_CRITICAL();
Sub_Mode = TCH_NEXT;
OS_EXIT_CRITICAL();
}
else if(y>90 && y<120)
{
OS_ENTER_CRITICAL();
Sub_Mode = TCH_PREV;
OS_EXIT_CRITICAL();
}
}
Uart_Printf("\nGetDateXY:x=%d\ty=%d\tState=%d",x,y,state);
//OSTimeDly(500);
//}
return;
}
/*
**********************************************************************************************************************
* GETRECXY
*
* 作者:邹海英
*
* 时间:2007年7月3日
*
* 描述:确定显示系统客户信息子状态机坐标。
*
* 修改: (0709)去掉局部变量x,y.直接用GetTCHXY赋的值
*
* 参数:无
*
* 返回值:无
*
***********************************************************************************************************************
*/
void GetRECXY(void)
{
OS_CPU_SR cpu_sr;
//int x,y;
if(y>186 && y<220)
{ // changed
if(x>20 && x<80) //点击上一条
{
OS_ENTER_CRITICAL();
Sub_Mode = TCH_PREV;
OS_EXIT_CRITICAL();
}
else if(x>90 && x<150) //点击下一条
{
OS_ENTER_CRITICAL();
Sub_Mode = TCH_NEXT;
OS_EXIT_CRITICAL();
}
else if(x>160 && x<220) //点击删除/OK
{
OS_ENTER_CRITICAL();
Sub_Mode = TCH_DELETE;
OS_EXIT_CRITICAL();
}
else if(x>226 && x<293) //点击返回
{
OS_ENTER_CRITICAL();
Sub_Mode = TCH_RETURN;
OS_EXIT_CRITICAL();
}
}
while(Sub_Mode == TCH_DELETE||Sub_Mode==TCH_K_Del)
{
OSTimeDly(200);
Uart_Printf("in get del mode");
TchScr_GetOSXY(&x, &y);
if(y>126&&y<162)
{
if(x>55 && x<135) //点击上一条
{
OS_ENTER_CRITICAL();
Sub_Mode = TCH_DEL_YES;
OS_EXIT_CRITICAL();
}
else if(x>185 && x<265) //点击下一条
{
OS_ENTER_CRITICAL();
Sub_Mode = TCH_DEL_NO;
OS_EXIT_CRITICAL();
}
}
}//end while
Uart_Printf("\nGetRECXY:x=%d\ty=%d\tSmode=%d\tState=%d",x,y,Sub_Mode,state);
}
/*
**********************************************************************************************************************
* GETNORECORDXY
*
* 作者:孙周旋
*
* 时间:2007年7月10日
*
* 描述:确定无记录显示子状态机坐标。
*
* 参数:无
*
* 返回值:无
*
***********************************************************************************************************************
*/
void GetNoRecordXY(void){
OS_CPU_SR cpu_sr;
if(x>230&&x<290) //确定返回坐标
{ // changed
if(y>200 && y<230) //点击返回
{
OS_ENTER_CRITICAL();
Sub_Mode = TCH_RETURN; //子状态为返回
OS_EXIT_CRITICAL();
return;
}
}
Uart_Printf("\nGetNoRecordXY:x=%d\ty=%d\tSmode=%d\tState=%d",x,y,Sub_Mode,state);
}
/*
**********************************************************************************************************************
* GETSETRTCXY
*
* 作者:胡仲华 曹攀
*
* 时间:2007年7月9日
*
* 描述:确定显示系统日历子状态机坐标。
*
* 修改: (0709)去掉局部变量x,y.直接用GetTCHXY赋的值
*
* 参数:无
*
* 返回值:无
*
***********************************************************************************************************************
*/
void GetSETRTCXY(void)
{
OS_CPU_SR cpu_sr;
//int x,y;
//while(state != NORMAL)
//{
//TchScr_GetOSXY(&x, &y);
if(x>230 && x<292)
{
if(y>185 && y<214)
{
OS_ENTER_CRITICAL();
Sub_Mode = TCH_RETURN;
OS_EXIT_CRITICAL();
return;
}
if(y>160 && y<185)
{
OS_ENTER_CRITICAL();
Sub_Mode = TCH_K_Del; //退
OS_EXIT_CRITICAL();
}
if(y>131 && y<160)
{
OS_ENTER_CRITICAL();
Sub_Mode = TCH_K_ENTER; //确定
OS_EXIT_CRITICAL();
return;
}
}
if(y>160&&y<185)
{
if(x>50&&x<80)
{
OS_ENTER_CRITICAL();
Sub_Mode = TCH_K_1; //1
OS_EXIT_CRITICAL();
}
if(x>80&&x<110)
{
OS_ENTER_CRITICAL();
Sub_Mode = TCH_K_2; //2
OS_EXIT_CRITICAL();
}
if(x>110&&x<140)
{
OS_ENTER_CRITICAL();
Sub_Mode = TCH_K_3; //3
OS_EXIT_CRITICAL();
}
if(x>140&&x<170)
{
OS_ENTER_CRITICAL();
Sub_Mode = TCH_K_4; //4
OS_EXIT_CRITICAL();
}
if(x>170&&x<200)
{
OS_ENTER_CRITICAL();
Sub_Mode = TCH_K_5; //5
OS_EXIT_CRITICAL();
}
}
if(y>185&&y<210)
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -