新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 狀態機方式按鍵掃描單片機程序

        狀態機方式按鍵掃描單片機程序

        作者: 時間:2016-12-02 來源:網絡 收藏
        這是從http://www.51hei.com/bbs/dpj-19294-1.html這個單片機做的收音機里面截取出來的一個子程序,完整的代碼和adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=17&is_app=0&jk=66a41a025f30382d&k=%D4%AD%C0%ED%CD%BC&k0=%D4%AD%C0%ED%CD%BC&kdi0=0&luki=3&n=10&p=baidu&q=98059059_cpr&rb=0&rs=1&seller_id=1&sid=2d38305f21aa466&ssp2=1&stid=0&t=tpclicked3_hc&tu=u1831118&u=http%3A%2F%2Fwww%2E51hei%2Ecom%2Fmcu%2F1974%2Ehtml&urlid=0" id="5_nwl" mpid="5" target="_blank">原理圖可從原帖下載.

        /*-----------狀態機方式按鍵掃描-----------*/
        /*------------外部晶振為 12MHz-----------*/
        /*--------最后修改2011.02.26--------------*/
        #include "STC12C5620AD.H"
        #include "Key_Scan.H"
        #define Key_Mask 0x0f //屏蔽不用的按鍵,不用的按鍵用0屏蔽

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

        /********************** 聲明外部變量**************************/
        extern uchar Work_Mode; //From Main.c
        /********************** 按鍵掃描讀取**************************/
        uchar Key_Scan(void)
        {
        static uchar Key_State=0; //定義按鍵狀態
        uchar Key_Press;
        uchar Key_Return=0x00; //定義按鍵返回的鍵值
        Key_Press=Key_Input&Key_Mask;//讀按鍵I/O電平
        switch(Key_State)
        {
        case 0: // 按鍵初始態
        if (Key_Press!=Key_Mask)
        Key_State=1; // 鍵被按下,狀態轉換到鍵確認態
        break;
        case 1: // 按鍵確認態
        if (Key_Press==Key_Input&Key_Mask)
        {
        Key_Return=Key_Press; // 按鍵仍按下且鍵值鍵值,按鍵確認輸出
        BEEP_DRV=1; // 驅動蜂鳴器
        Key_State=2;// 狀態轉換到鍵釋放態
        }
        else
        Key_State=0;// 按鍵已抬起或改變,并轉換到按鍵初始態
        break;
        case 2:
        if (Key_Press==Key_Mask)
        {
        Key_State=0;//按鍵已釋放,轉換到按鍵初始態
        BEEP_DRV=0;// 關閉蜂鳴器
        }
        else
        if(Work_Mode==1)
        {
        Key_Return=Key_Press|0x09; // 只有調臺模式并且只有>>| 和 |<< 才能連按
        BEEP_DRV=0;// 關閉蜂鳴器
        }
        else
        BEEP_DRV=0;// 關閉蜂鳴器
        break;
        }
        return Key_Return;
        }



        評論


        技術專區

        關閉
        主站蜘蛛池模板: 辽阳市| 滨海县| 鹤山市| 文成县| 灵川县| 简阳市| 如皋市| 太保市| 小金县| 伊通| 沭阳县| 华池县| 巴林右旗| 美姑县| 襄垣县| 承德县| 宣城市| 卢氏县| 瑞昌市| 安丘市| 那曲县| 宜宾市| 布尔津县| 三原县| 临汾市| 伊金霍洛旗| 区。| 如东县| 法库县| 康定县| 双峰县| 巴林左旗| 阿拉善盟| 连山| 红安县| 若羌县| 永新县| 礼泉县| 容城县| 卢湾区| 新邵县|