新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > MSP430F14-直接IO口按鍵檢處理程序

        MSP430F14-直接IO口按鍵檢處理程序

        作者: 時間:2016-11-11 來源:網絡 收藏
        //MSP430F14-直接IO口按鍵檢處理程序

        /*************************************************************************/

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

        //分別使用了采個4個按鍵接到MSP430的通用IO口,按任意一個按鍵可以使板上的對應LED反轉.
        //例程中,按鍵采用不斷查詢方式,以得到鍵值.并沒有使用到低功耗.此程序結構比較適合
        //用在非手持設備或非電池供電的設計中.此程序結構比較通用,級用戶可參與或套用修改.
        /*************************************************************************/
        #include <msp430x14x.h>

        //初級用戶要習慣采用宏定義,以方便的編寫和修改
        #define keyio 0xf0 //定義按鍵IO口,Px0-Px3 IO口.
        #define key_1 0xfe //定義返回鍵值1
        #define key_2 0xfd //定義返回鍵值2
        #define key_3 0xfb //定義返回鍵值3
        #define key_4 0xf7 //定義返回鍵值3

        //聲明子程序
        unsigned char key_chcek(void);
        void display_update(unsigned char dta);
        void key_process_0(void);
        void key_process_1(void);
        void key_process_2(void);
        void key_process_3(void);
        //*************************************************************************
        //將單片機初始化程序放在main()前面是方便查看單片機的初始化狀態情況.
        void MCU_int(void)
        {//默認MCLK主時鐘頻率為DCO=~800K
        P1OUT |= BIT4+BIT5+BIT6+BIT7; //設置LED,上電為滅.電路可以查看MC430F14電路圖.
        P1DIR |= BIT4+BIT5+BIT6+BIT7; //P1.0~P1.3設置為輸出.
        //MSP430單片機IO口上電默認方向為輸入,所以接按鍵的IO無需再設為輸入.
        }

        //*************************************************************************
        void main (void)
        { unsigned char key_value; //定義鍵值全局變是
        WDTCTL = WDTPW + WDTHOLD; //關狗
        MCU_int(); //初始化單片機

        while(1) //主程序主循環
        {
        key_value=key_chcek(); //檢測,有鍵按下并松開,返回一個鍵值.

        switch (key_value) //對鍵值進行處理.采switch語法結構查詢
        {
        case key_1: key_process_0(); //調用鍵處理程序1
        break;
        case key_2: key_process_1(); //調用鍵處理程序2
        break;
        case key_3: key_process_2(); //調用鍵處理程序3
        break;
        case key_4: key_process_3(); //調用鍵處理程序4
        break;
        default: ;
        break;
        }
        // display_update(key_value); //如果有需要可以在這里加上顯示更新程序.
        key_value=0x00; //最后清除鍵值.將繼續主循環.
        }
        }

        //*************************************************************************
        //按鍵檢測程序
        //返回值: 無符號字符型鍵值
        unsigned char key_chcek(void)
        {
        unsigned int i;
        unsigned char timp,active;
        active=0;
        while(!active)
        {
        while(0xff ==( P2IN | keyio)); //一直等待有鍵按下
        timp = P2IN | 0xf0; //若有鍵接下了,則讀入IO狀態.
        for(i=0;i<7000;i++); //延時,是為了去按鍵抖動.
        if (timp ==(P2IN | 0xf0)) //經延時后,還是那鍵嗎?
        { active = 1; //是,則按鍵有效.
        while(0xff !=( P2IN | keyio)); //一直等待按鍵松開
        }
        else
        { //去按鍵抖動后讀入的鍵值與之前不同.則先效.
        active = 0; //再循環檢測.
        }
        }
        return timp; //返回一個鍵值.
        }

        //*************************************************************************
        void key_process_0(void) //值處理,用戶可以自己修改...
        {
        P1OUT ^= BIT4;
        }
        //*************************************************************************
        void key_process_1(void) //值處理,用戶可以自己修改...
        {
        P1OUT ^= BIT5;
        }
        //*************************************************************************
        void key_process_2(void) //值處理,用戶可以自己修改...
        {
        P1OUT ^= BIT6;
        }
        void key_process_3(void) //值處理,用戶可以自己修改...
        {
        P1OUT ^= BIT7;
        }
        //*************************************************************************
        /*void display_update(unsigned char dta)
        {
        ; //用戶可以根據需要來放置顯示程序,如LCD,LED,Digital-LED....
        //靈活應用,
        }*/
        //*************************************************************************



        評論


        技術專區

        關閉
        主站蜘蛛池模板: 遵化市| 鹰潭市| 湟中县| 西昌市| 淳化县| 法库县| 龙里县| 孟连| 永定县| 蓬安县| 伊吾县| 大渡口区| 镇沅| 天气| 寻甸| 开鲁县| 新巴尔虎右旗| 布尔津县| 龙泉市| 阿拉善右旗| 广丰县| 德安县| 武陟县| 邓州市| 临沂市| 桐乡市| 涿州市| 渝北区| 萝北县| 遵义市| 土默特右旗| 庐江县| 河北省| 淮阳县| 通渭县| 东台市| 潮州市| 宜川县| 化德县| 榆树市| 建瓯市|