最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

嵌入式触摸屏实验

来源:动视网 责编:小OO 时间:2025-09-24 10:01:20
文档

嵌入式触摸屏实验

触摸屏实验一、实验目的1.了解触摸屏的基本概念与原理。2.理解触摸屏工作原理。二、实验设备计算机;博创UP-3000实验箱三、实验步骤1.新建工程,将“\\3000的ADS实验\\Exp8触摸屏实验”中的文件添加到工程中。2.定义头文件中的宏定义。3.阅读触摸屏读取触摸点x,y电压值、坐标程序,画出流程图。4.编写触摸点坐标及动作判断函数U32TchScr_GetOSXY(int*x,int*y),返回值为触摸动作,画出程序流程图。5.提高部分:与LCD结合,实现手写板功能,在触摸屏上画线,在
推荐度:
导读触摸屏实验一、实验目的1.了解触摸屏的基本概念与原理。2.理解触摸屏工作原理。二、实验设备计算机;博创UP-3000实验箱三、实验步骤1.新建工程,将“\\3000的ADS实验\\Exp8触摸屏实验”中的文件添加到工程中。2.定义头文件中的宏定义。3.阅读触摸屏读取触摸点x,y电压值、坐标程序,画出流程图。4.编写触摸点坐标及动作判断函数U32TchScr_GetOSXY(int*x,int*y),返回值为触摸动作,画出程序流程图。5.提高部分:与LCD结合,实现手写板功能,在触摸屏上画线,在
触摸屏实验

一、实验目的

1.了解触摸屏的基本概念与原理。

2.理解触摸屏工作原理。

二、实验设备

计算机;博创UP-3000实验箱

三、实验步骤

1.新建工程,将“\\3000的ADS实验\\Exp8 触摸屏实验”中的文件添加到工程中。

2.定义头文件中的宏定义。

3.阅读触摸屏读取触摸点x,y电压值、坐标程序,画出流程图。

4.编写触摸点坐标及动作判断函数U32 TchScr_GetOSXY(int *x, int *y),返回值为触摸动作,画出程序流程图。

5.提高部分:与LCD结合,实现手写板功能,在触摸屏上画线,在LCD上显示出来。

6.提高部分:与LCD结合,实现按钮功能,在LCD上画一矩形按钮,点击该按钮,实现某个操作。

程序流程图,程序源代码及注释和程序运行结果(截屏)。

触摸点坐标判断函数:

U32 TchScr_GetOSXY(int *x, int *y)

{//获得触摸点坐标并返回触摸动作

    static U32 mode=0;

    static int oldx,oldy;

    int i,j;

for(;;){

    if((mode!=TCHSCR_ACTION_DOWN) && (mode!=TCHSCR_ACTION_MOVE)){

            if(!TCHSCR_IsPenNotDown){//有触摸动作

                TchScr_GetScrXY(x, y,TRUE);//得到触摸点坐标

                for(i=0;i<40;i++){

                    if(TCHSCR_IsPenNotDown)//抬起

                        break;

                    Delay(100);

                }

                if(i<40){    //在规定的双击时间之内抬起,检测是不是及时按下

                    for(i=0;i<60;i++){

                        if(!TCHSCR_IsPenNotDown){

if (i<10) {i=60;break;}//如果单击后很短时间内按下,不视为双击

                                

                            mode=TCHSCR_ACTION_DBCLICK;

                            for(j=0;j<40;j++) Delay(100);//检测到双击后延时,防止拖尾

                            break;

                        }

                        

                    Delay(100);

                    }

                    if(i==60)        //没有在规定的时间内按下

                        mode=TCHSCR_ACTION_CLICK;

                }

                else{    //没有在规定的时间内抬起

                    mode=TCHSCR_ACTION_DOWN;

                }

                  

              break;

            }

        }

        else{

            if(TCHSCR_IsPenNotDown){    //抬起

                mode=TCHSCR_ACTION_UP;

                *x=oldx;

                *y=oldy;

                return mode;

            }

            else{

                TchScr_GetScrXY(x, y,TRUE);

                if(ABS(oldx-*x)>4 ||ABS( oldy-*y)>4){//有移动动作

                    mode=TCHSCR_ACTION_MOVE;

                    break;

                }

            }

        }

        Delay(50);

    }

    oldx=*x;

    oldy=*y;

    //编写该函数    

    return mode;

}

画线函数:

void TchScr_Test()

{

    U32 mode1,mode2;

    int x1,y1,x2,y2,i,j,p,q;

    float k;

    Uart_Printf("\\nplease touch the screen\\n");

    //画直线

    for(;;){

        mode1=TchScr_GetOSXY(&x1, &y1);//获得触摸点坐标并返回触摸动作

        if(mode1==TCHSCR_ACTION_CLICK)

        {    Uart_Printf("Action=click:x=%d,\y=%d\\n",x1,y1);    

            Delay(1000);

            Uart_Printf("please touch another click");

            mode2=TchScr_GetOSXY(&x2, &y2);//获得触摸点坐标并返回触摸动作

            Uart_Printf("Action=click:x=%d,\y=%d\\n",x2,y2);    

            Delay(1000);

            if(x1==x2) //无斜率情况

            {

                for(i=y1;i<=y2;i++)

                { 

                    LCDBuffer[i][x1]=0x0000e000;        

                }

                    

            }

         else if(abs(x1-x2)>=abs(y1-y2))

                 {

                     k=(y2-y1)/(x2-x1);

                 if(x1                    {

                     for(j=x1;j<=x2;j++)

                            {

                             i=(int)(y1+k*(j-x1));

                             LCDBuffer[i][j]=0x0000e000;

                            }

                    }

                    else{     

                         for(j=x2;j<=x1;j++)

                            {

                                i=(int)(y1-k*(x1-j));

                                LCDBuffer[i][j]=0x0000e000;

                            }

                        }

                    }

            else{

                    k=(y2-y1)/(x2-x1);

                 if(y1                    {

                     for(i=y1;i<=y2;i++)

                        {

                            j=(int)(x1+(i-y1)/k);

                            LCDBuffer[i][j]=0x0000e000;

                        }

                    }

                    else{

                         for(i=y2;y<=y1;y++)

                            {

                                j=(int)(x1-(y1-i)/k);

                                LCDBuffer[i][j]=0x0000e000;

                            }

                        }

                }

        LCD_Refresh();            

        }

    }

}

矩形按键控制步进电机函数:

void TchScr_Test()

{

    U32 mode,mode1,mode2;

    int x,y,x1,y1,x2,y2,i,j,p,q;

    float k;

        //////////////A,        AB,    B,    BC,    C    CD,        D,    DA

    int stepdata[]={0x10,0x30,0x20,0x60,0x40,0xc0,0x80,0x90};//正向转动时的位控制数组

    int stepdata1[]={0x90,0x80,0xc0,0x40,0x60,0x20,0x30,0x10};//反向转动时的***

    Uart_Printf("\\nplease touch the screen\\n");

    //控制电机

    for(i=70;i<=120;i++)

     for(j=150;j<=210;j++)

        {

            LCDBuffer[i][j]=0x0000e000;

        }

    LCD_Refresh();

    for(;;)

    {

        mode=TchScr_GetOSXY(&x,&y);

     if(x>=150&&x<=210&&y>=70&&y<=120)//区域判断

        {

            

if(mode==TCHSCR_ACTION_CLICK)//单击正转

            {

            for(j=0;j<20000;j++)//设置转动次数,尽量大会效果明显

            {

                for(i=0;i<8;i++)//步距角为360/512/8,所以即使四相步机转一次也不会有明显转动现象

                {

                    SETEXIOBITMASK(stepdata[i],0xF0);//通过宏定义空位EXIO的高四位来控制步进机正向转动

                    Delay(3000);

                }

            }

            }

            else if(mode==TCHSCR_ACTION_DBCLICK)//双击反转

            {

            for(j=0;j<20000;j++)

            {

         for(i=0;i<8;i++)

                {

                    SETEXIOBITMASK(stepdata1[i],0xF0);//反向转

                    Delay(3000);

                }

            }

            }

        }

    }

}

结果截图:

四、实验心得

通过本次实验,了解的触摸屏的基本实现原理,我们所用的实验箱的触摸屏为电阻式,基本原理是检测触摸点被压下后的电压值来返回坐标,还有一种触摸屏为电容式。编程时应注意,由于每个触摸屏对检测电压有偏值差,所以,获取点坐标操作之前,要对点坐标进行校正处理。另外,画线时应注意直线斜率的处理,应以差值较大的坐标值为准确定另一点坐标,否则会出现点状线。此外,触摸屏返回的是坐标值(x,y),x,y分别对应横坐标和纵坐标,而在画线时则分别对应列值与行值。

六、流程图

文档

嵌入式触摸屏实验

触摸屏实验一、实验目的1.了解触摸屏的基本概念与原理。2.理解触摸屏工作原理。二、实验设备计算机;博创UP-3000实验箱三、实验步骤1.新建工程,将“\\3000的ADS实验\\Exp8触摸屏实验”中的文件添加到工程中。2.定义头文件中的宏定义。3.阅读触摸屏读取触摸点x,y电压值、坐标程序,画出流程图。4.编写触摸点坐标及动作判断函数U32TchScr_GetOSXY(int*x,int*y),返回值为触摸动作,画出程序流程图。5.提高部分:与LCD结合,实现手写板功能,在触摸屏上画线,在
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top