新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 89C52單片機矩陣鍵盤行列掃描

        89C52單片機矩陣鍵盤行列掃描

        作者: 時間:2016-11-17 來源:網絡 收藏
        #include

        #define uchar unsigned char
        #define uint unsigned int
        sbit wela=P2^6;
        sbit dela=P2^7;
        uchar code wela_table[]={
        0xFE,0xFD,0xFB,0xF7,
        0xEF,0xDF,0xBF,0x7F};
        uchar code dela_table[]={
        0x3F,0x06,0x5B,0x4F,
        0x66,0x6D,0x7D,0x07,
        0x7F,0x6F,0x77,0x7C,
        0x39,0x5E,0x79,0x71};
        uchar temp,num;
        void Init();
        void DelayMs(uchar a);
        void DelayUs2(uchar b);
        void KeyScan();
        void Display();
        /*---------------------------------------------------------------
        主函數
        ------------------------------------------------------------------*/
        void main()
        {
        Init();

        while(1)
        {
        KeyScan();
        Display();

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


        }

        }

        /*----------------------------------初始化函數----------------------------*/
        void Init()
        {
        num=0;


        }

        /*---------------------------------鍵盤掃描--------------------------------*/
        void KeyScan()
        {

        /*--------------------------第一行檢測--------------------------*/
        P3=0xFE;
        temp=P3;
        temp=temp&0xF0;
        if(temp!=0xF0)
        {
        DelayMs(250);
        temp=P3;
        temp=temp&0xF0;
        if(temp!=0xF0)
        {
        switch(temp)
        {
        case 0x70: num=1;
        break;
        case 0xB0: num=2;
        break;
        case 0xD0: num=3;
        break;
        case 0xE0: num=4;
        break;
        }
        }

        while(temp!=0xF0)
        {
        temp=P3;
        temp=temp&0xF0;
        Display();
        }



        }
        /*--------------------------第二行檢測--------------------------*/
        P3=0xFD;
        temp=P3;
        temp=temp&0xF0;
        if(temp!=0xF0)
        {
        DelayMs(50);
        temp=P3;
        temp=temp&0xF0;
        if(temp!=0xF0)
        {
        switch(temp)
        {
        case 0x70: num=5;break;
        case 0xB0: num=6;break;
        case 0xD0: num=7;break;
        case 0xE0: num=8;break;
        }
        }

        while(temp!=0xF0)
        {
        temp=P3;
        temp=temp&0xF0;
        Display();
        }



        }
        /*--------------------------第三行檢測--------------------------*/
        P3=0xFB;
        temp=P3;
        temp=temp&0xF0;
        if(temp!=0xF0)
        {
        DelayMs(50);
        temp=P3;
        temp=temp&0xF0;
        if(temp!=0xF0)
        {
        switch(temp)
        {
        case 0x70: num=9;break;
        case 0xB0: num=10;break;
        case 0xD0: num=11;break;
        case 0xE0: num=12;break;
        }
        }

        while(temp!=0xF0)
        {
        temp=P3;
        temp=temp&0xF0;
        Display();
        }



        }
        /*--------------------------第四行檢測--------------------------*/
        P3=0xF7;
        temp=P3;
        temp=temp&0xF0;
        if(temp!=0xF0)
        {
        DelayMs(50);
        temp=P3;
        temp=temp&0xF0;
        if(temp!=0xF0)
        {
        switch(temp)
        {
        case 0x70: num=13;break;
        case 0xB0: num=14;break;
        case 0xD0: num=15;break;
        case 0xE0: num=0;break;
        }
        }

        while(temp!=0xF0)
        {
        temp=P3;
        temp=temp&0xF0;
        Display();
        }



        }

        }

        /*----------------------------------延時函數-----------------------------*/
        void DelayMs(uchar a)
        {
        while(a)
        {
        DelayUs2(245);
        DelayUs2(245);
        a--;

        }
        }

        void DelayUs2(uchar b)
        {
        while(b)
        {
        b--;
        }

        }
        /*-------------------------------顯示函數------------------------------------*/
        void Display()
        {
        P0=0xFF;
        wela=1;
        wela=0;

        P0=dela_table[num];
        dela=1;
        dela=0;

        P0=wela_table[5];
        wela=1;
        wela=0;
        DelayUs2(50);

        }



        評論


        技術專區

        關閉
        主站蜘蛛池模板: 绥阳县| 商河县| 利川市| 岳西县| 深州市| 拉孜县| 龙岩市| 田林县| 江华| 新沂市| 广西| 芒康县| 阿拉尔市| 长治市| 闸北区| 凉城县| 凌海市| 新河县| 苏尼特左旗| 墨竹工卡县| 渑池县| 聊城市| 延吉市| 肇州县| 遵化市| 富平县| 上犹县| 乐亭县| 吉安市| 五指山市| 凤凰县| 娄烦县| 贵溪市| 泸西县| 南汇区| 贺州市| 都匀市| 色达县| 双江| 尼勒克县| 松溪县|