zoukankan      html  css  js  c++  java
  • 第二季-专题17-触摸屏显身手

    专题17-触摸屏显身手

    第1课-触摸屏工作原理解析

    1. 功能与分类

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

    从技术原理来区别触摸屏,可分为5类:

    (1)电阻式触摸屏

    (2)电容式触摸屏

    (3)红外线技术触摸屏

    (4)表面声波技术触摸屏

    (5)矢量压力传感技术触摸屏

    2. 电容屏原理

           当手指触摸屏幕时,两个相互绝缘的导电层在触摸点处连接,顶层的5伏电压就会加到底层触摸点处,底层该点的电压会发生改变。

        控制器检测到该点的变化后,将该点的电压进行A/D转换,得到的值与5伏相比,再乘以该轴总长度即可得触摸点靠地那一端的坐标。

    3. 电容屏原理

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

     

    第2课-电阻屏驱动程序设计

    1. 初始化

    (1)     设置AD转换时钟

    (2)     中断屏蔽设置

    (3)     进入等待中断模式(按下)

    1. TC中断处理(按下)

    (1)     启动XY坐标自动转化

    (2)     等待转化完成,获取坐标

    (3)     清除中断

    (4)     进入等待TCP中断模式(弹起)

    (5)     清除弹起中断

    (6)     进入等待中断模式(按下)

    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 ",xdata,ydata);

       

        //7. 再次进入等待按下中断的状态

        ADCTSC = 0xd3;

    }

     

  • 相关阅读:
    nyoj 202 红黑树
    nyoj 237 游戏高手的烦恼
    nyoj 203 三国志
    nyoj 118 修路方案
    nyoj 714 Card Trick
    nyoj 710 外星人的供给站
    nyoj 712探 寻 宝 藏
    nyoj 709 异 形 卵
    nyoj 711 最舒适的路线
    HTML5表格简单应用案例之[招聘需求表]
  • 原文地址:https://www.cnblogs.com/free-1122/p/11452218.html
Copyright © 2011-2022 走看看