一线AD键盘设计
杨红;李生明;冯如进
【摘 要】在单片机系统设计时,键盘是经常用到的输入设备,传统的矩阵式键盘端口占用量大,本文将键盘与AD转换器结合,提出了一种基于AD转换的一线AD键盘设计方法,在系统开发时,它只需占用单片机的一根IO端口,相比传统键盘具有明显的优势.
【期刊名称】《清远职业技术学院学报》 【年(卷),期】2017(010)006 【总页数】3页(P36-38)
【关键词】一线键盘;单片机;ADC 【作 者】杨红;李生明;冯如进
【作者单位】清远职业技术学院 机电与汽车工程学院,广东清远511510;清远职业技术学院 机电与汽车工程学院,广东清远511510;清远职业技术学院 机电与汽车工程学院,广东清远511510 【正文语种】中 文 【中图分类】TP391.9
键盘是单片机系统开发过程经常会用到的一个输入设备,按设计原理划分,可以分为独立式按键和矩阵式键盘。当设计按键较少时可以采用独立式按键,此时占用的单片机端口也不多,每个按键占用一根单片机口线,硬件简单、编程工作量也不大;
但是,当设计的按键数量较多时,会导致单片机的端口紧张,此时再使用独立式按键就不再合理了,通常会采用矩阵式键盘,如4*4的矩阵键盘可以设计出16个按键,而只用到8根单片机口线。如果还想降低矩阵式键盘的口线占用量,是否有更好的办法呢?本文提出一种一线AD式键盘的设计方法,按键数量的增加不会增加单片机口线的占用量,它总是占用一根线,即一线AD键盘。 1 一线AD键盘设计基本原理
原理图如图1所示,Vrv接到单片机的AD输入引脚上。当不同的按键按下时在Vrv上得到不同的电压,经过单片机内部的AD转换,得到不同的数字量值,从而判别是哪一个按键按下了[1]。当每一个按键上的电阻确定后,线上的电压就确定了,因此当单片机检测到一个AD值后就可以通过程序判断找出按下的按键,当然,按键上的电阻是各不相同的。 图1 一线AD键盘原理图 2 一线AD值设计
由上述原理可知,如果单片机的AD是8位的,理论上一个引脚最多可接256个按键,10位AD可以接1024个按键。那实际上真的能接那么多按键吗?不是的,因为电源、电阻值都会有误差,Vrv上的电压不会是一个精准的值,它只会是一个范围[2]。具体分析如下:
以供电电源5V、10位AD为例,将5V等分成1024个连续点组成,由于电压会飘动,采用64个连续点捕捉一个按键,可列出如下AD值:
表1 按键序号 10位ADC(数字值ADiv)0 000 1 064 2 128 3 192 4 256 5 320 6 384 7 448 8 512 9 576 10 640 11 704 12 768 13 832 14 896 15 960 ∴AD理想的模拟值:Viv=(按键序号/16)×Vref
注:Vref是基准电压,这里就是5V,Viv是理论电压,用这个函数只要把按键序号带进去,就可以计算出该按键的理论电压值。
3 设定理论值的上下限(误差范围)
按上述64等分划分,取中间值作为理论值的上下限值(误差范围),如图2所示。 图2 AD数字量误差范围
理论值下限值误差:Δ1=32/64=0.5=50% 理论值下限值误差:Δ2=96/64=1.5=150% ∴ Δ=(1±50)%
∴实际电压允许误差范围:Vrv=Viv×(1±50%) 实际 AD 允许误差范围:ADrv=ADiv×(1±50%)
由公式Viv=(按键序号/16)×Vref可计算出如下表的电压理想值。 根据以上分析,捕捉KEY1按键的参考程序如下: if((ADC>32)&&(ADC<=96)) return KEY1;//返回按键序号
捕捉其它按键的原理和程序架构相同。由于理论上要捕捉KEY1按键只是采集到第64个点就可以,但实际上很少会只出现第64个点,多数都在64左右飘动,这也是取上下限值的意义[3]。
表2 一线AD取值参考表按键序号 ADC检测范围(10位ADC) 理想值Viv(V)(Vr ef=5V)0 0 0 1 (1±50%)×64 0.3125 2 (1±50%)×128 0.625 3 (1±50%)×192 0.9375 4 (1±50%)×256 1.25 5 (1±50%)×320 1.5625 6 (1±50%)×384 1.875 7 (1±50%)×448 2.1875 8 (1±50%)×512 2.5 9 (1±50%)×576 2.8125 10 (1±50%)×640 3.125 11 (1±50%)×704 3.4375 12 (1±50%)×768 3.75 13 (1±50%)×832 4.0625 14 (1±50%)×896 4.375 15 (1±50%)×960 4.6975 4 一线AD按键电阻参数设计
根据图2按键电路架构计算,单片机采用10位ADC,取上拉电阻R0为10K,采
用5V供电,KEY1按键AD值为64,从一线AD取值参考表中取AD值为64对应的电压0.3125V[4]。
根据分压原理,列出如下表达式:
表3 按键序号理想值Viv(V)(Vr ef=5V)下拉电阻值Ω(理论)下拉电阻值Ω(实际选用)0 0 0 0 1 0.3125 625 619 2 0.625 1250 1240 3 0.9375 1875 1870 4 1.25 2500 2490 5 1.5625 3125 3160 6 1.875 3750 3740 7 2.1875 4375 4320 8 2.5 5000 5110 9 2.8125 5625 5620 10 3.125 6250 6190 11 3.4375 6875 6810 12 3.75 7500 7500 13 4.0625 8125 8250 14 4.375 8750 8870 15 4.6975 9395 9310
经查E96系列电阻表没有找到625Ω电阻(代表在市场上买不到这个电阻),电阻接近的有619Ω电阻。经过验算,采用此标称电阻,在KEY1按下时产生的AD值在上述分析的误差范围内,对电路和程序都没有影响[5]。用同样的方法可以计算出其它按键的下拉电阻值,结果如表3所示。 5 结束语
经过上述综合分析和实际程序测试,该一线AD键盘程序判断按键准确、稳定,设计方法正确可行,其突出的优点是占用单片机端口少,而且,即使某个按键的电阻损坏变质也只影响此按键的正常工作,不会影响其它按键,不像有些采用固定电阻逐级并联方式的一线AD键盘那样,前级并联的电阻发生变化会直接影响到后面所有按键的正常工作。本方法的不足之处是电阻值各不相同,对硬件有要求,最好是单片机内部集成有AD转换模块。
【相关文献】
[1]王静霞.单片机应用技术[M].北京:电子工业出版社,2015.
[2]郭天祥.新概念51单片机C语言教程[M].北京:电子工业出版社,2009. [3]赵亮,侯国锐.单片机C语言编程与实例[M].北京:人民邮电出版社,2003. [4]胡汉才.单片机原理与接口技术[M].北京:清华大学出版社,1998.
[5]汤竞南,沈国琴.51单片机C语言开发与实例[M].北京:人民邮电出版社,2008.
因篇幅问题不能全部显示,请点此查看更多更全内容