- 1、本文档共5页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基于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所示。按键
转换电压(V)
AD转换值(理论)
无
0
$00
S0
0.156
$08
S1
0.469
$18
S2
0.781
$28
S3
1.094
$38
S4
1.406
$48
S5
1.719
$58
S6
2.031
$68
S7
2.344
$78
S8
2.656
$88
S9
2.969
$98
S10
3.281
$A8
S11
3.594
$B8
S12
3.906
$C8
S13
4.219
$D8
S14
4.531
$E8
S15
4.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,并且设置为上沿触发后使能中断。然后睡去。2、在IO的中断服务程序中转换该P口为SEL=1,变为AD的输入端。3、启动参考源,并从端口输出
文档评论(0)