新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 音效集成PT2314,PT2313的使用指導

        音效集成PT2314,PT2313的使用指導

        作者: 時間:2016-11-17 來源:網絡 收藏
        使用預編譯巧妙實現AD按鍵程序算法

        本文引用地址:http://www.104case.com/article/201611/315489.htm

        常見AD電阻網絡連接方式一般為下圖連接方式,對于不同的應用,可能電阻有所調整,如何使用宏定義實現ADC值自動計算?

        |
        Z 10K
        Z
        12001000820680560 470 |
        -----WW------WW-----WW-------WW------WW------WW------------ >ADC
        | | | | | | |
        K0K1 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計算值,非常不方便,如有更巧妙算法,歡迎討論!



        評論


        技術專區

        關閉
        主站蜘蛛池模板: 通许县| 扶余县| 乐都县| 海伦市| 安远县| 乳源| 洞头县| 桑植县| 秦安县| 清河县| 会昌县| 尉氏县| 将乐县| 广州市| 菏泽市| 佛冈县| 镇平县| 陆丰市| 遂川县| 虎林市| 泸西县| 聊城市| 万荣县| 邮箱| 米泉市| 通山县| 牟定县| 宜兴市| 克什克腾旗| 朝阳市| 芷江| 农安县| 花莲县| 民权县| 邻水| 纳雍县| 临泉县| 淮滨县| 开江县| 凤庆县| 得荣县|