AD键盘设计原理和方法.doc

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
AD键盘设计原理和方法

基于MSP430单片机的A/D键盘设计1.1 设计原理   原理图如图1-1所示,PA0为模拟电压输入口,初始化为悬浮状态。PC3~PC0初始化为输出低电平,分别接4个发光二极管,它输出的16种状态1111~0000分别表示按键S15~S0被按下。   当不同的按键被按下时,AD转换的电压不同,通过AD转换值便可以判断出是哪个按键被按下。AD转换出来的结果共有10位,在程序中取其高8位作为有效位,便可以分辨出16个按键。按键、输入电压和AD转换值(高8位)的对应关系如表1所示。 ?????????????????????图1-1 键盘显示原理图 ? 按键转换电压(V)AD转换值(理论)无0$00S00.156$08S10.469$18S20.781$28S31.094$38S41.406$48S51.719$58S62.031$68S72.344$78S82.656$88S92.969$98S103.281$A8S113.594$B8S123.906$C8S134.219$D8S144.531$E8S154.844$F8   但是,在实际中不可能得到很准确的AD转换值,这是由于存在以下几种误差:   ◆ 对于同一个电压值,AD多次转换的结果不可能完全相同。   ◆电阻的误差。电阻值由于制作以及温度的原因,误差较大,所以不可能得到很准确的分压。本例采用的电阻精度为±5%。   ◆其它干扰。   在本例中,允许AD转换值的误差范围为:±4。将该误差换算为:   每个按键的输入电压的允许误差:±(4 /256)*5.0v= ±0.078v   每个按键的分压电阻的允许误差:±(4 /256)*16000欧= ±250欧   误差示意图如图1-2所示,若按键S5被按下,经过AD转换,若实际转换值在允许误差之内,即: (理论值 -4)≤实际转换值(高8位)(理论值+4),则认为S5被按下,否则程序不响应。其它按键处理方法与此相同。   在电阻的选用时,应该非常注意电阻的累计误差。例如在图1-1中,如果电阻R0~R9均比实际值高出25欧,则累加到电阻R10时,电阻值的累计误差为250欧,则电阻值会超出允许范围,从而采到错误的电压值。   如果选用精度为±1%电阻,则可以分辨出32个按键。 ?????????????????????图1-2? AD转换值的允许误差   消抖方法:在按键闭合和打开的瞬间会产生许多尖脉冲,持续时间约几毫秒到几十毫秒。因而在程序中,当检测到按键被按下后,便开始读取键值,每隔8ms读一次键值,直到连续4次读取的键值完全相同,则认为抖动已经消除。消抖时间为8ms X 4=32ms。 ? 1.2?? 软件设计   主程序每隔8ms扫描一次键盘,并刷新一次显示。主程序流程如图1-3所示。 ???????????????????? 图1-3主流程图 1.3? 结语   利用A/D做键盘扫描,可以大大节省单片机的 IO口资源。 ? 1.4 ????? 参考电压(可以使用430输出的,但这样要占一个引脚,也可以用外接的参考源,比如TL431搭的,但这样比较耗电,至少有1mA左右。)接到一串等值的电阻上,比如由10个1K电阻(阻值仅供参考,实际上取值时应以总值为计算根据,并结合抗干扰和耗电问题得出,电阻总值越大越省电但越容易受到干扰,反之则越耗电但不容易受到干扰,另外这个电阻取值还与AD输入端上的下拉电阻值有关)串联起来,即可实现10按键。在从参考到离地最近的每个结点上接一个微动按钮到AD的输入端上(这是必须占用的引脚),并在AD输入端上对地接一支下拉比如47K或100K,然后启动AD采样,通过得到的电压值不同,只要判断它在哪段范围,则可以得到对应的按钮被按下的消息了。但注意要设定参考值,还有就是电阻误差造成AD取值的误差。所以最好是取一个区间,或是最好能有一个测试向导类的程序来帮助确定键值。 ? 那个电路图在网上看过,真是佩服,不知道是怎么想出来的.... 不过与低攻耗有些矛盾,那样做是不是必须轮寻采样.不说电流大,时间上就不合适.... 感觉键盘还是用中断的好... ? 其实不是的,我说的这种是耗电最大的方案了,可以更省电的,关键看代码了。 要省电就需要以下两步: 第一,不要用外部参考源,可以直接使用一个IO端口,从430得到参考源。 第二,不需要定时轮询,而是使用P1和P2的中断功能。注意最低的一个电阻上端电位要达到变为高电平的条件,否则不能触发中断。 接下来的完整流程就是: 1、先设置AD输入端为IO输入模式,即SEL=0、DIR=0,并且设置为上沿触发后使能中

文档评论(0)

ktj823 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档