您的位置 首页 硬件

音效集成PT2314,PT2313的运用辅导

使用预编译巧妙实现AD按键程序算法常见AD电阻网络连接方式一般为下图连接方式,对于不同的应用,可能电阻有所调整,如何使用宏定义实现ADC…

运用预编译奇妙完成AD按键程序算法

常见AD电阻网络衔接方法一般为下图衔接方法,关于不同的运用,或许电阻有所调整,怎么运用宏界说完成ADC值主动核算?

|
Z 10K
Z
12001000820680560 470 |
—–WW——WW—–WW——-WW——WW——WW———— >ADC
| | | | | | |
\K0\K1 \K2 \K3 \K4 \K5 \K6
| | | | | | |
= = = = = = =

为代码便于调整,现界说宏,设定每个电阻值:

//ADC 电路采样参数
#define RES_POL10//上拉电阻,单位K
#define ADC_MAX1024//ADC采样精度
//AD键盘各个电阻值,单位是K
#define RES00.01
#define RES10.47
#define RES20.56
#define RES30.68
#define RES40.82
#define RES51.00
#define RES61.20
#define RES71.50
#define RES81.80
#define RES92.20
#define RES102.70
#define RES113.30
#define RES124.70
#define RES136.80
#define RES1410.0
#define RES1518.0
#define RES1633.0
#define RES1782.0

然后核算每个开关电阻累加和

#define RES_SUM0(RES0)
#define RES_SUM1(RES_SUM0+RES1)
#define RES_SUM2(RES_SUM1+RES2)
#define RES_SUM3(RES_SUM2+RES3)
#define RES_SUM4(RES_SUM3+RES4)
#define RES_SUM5(RES_SUM4+RES5)
#define RES_SUM6(RES_SUM5+RES6)
#define RES_SUM7(RES_SUM6+RES7)
#define RES_SUM8(RES_SUM7+RES8)
#define RES_SUM9(RES_SUM8+RES9)
#define RES_SUM10(RES_SUM9+RES10)
#define RES_SUM11(RES_SUM10+RES11)
#define RES_SUM12(RES_SUM11+RES12)
#define RES_SUM13(RES_SUM12+RES13)
#define RES_SUM14(RES_SUM13+RES14)
#define RES_SUM15(RES_SUM14+RES15)
#define RES_SUM16(RES_SUM15+RES16)
#define RES_SUM17(RES_SUM16+RES17)

再经过预编译运算出实践的ADC值

#define KEY_ADC0(RES_SUM0/(RES_SUM0+RES_POL)*ADC_MAX)
#define KEY_ADC1(RES_SUM1/(RES_SUM1+RES_POL)*ADC_MAX)
#define KEY_ADC2(RES_SUM2/(RES_SUM2+RES_POL)*ADC_MAX)
#define KEY_ADC3(RES_SUM3/(RES_SUM3+RES_POL)*ADC_MAX)
#define KEY_ADC4(RES_SUM4/(RES_SUM4+RES_POL)*ADC_MAX)
#define KEY_ADC5(RES_SUM5/(RES_SUM5+RES_POL)*ADC_MAX)
#define KEY_ADC6(RES_SUM6/(RES_SUM6+RES_POL)*ADC_MAX)
#define KEY_ADC7(RES_SUM7/(RES_SUM7+RES_POL)*ADC_MAX)
#define KEY_ADC8(RES_SUM8/(RES_SUM8+RES_POL)*ADC_MAX)
#define KEY_ADC9(RES_SUM9/(RES_SUM9+RES_POL)*ADC_MAX)
#define KEY_ADC10(RES_SUM10/(RES_SUM10+RES_POL)*ADC_MAX)
#define KEY_ADC11(RES_SUM11/(RES_SUM11+RES_POL)*ADC_MAX)
#define KEY_ADC12(RES_SUM12/(RES_SUM12+RES_POL)*ADC_MAX)
#define KEY_ADC13(RES_SUM13/(RES_SUM13+RES_POL)*ADC_MAX)
#define KEY_ADC14(RES_SUM14/(RES_SUM14+RES_POL)*ADC_MAX)
#define KEY_ADC15(RES_SUM15/(RES_SUM15+RES_POL)*ADC_MAX)
#define KEY_ADC16(RES_SUM16/(RES_SUM16+RES_POL)*ADC_MAX)
#define KEY_ADC17(RES_SUM17/(RES_SUM17+RES_POL)*ADC_MAX)

这样,在ADC采样运用中可设计如下数组:

UINT16 keyAdcTable1[] ={
KEY_ADC0,
KEY_ADC1,
KEY_ADC2,
KEY_ADC3,
KEY_ADC4,
KEY_ADC5,
KEY_ADC7,
KEY_ADC8,
KEY_ADC9,
KEY_ADC10,
KEY_ADC11,
KEY_ADC12,
KEY_ADC17,
};

经过查表法可便利的取得当时某个按键是否按下。

此法在运算上没有特别之处,仅仅奇妙使用C的预编译处理,美化代码,一起简练了操作过程,惯例的固定值核算方法假如某个电阻发生变化,需求调整后续一系列ADC核算值,十分不便利,如有更奇妙算法,欢迎评论!

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qianrushi/yingjian/268347.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部