久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2208|回復: 1
打印 上一主題 下一主題
收起左側

51單片機按鍵的幾種驅動方法 以藍橋杯的單片機板子作為參考

[復制鏈接]
跳轉到指定樓層
樓主
這里以藍橋杯的單片機板子作為參考
法一:查詢方式
    只要查詢其引腳電平是否發生變化,就可以判斷按鍵是否被按下。


其具體的實現函數為:
//按鍵掃描函數
uchar key_scan(void)
{
        uchar key;
        P3 &= 0x0F;
        switch (P3)
        {
                case 0x0E:
                        key = 7;
                        break;
                case 0x0D:
                        key = 6;
                        break;
                case 0x0B:
                        key = 5;
                        break;
                case 0x07:
                        key = 4;
                        break;
                default:
                        key = 0x0F;        
                        break;
        }
        return key;
}

void key_action(void)
{
        uchar key;
        key = key_scan();
        if(key != 0x0F)
        {
                delay_ms(10);
                key = key_scan();
                if(key != 0x0F)
                {
                        switch(key)
                        {
                                case 7:
                                        led_on();
                                        break;
                                case 6:
                                        led_off();
                                        break;
                                case 5:
                                        relay_on();
                                        break;
                                case 4:
                                        relay_off();
                                        break;
                                default:
                                        break;
                        }
                        while(P3 != 0x0F);
                }
               
        }
}

法二:中斷方式
    中斷方式的區別在于對改端口的引腳變化進行實時檢測,從而及時地判斷引腳是否被按下。
其具體的實現函數為:
void int0_handler(void) interrupt 1
{
        static ms_count = 0;
        if(++ms_count == 10)                //10ms進行按鍵檢測
        {
                ms_count = 0;
                key_flag = 1;
        }
        display();
}

void key_check(void)
{
        uchar key = 0;
        static bit key_ready = 0;                //按鍵數據存儲完畢標志位
        static uchar key_save = 0;                //保存鍵值
        static uchar key_time = 0;                //記錄按鍵的次數
        if(key = key_scan())
        {
                key_time ++;
                if(key_time == KEY_LAST)
                {
                        key_time = 0;
                        key_ready = 1;
                        key_save = key;
                }
        }
        else if(!(key_scan()) && (key_ready == 1))        //wait for key up
        {
                key_ready = 0;
                key_action(key_save);
        }
}

具體工程情況詳見附件。

7.int_control_display.zip (35.55 KB, 下載次數: 7) 3.key.zip (29.64 KB, 下載次數: 5)

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:366752 發表于 2018-7-8 02:27 來自觸屏版 | 只看該作者
謝謝分享
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国精产品一品二品国精在线观看 | 亚洲色图50p | 高清av一区 | 国产精品国产精品国产专区不卡 | 亚洲成人福利在线观看 | 亚洲 中文 欧美 | 亚洲女优在线播放 | 日韩午夜一区二区三区 | 久久国产精品视频观看 | 日本一区精品 | 亚洲精品丝袜日韩 | 日韩网站在线观看 | www.色.com| 一级a爱片性色毛片免费 | av黄色在线| 国产毛片久久久久久久久春天 | av午夜电影| 日韩欧美在线观看视频 | 香蕉大人久久国产成人av | 一区二区免费在线视频 | 波多野结衣在线观看一区二区三区 | 成人福利电影 | 天天爽夜夜爽精品视频婷婷 | 日韩午夜网站 | 男女污网站 | 亚洲精品久久久9婷婷中文字幕 | 午夜免费在线 | 少妇一区二区三区 | 超碰97免费 | 99久久免费精品 | 亚洲国产精品久久久久久 | 色片在线观看 | 日韩网站在线观看 | 99热最新网址 | 亚洲视频国产视频 | 国产在线精品区 | 福利电影在线 | 人人玩人人干 | 精品国产一区二区三区观看不卡 | 久久国产免费 | 日韩毛片在线观看 |