打印
[ZLG-ARM]

ARM嵌入式系统实验教程(三)触摸屏实验

[复制链接]
1750|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
rpqhy|  楼主 | 2007-1-21 21:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
周老师,我想问的代码如下:
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;
///问题1、上面这一句是还是进行六次数据采集的条件判断语句啊?
///我不明白的是:vy_dat不是坐标值吗,怎么变成次数了??

///师兄叫我看ADS7843_WriteRead里面写什么,我看不大懂。只知道里面
///只返回了ret_dat值。应该就是坐标值吧....
///问题2、顺便问问,初学者用不用看到驱动里到底写什么?什么时候看最合适?

        
        if(vx_dat>vx_dat1)
        {   
            if((vx_dat-vx_dat1) > 32) continue;      
///问题3、32怎么得到的?是多次实验得出的,还是大概的。。。。
        }
        else
        {   
            if((vx_dat1-vx_dat) > 32) continue; 
        }
        
        if(vy_dat>vy_dat1) ///
        {   
            if((vy_dat-vy_dat1) > 64) continue;    
///问题4、假如是大概,那64呢?
        }
        else
        {   
            if((vy_dat1-vy_dat) > 64) continue; 
        } 
        
        *vx = (vx_dat+vx_dat1) >> 1
///此处是不是指右移一位相当于除以10(即十进制的2)???
///即得到用户点的坐标的平均值
        *vy = (vy_dat+vy_dat1) >> 1; 
        
        return;                        
    }
    
}
各位看官要是知道的话也请回答一下菜鸟的问题,浪费你们宝贵时间了,麻烦了~~!有些问题我也不敢乱确定,就多问了几句!

相关帖子

沙发
lymbgd| | 2007-1-21 21:57 | 只看该作者

我的理解

ARM嵌入式系统实验教程(三)触摸屏实验 

周老师,我想问的代码如下:
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;
///问题1、上面这一句是还是进行六次数据采集的条件判断语句啊?
///我不明白的是:vy_dat不是坐标值吗,怎么变成次数了??

回答:2次采集,如果y坐标值小于3......

///师兄叫我看ADS7843_WriteRead里面写什么,我看不大懂。只知道里面
///只返回了ret_dat值。应该就是坐标值吧....
///问题2、顺便问问,初学者用不用看到驱动里到底写什么?什么时候看最合适?

        
        if(vx_dat>vx_dat1)
        {   
            if((vx_dat-vx_dat1) > 32) continue;      
///问题3、32怎么得到的?是多次实验得出的,还是大概的。。。。
回答:应该是大概吧
        }
        else
        {   
            if((vx_dat1-vx_dat) > 32) continue; 
        }
        
        if(vy_dat>vy_dat1) ///
        {   
            if((vy_dat-vy_dat1) > 64) continue;    
///问题4、假如是大概,那64呢?
回答:因为屏尺寸是240*320的
        }
        else
        {   
            if((vy_dat1-vy_dat) > 64) continue; 
        } 
        
        *vx = (vx_dat+vx_dat1) >> 1
///此处是不是指右移一位相当于除以10(即十进制的2)???
///即得到用户点的坐标的平均值
回答:是的
        *vy = (vy_dat+vy_dat1) >> 1; 
        
        return;                        
    }
    
}
 
 

使用特权

评论回复
板凳
rpqhy|  楼主 | 2007-1-23 17:33 | 只看该作者

楼上的朋友回答得和我想的一样哦

只不过那个实验指导书上是写六次数据采集的,看来周公最近几天过年放假了。。。。只有过年后来顶顶了!


虽然回答得很大概,呵呵。不过还是感谢楼上那位朋友!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

12

帖子

0

粉丝