首页资源分类嵌入式开发单片机 > 基于51单片机自制触摸屏

基于51单片机自制触摸屏

已有 456763个资源

下载专区

文档信息举报收藏

标    签: 51单片机

分    享:

文档简介

基于51单片机自制触摸屏

文档预览

基于 51 单片机自制触摸屏 基于51单片机自制触摸屏 电容触摸研究 上一期我们聊到触摸技术的实现,触摸式的电子琴你有没有制作出来呢?你又有没有参考源 程序来学习触摸式琴键的编程技巧呢?如果有,你会得到更深入的启发。实际上用单片机实现电 平式触摸的原理是简单的,因为手指触摸即有电平的变化,读出电平状态就可以处理按键了。与 之相比,看上去更高级一些的电容式触摸技术就没有这么简单了,所谓的“更高级”并不是因为 它的技术实现复杂,还是指在应用上显得更文雅。电容式触摸技术可以让手指不接触到金属导线, 给用户的感觉是更安全的。因为谁也不能保证裸露在外的金属片会不会带有上千伏的电压。电容 式触摸技术的另一个优势是在产品设计方面。对于我们电子爱好者来说,找到一款适合自己 DIY 作品的外壳是很困难的,有的外壳制作高手可以在很短的时间内制作出精致又专业的外壳,可是 并不是每个人都有这样的本领。为露出微动开关而在外壳上钻孔是再平常不过的了,可是钻了孔 就很难美观了,我也一时为这个问题困惑。幸好有电容式触摸技术,可以把我们的触摸片设计在 塑料外壳的内部(外壳不能是金属的,不然电容触摸就没有效果了),外壳的表面只要贴一张标 签,写明这是触摸按键,具有什么功能就可以了。 电容式触摸技术这么好,在哪里可以得到呢?上一期我也有讲过,现在市场有专业的电容式 触摸芯片,芯片厂商已经把电容式触摸的处理集成到芯片中。这种芯片的好处就是稳定性好,不 需要二次开发就可以直接使用。芯片上都会留有各种接口,或与单片机连接或驱动控制电路。缺 点是价格太高而且不易买到,与触摸芯片的好处相比,缺点好像是致命的。如果不能在一般的电 子市场里买到,或者一片4键触摸芯片要花30块钱购买,那么又会有多少爱好者朋友真的可以轻 松拥有呢?那么,能不能有更好的替代方案,我们可不可以用其他方法实现电容式触摸操作呢? 为了用单片机实现精简电路的电容式触摸操作,我是下了不少功夫的。结果很让我满意,心 血没有白费。首先我研究了一下电容式触摸技术的实现原理。因为我需要从原理角度入手,看看 在同一原理的情况下有没有什么方法可以用单片机模拟触摸芯片。上一期我们也简单地介绍过电 容式触摸技术的原理,其实就是利用了电容通交流阻直流的特性,把手指和触摸片当成电容器的 两个极片,手指和触摸片之间的绝缘材料就是电容器中的隔离介质。对了,另外还需要一个交流 信号源的接触片,让它与信号输入的触摸片平行放置。当手指按到触摸区域时,一个交流回路就 形成了。触摸片输入端可以收到与交流信号源相同的信号,这一信号的特性随着手指触摸面积和 绝缘介质的厚度和材质而变化。看到这一原理,我闭上眼睛,用想象力构建一个单片机实验平台, 用 PWM 功能产生交流信号,再用 ADC 功能作为触摸片输入端的信号读取,用给单片机下载的 RS232 串口和串口助手软件在电脑上显示出 ADC 接收到的数据。 嗯,这个想法是可行的,于是我开始行动,把想象的实验用实际的电路组建。这次依然使用了 我所熟悉的 STC 单片机,STC12C5A60S2具有2路 PWM 输出和8路10位 ADC 功能,完全可以满 足我的实验需要。电脑上直接用 STC-ISP 软件自带的串口帮助软件就可以显示十六进制的数据 了。我在自己的网站里找到 ADC 和 PWM 功能的编程模板,新建立一个 KEIL 工程,开始移植 模板、设计程序。程序很简单,就是一直读取 ADC 输入引脚的数据,从0×00到0×FF 之间即表 示0V 到5V 的电压值。PWM 输出38kHz 的方波信号,占空比调整到50%。硬件电路方面则是用 了两片金属片作触摸片,一片连接到 PWM 输出引脚,另一片连接到 ADC 输入引脚,两个触摸 片尽量靠近但不能碰上。绝缘介质没有精心选择,只是找到一张名片,这是目前可以找到的最佳 材料了。连接用的是普通的导线,先不去考虑外来的干扰问题。 一切就绪,开始实验。接通电源,单片机开始工作,串口助手的接收窗口不断显示出 ADC 的读数。在没有手指按压的时候,ADC 的读数范围是在0×20到0x70之间,数据的变化看上去没 有规律。可是当我的手指按在名片上的时候,特别是靠近 ADC 输入端触摸片的时候,ADC 的读 数是在0×10和0×FF 之间有规律地跳变,不过跳变的频率并不快。这一实验结果给了我信心,我 又继续实验,用手掌触摸、拿开名片直接接触触摸片、把名片换成玻璃片、用手触摸导线、用手 触摸单片机的引脚,把每一项实验的结果记录下来,感觉成功离我不远了。PWM 输出好像是必 须的内容,不然没有交流信号源,也就不能产生电容回路了。那么我改变 PWM 的频率,ADC 的读数会不会也随之变化呢?于是我把用 PWM 功能实现的交流输出改成了用 I/O 接口模拟,因 为这样一来,在程序上更容易控制输出方波的频率。我试着把频率从1Hz 开始慢慢调整到1kHz, 在此过程中不断地用手指触摸,看看 ADC 读数有什么变化。结果证明,变化是有的,可是不明 显,任凭方波频率怎么变换,ADC 读数一直在一个固有频率周围徘徊。于是我试着关上方波输 出,看看 ADC 读数的固有频率是不是来自方波以外的什么东西。果然,关掉交流信号输出,ADC 还是可以读到固有频率的数据,在0×10和0×FF 之间交替。当拿开名片直接触摸 ADC 输入引脚 时,0×10还会变成0×00,也就是0V。这一结果让我兴奋,因为不需要交流信号源也可以读到一 定频率的 ADC 交流数据,可是这一频率又是哪里来的呢?这个问题一直困扰着我,因为急于想 实现单片机精简电容式触摸技术,所以就没有花时间认真研究这一频率的来历。可能是50Hz 的 市电频率在人体上的干扰,或是人体自带的杂波电流独有频率。我又考虑到这种频率会不会是我 实验场地这里特有的什么干扰,于是我又去了另外一些地方做同样的实验,结果证明并不是实验 场地的问题,这一频率依然是一个未经探索的秘密。 单片机实现电容式触摸开关 电容式触摸开关实验电路原理图 对固有频率的无知并不影响制作电容式触摸操作,这是让我很开心的事情,不然我还需要做 一大堆实验来深入研究下去。当然,我以后会研究的,只是现在我最有兴趣的是实现电容式触摸。 好的,我们整理一下思路。现在我们通过实验得到了这样的结果,硬件电路上只需要一个触摸金 属片连接到单片机的 ADC 输入引脚,手指隔着名片触摸操作时,ADC 的读数会在0×10和0×FF 之间以一定的频率交替变化, 在没有手指触摸时,ADC 的读数会在0×20和0×70之间交替变化。这些数据可能在环境不同时有 所不同,但不变的是当手指触摸时 ADC 读数的变化数值会比没有触摸时大。有了这一项实验现 象作为支点,我们接下来要做的就是用单片机处理 ADC 读数,判断数值变化的规律,从而得知 是否有触发。编程并不难,每个人都可以有自己的数值处理方式。下面给出一段我编写的电容式 触摸按键的源程序,大家可以参考,但这并不是唯一的处理方式,还会有更好的方法等着你去发 现呢。 “电容式触摸开关实验”是我制作的一款简单的触摸开关,在单片机的 P1.7接口上接一个 LED,使用连接在 P1.0接口上的触摸片来控制 LED 的亮或灭。你可以直接制作这个触摸开关, 以此了解电容式触摸的性能。当然,这也是一个很好的实例,参考电路原理图和源程序就可以了 解其工作原理。只要在源程序上稍微修改就可以制作属于你自己的电容式触摸作品了。在制作电 容式触摸操作作品的时候需要注意一些问题,这些问题并不是从什么专业机构找来的资料,而是 我通过实验总结出来的经验,仅供大家参考。另外,对于没有交流信号源参与的电路是否可靠我 还没有研究,这一制作是在我的几个实验环境下完成的,并不能表示在你的环境里也可以实现。 本文介绍的电容式触摸技术仅算是抛砖引玉,也是大家和我一起共同验证的过程,看看我还有哪 些没有考虑周全的地方。欢迎读者朋友把你的想法和建议与我交流,我真的很希望和大家一起把 这项技术改进到和专业的触摸芯片媲美。 注意事项: ◆ ADC 读数和 ADC 位数、采集速度具有一定关系。 ◆ 使用电池供电和使用市电供电时 ADC 的读数也有区别。 ◆ 使用电池供电时电容式触摸的灵敏度较市电供电时低。 ◆ 不用绝缘介质下 ADC 读数变化有所不同。 ◆ 连接 ADC 输入端的触摸片的面积也会影响电容式触摸的灵敏度。 ◆ ADC 读数只是在某一个数值的区间,为了判断可靠,需要设计防误判程序。 细心的朋友可能注意到了,我在源程序中 ADC 读数部分加入了防误判程序,实践证明这 是非常有必要的。其实防误判程序就是通过连续多次读取 ADC 数值,然后把多次读到的结果进 行对比。如果有外部干扰或是 ADC 读数错误,在这个对比的过程中就会被发现,即达到防干扰、 防误判的作用。电容式触摸开关实验的源程序文件请到《无线电》杂志网站上下载。 防误判部分源程序 /****************************************************************************** 函数名:触摸按键处理函数 调 用:? = Read_R (); 参 数:无 返回值:bit 1表示有感应物,0表示没有感应物 结 果: 备 注:需要根据实现应用调协灵敏度和其他参数 /*****************************************************************************/ bit Read_R (void){ unsigned char R,ii,m=0,i,j,k; bit aa; for(ii=0;ii<3;ii++){ //循环检查防干扰 j=0;k=0; for(i=0;i<10;i++){ //一次采集数据的数量 DELAY_MS (3); //3毫秒延时 R = Read (0); //ADC 读取数据 if(R < 0x2F){ //此参数可调整感应灵敏度值在0x01到0x2F k++; //波谷计数加1 } if(R == 0xFF){ //ADC 读数的最大值必须等于0xFF j++; //波峰计数加1 } } if(k>1 && j>1){ //触摸波形的数量积加 m 的值 m++; }else{ m=0; //如果波形条件不符合则 m=0 } } if(m>2){ //根据 m 的数值判断是否有感应物体 aa =1; }else{ aa=0; } return(aa); //将 aa 作为返回值 } /*****************************************************************************/ 制作 mini48定时器 虽然上文介绍了这么多关于电容式触摸技术的内容,可是我们下面要完成的制作却是使用了 电平式触摸技术。因为电容式触摸的设计还没有成熟,还有可改进的空间。另外我手上目前还没 有什么基于电容式触摸技术的作品,虽然我正在开发的 mini3216准备使用电容式触摸按钮,可 是 mini3216的创新重点并不是电容式触摸,而是比电容式触摸更好的设计。为难之下,我将 mini48 定时器作为这一期的制作实例。尽管是电平式触摸,但 mini48的精巧设计定会给你带来创新的 启发。Mini48定时器依然是我的精简电路设计风格,它的设计理念延续了 mini1608,又另有独特 之处。电池盒、单片机、晶体、电容、蜂鸣器、数码管,几种元器件打造简单的定时器制作,我 相信这是你所见过的最简单的定时器制作。Mini48采用4位共阳一体数码管,用来显示定时值的 小时和分钟,最大定时时间是23小时59分。时间到时蜂鸣器会鸣响,提示用户定时时间到。如果 鸣响1分钟依然没有关闭电源,单片机就会进入掉电模式,在此模式下系统几乎不耗电。时间的 设定没有采用传统的微动开关,而是采用了电平式触摸技术,当手指触摸数码管各位上方对应的 单片机引脚时,定时值就会加1,设置简单,操作还很有趣。电路设计方面没有使用 PCB 板,而 是将单片机与数码管直接焊接在一起,这也得益于元器件特有的结构,诸多创新设计都来源于发 现元器件结构和性能方面的巧合。 所需元器件 元器件清单 品名 型号 单片机 STC11L60XE 晶体 12MHz 电容 30pF 电池盒 2节5号(AA) 蜂鸣器 5V 无源 LED 数码管 SR430563K 数量 1 1 2 1 1 1 说明 可用 STC12C5A60S2等5V 单片机代替 电池盒上要带有开关 可用压电陶瓷片代替 4位共阳动态显示 电路原理图 好了,闲言少讲,开始行动吧。文中使用的是 STC11L60XE,这是一款3V 电压的单片机, 可以用2节5号(AA)电池供电。如果你买不到3V 单片机,也可以使用 STC11F60XE 或者 STC12C5A60S2系列等5V 的单片机代替,当然电源也要跟着换成3节5号电池。不能用89C51系列 单片机代替,因为89系列的单片机比较古老,不能实现电平式触摸。蜂鸣器要购买那种无源的, 如果你想减小体积也可以用压电陶瓷片代替。数码管需要是4位共阳的指定型号,其实就是引脚 定义要一致,数码管的体积过大或过小都不能正好焊接在单片机上,所以这个部分一定要注意。 第1步:将12MHz 晶体和30pF 电容按电路原理图焊接在单片机背面的引脚上。让单片机具有外 部精准时钟源,这样可以产生准确的定时器时间。在我写这篇文章时听说 STC 公司新推出一款 15C 系列单片机,它的内部 R/C 振荡器是高精度的,可以完全省去外部的时钟晶体。如果以后有 机会把 mini48的单片机改成15C 系列的话,我们就可以省去这一步,不需要焊接晶体和电容了。 第2步:把电池盒上自有的导线焊接在蜂鸣器上,并把焊接处用热缩管包好。注意无源蜂鸣器也 是分正、负极的,不要接反。这样的焊接并不是最终的电路,一会我们还要把导线从中间剪断。 第3步:把电池盒正极的导线(红线)并联在单片机的第40脚上。负极的导线剪断,电池盒一端 焊接在单片机的第20脚上,蜂鸣器一端焊接在单片机的第1脚上。如此焊接之后,电池盒、单片 机、蜂鸣器三者仍然保持了原来的结构。 第4步:把数码管直接焊接在单片机上。奇妙的是数码管的引脚正好和单片机的引脚相对应,好 像是为其量身定做的一样。单片机 I/O 接口采用推挽输出方式,可以直接驱动数码管显示,不需 要驱动电路。程序上采用逐点扫描方式,省去了限流电阻,并保证数码管上的各段码亮度一致。 数码管上方对应的单片机引脚正好设计成电平式触摸按键,省去了微动开关,让设计更加简洁。 第5步:打开电源开关,系统初始从3分钟开始倒计时。触摸小时和分钟各位上方对应的单片机 引脚就可以将此位加1,加到9时返回到0,从而调整定时时间。 Mini48制作时需要注意以下事项: 在向 mini48写入 HEX 文件时,需要在 STC-ISP 软件中设置 RET 为 P4.7接口,否则数码管 不能正常显示。如果使用与本文中引脚定义不同的数码管,需要在 mini48源程序中修改引脚定 义,否则不能代替使用。STC 单片机内部具有静电保护电路,所以直接触摸引脚不会出现静电 损坏芯片的情况。 触摸技术在电子产品中的应用已经很成熟了,可是在电子爱好者的圈子里却还是个新鲜玩 意。对于电平式和电容式触摸技术,我所做的研究仍然不够。本文只是希望用我们电子爱好者现 有的技术和材料实现与专业触摸芯片同等的性能,让触摸技术可以在电子爱好者的圈子里兴起。 让更多的朋友对单片机实现触摸技术产生兴趣,从而让更多的人研究它,让它成熟起来,让我们 在微动开关、薄膜键盘之外多出一个选项。让触摸技术的普及带动电子制作的创新,让我们这群 废寝忘食的电子爱好者们玩得更新颖、更时尚。

Top_arrow
回到顶部
EEWORLD下载中心所有资源均来自网友分享,如有侵权,请发送举报邮件到客服邮箱bbs_service@eeworld.com.cn 或通过站内短信息或QQ:273568022联系管理员 高进,我们会尽快处理。