欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

簡單的單片機矩陣鍵盤程序

[復制鏈接]
跳轉到指定樓層
樓主
ID:102402 發表于 2016-1-8 21:04 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
#include <reg52.h>

sbit ADDR0 = P1^0;
sbit ADDR1 = P1^1;
sbit ADDR2 = P1^2;
sbit ADDR3 = P1^3;
sbit ENLED = P1^4;
sbit KEY1 = P2^4;
sbit KEY2 = P2^5;
sbit KEY3 = P2^6;
sbit KEY4 = P2^7;

unsigned char code LedChar[] = {  //數碼管顯示字符轉換表
    0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07,
    0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71
};

void delay();

void main()
{
    bit keybuf = 1;  //按鍵值暫存,臨時保存按鍵的掃描值
    bit backup = 1;  //按鍵值備份,保存前一次的掃描值
    unsigned char cnt = 0;  //按鍵計數,記錄按鍵按下的次數

    ADDR3 = 1;
    ADDR2 = 0;
    ADDR1 = 0;
    ADDR0 = 0;
    P2 = 0xf7;   //P2.3置0,即KeyOut1輸出低電平
    P0 = LedChar[cnt];   //顯示按鍵次數初值

        while (1)
    {
        keybuf = KEY4;            //把當前掃描值暫存
        if (keybuf != backup)     //當前值與前次值不相等說明此時按鍵有動作
        {
           delay();              //延時大約10ms
            if (keybuf == KEY4)   //判斷掃描值有沒有發生改變,即按鍵抖動
            {
                if (backup == 0)  //如果前次值為0,則說明當前是彈起動作
                {
                    cnt++;        //按鍵次數+1
                    if (cnt >= 10)
                    {             //只用1個數碼管顯示,所以加到10就清零重新開始
                        cnt = 0;
                    }
                    P0 = LedChar[cnt];  //計數值顯示到數碼管上
                }
                backup = keybuf;  //更新備份為當前值,以備進行下次比較
            }
        }
    }
}
/* 軟件延時函數,延時約10ms */
void delay()
{
    unsigned int i = 1000;
        
    while (i--);
}


評分

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

查看全部評分

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表