新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > AVR main.c/基于狀態機的按鍵

        AVR main.c/基于狀態機的按鍵

        作者: 時間:2016-11-25 來源:網絡 收藏
        /**********************************************************************
        * 文件名稱: main.c/基于狀態機的按鍵
        * 程序作者: Kevin Chin
        * 程序版本: V1.0
        * 編制日期: 2010/07/14
        * 功能描述: 按一個K20(PD7),LED燈亮(PB1),松開熄滅
        * 編譯器:WinAVR-20090313
        * 芯片:ATmega16,外部11.0592MHZ晶振
        * 技術支持:http://bbs.cepark.com
        **********************************************************************/
        #include<avr/io.h>
        #include

        #defineKEY_Value PIND&0x80//定義按鍵所在的引腳PD7

        #defineLED_OPEN PORTB&=~(_BV(PB1))//PB1口的LED燈點亮

        #defineLED_CLOSE PORTB|=_BV(PB1)//PB1口的LED燈熄滅

        #defineKEY_STATE_0 0//狀態0

        #defineKEY_STATE_1 1//狀態1

        #defineKEY_STATE_2 2//狀態2


        uint8_tKeyScane(void)//按鍵掃描函數

        {
        staticuint8_tkeystate=0,keyreturn=0;//定義靜態變量

        uint8_tkeypress;


        keypress=KEY_Value;//讀取按鍵的狀態賦給keypress


        switch(keystate)
        {
        caseKEY_STATE_0:if(!keypress)//如果是狀態1并且按鍵按下去了。

        {
        keystate=KEY_STATE_1;//狀態切換到1

        keyreturn=0;
        }
        break;
        caseKEY_STATE_1:if(!keypress)//如果10ms后按鍵按下狀態再次確認

        {
        keystate=KEY_STATE_2;//按鍵狀態切換到2

        keyreturn=1;//返回值為1

        }
        elsekeystate=KEY_STATE_0;
        break;
        caseKEY_STATE_2:if(keypress)//判斷按鍵是否松開

        {
        keystate=KEY_STATE_0;//切換到狀態0

        keyreturn=0;
        }
        break;
        default:break;
        }

        returnkeyreturn;//返回鍵值


        }

        intmain(void)
        {

        uint8_tkeydata;

        PORTB=0xff;
        DDRB=0xff;

        PORTD=0x80;
        DDRD=0x00;

        while(1)
        {
        _delay_ms(10);//延時10ms

        keydata=KeyScane();//調用按鍵掃描函數


        if(keydata)//如果按鍵掃描函數返回為1,執行下面的語句

        {
        LED_OPEN;//LED點亮

        }
        elseLED_CLOSE;//LED熄滅

        }
        }


        關鍵詞: AVR狀態機的按

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 波密县| 桂平市| 和硕县| 资兴市| 都匀市| 五大连池市| 和龙市| 大姚县| 交城县| 盘山县| 浮山县| 察隅县| 新晃| 迭部县| 南郑县| 盐津县| 荥经县| 张掖市| 广安市| 县级市| 安阳市| 建瓯市| 绥化市| 黔西| 湘阴县| 任丘市| 太保市| 天柱县| 镇赉县| 华容县| 临漳县| 双牌县| 鄂托克前旗| 荔浦县| 南开区| 白山市| 曲阜市| 石渠县| 宁明县| 湟中县| 金塔县|