触摸屏学习

来源:互联网 发布:js 滚动字幕特效 编辑:程序博客网 时间:2024/05/30 23:04
1. 触摸屏分类
触摸屏作为一种输入设备,是目前最简单、方便的一种人机交互方式,具有坚固耐用、反应速度快、节省空间、易于交流等许多优点。
从技术原理来区别触摸屏,可分为5类:
1.电阻式触摸屏
2.电容式触摸屏
3.红外线技术触摸屏
4.表面声波技术触摸屏
5.矢量压力传感技术触摸屏

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

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

4.初始化步骤
1.初始化:
①设置AD转换时钟
②中断屏蔽设置
③进入等待中断模式(按下)
2.TC中断处理(按下)
①启动XY坐标自动转化
②等待转化完成,获取坐标
③清除中断
④进入等待TC中断模式(弹起)
⑤清除弹起中断
⑥进入等待中断模式(按下)


  1. #define ADCCON (*(unsigned long*) 0x58000000)
  2. #define ADCTSC (*(unsigned long*) 0x58000004)
  3. #define ADCDAT0 (*(unsigned long*) 0x5800000C)
  4. #define ADCDAT1 (*(unsigned long*) 0x58000010)

  5. #define SRCPND (*(unsigned long*) 0X4A000000)
  6. #define INTMSK (*(unsigned long*) 0X4A000008)
  7. #define INTPND (*(unsigned long*) 0X4A000010)
  8. #define SUBSRCPND (*(unsigned long*) 0X4A000018)
  9. #define INTSUBMSK (*(unsigned long*) 0x4A00001C)

  10. int xdata, ydata;

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

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

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

  20. }

  21. void tc_handler()
  22. {
  23.     //1. 启动XY坐标自动转换
  24.     ADCTSC = (1<<2);
  25.     ADCCON |= (1<<0);

  26.     //2. 等待转化完成
  27.     while(!(ADCCON & (1<<15)));

  28.     //3. 获取坐标
  29.     xdata = ADCDAT0 & 0X3FF;
  30.     ydata = ADCDAT1 & 0x3FF;

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

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


  38.     while(1)
  39.     {
  40.         if(SUBSRCPND &(1<<9))
  41.             break;
  42.     }
  43.     //6. 清除谈起中断
  44.     SUBSRCPND |= (1<<9);
  45.     SRCPND = (1<<31);
  46.     INTPND = (1<<31);

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

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


差了几个或居然就起不来


<script>window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdMiniList":false,"bdPic":"","bdStyle":"0","bdSize":"16"},"share":{}};with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];</script>
阅读(63) | 评论(0) | 转发(0) |
0

上一篇:LCD学习

下一篇:GDB和coredump

相关热门文章
  • SHTML是什么_SSI有什么用...
  • 查看linux中某个端口(port)...
  • 卡尔曼滤波的原理说明...
  • shell中字符串操作
  • 关于java中的“错误:找不到或...
给主人留下些什么吧!~~