触摸屏的使用

触摸屏工作原理

触摸屏的分类
触摸屏作为一种输入设备,是目前最简单、方便的一种人机交互方式,具有坚固耐用、反应速度快、节省空间、易于交流等许多优点。

从技术原理来区别触摸屏,可分为5类:
1.电阻式触摸屏
2.电容式触摸屏
3.红外线技术触摸屏
4.表面声波技术触摸屏
5.矢量压力传感技术触摸屏

电阻屏工作原理
触摸屏的使用_第1张图片
当手指触摸屏幕时,两个相互绝缘的导电层在触摸点处连接,顶层的5伏电压就会加到底层触摸点处,底层该点的电压会发生改变。
控制器检测到该点的变化后,将该点的电压进行A/D转换,得到的值与5伏相比,再乘以该轴总长度即可得触摸点靠地那一端的坐标。

电容屏原理
触摸屏的使用_第2张图片
相比于电阻屏,电容屏的优点是感应灵敏,支持多点触摸,更适合现代电子产品的需求。
给工作面通上一个很低的电压,当用户触摸屏幕时,手指头吸收走一个很小的电流,这个电流分从触摸屏四个角上的电极中流出,并且理论上流经这四个电极的电流与手指到四角的距离成比例,控制器通过对这四个电流比例的精密计算,得出触摸点的位置。

电阻屏代码编写

int xdata,ydata;

#define ADCCON    (*(volatile unsigned *)0x58000000)   //ADC control
#define ADCTSC    (*(volatile unsigned *)0x58000004)   //ADC touch screen control
#define ADCDLY    (*(volatile unsigned *)0x58000008)   //ADC start or Interval Delay
#define ADCDAT0   (*(volatile unsigned *)0x5800000c)   //ADC conversion data 0
#define ADCDAT1   (*(volatile unsigned *)0x58000010)   //ADC conversion data 1

/*interrupt registes*/
#define SRCPND      (*(volatile unsigned long *)0x4A000000)
#define INTMSK      (*(volatile unsigned long *)0x4A000008)
#define INTOFFSET   (*(volatile unsigned long *)0x4A000014)
#define SUBSRCPND   (*(volatile unsigned long *)0x4A000018)
#define INTSUBMSK   (*(volatile unsigned long *)0x4A00001c)
#define INTPND      (*(volatile unsigned long *)0x4A000010)

void ts_init()
{
    //1. 设置AD转换时钟
    ADCCON = (1<<14) | (49<<6);

    //2. 设置中断屏蔽位
    INTMSK = ~(1<<31);
    INTSUBMSK = ~(1<<9);

    //3. 进入等待中断的模式
    ADCTSC = 0xd3;
}

void tc_handler()
{   
    //1. 启动xy坐标自动转换 
    ADCTSC = (1<<2);
    ADCCON |= (1<<0);

    //2. 等待转换完成
    while (!(ADCCON & (1<<15)))

    //3. 获取坐标
    xdata = ADCDAT0 & 0x3ff;
    ydata = ADCDAT1 & 0x3ff;

    //4. 清除按下中断
    SUBSRCPND |= (1<<9);
    SRCPND = (1<<31);
    INTPND = (1<<31); 

    //5. 进入等待弹起中断
    ADCTSC = 0xd3;
    ADCTSC |= (1<<8);

    while(1)
    {
        if(SUBSRCPND &(1<<9))   
            break;
    }

    //6. 清除弹起中断
    SUBSRCPND |= (1<<9);
    SRCPND = (1<<31);
    INTPND = (1<<31); 

    printf("x is %d,y is %d\n",xdata,ydata);

    //7. 再次进入等待按下中断的状态
    ADCTSC = 0xd3;
}

你可能感兴趣的:(触摸屏的使用)