在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > AVR簡單好用的4x4矩陣鍵盤

            AVR簡單好用的4x4矩陣鍵盤

            作者: 時間:2016-11-10 來源:網(wǎng)絡(luò) 收藏
            // Target : ATMEGA16

            // Crystal: 8.0000Mhz

            本文引用地址:http://www.biyoush.com/article/201611/317335.htm

            //key.h

            #ifndef _4X4_H_
            #define _4X4_H_

            #define No_key 255

            #define key_port PORTB
            #define key_port_ddr DDRB
            #define key_port_pin PINB


            unsigned char keyboard_Scan(void);

            #endif

            //key.c

            #include
            #include

            #include "key.h"

            const unsigned char key_table[16] =
            {
            1, 2, 3,12,
            4, 5, 6,13,
            7, 8, 9,14,
            10,0,11,15,
            };

            void delay_1ms(void)//1ms延時函數(shù)
            {
            unsigned int i;
            for (i=0;i<1140;i++);
            }

            void delay_nms(unsigned int n)//N ms延時函數(shù)
            {
            unsigned int i=0;
            for (i=0;i delay_1ms();
            }

            //4x4矩陣鍵盤掃描函數(shù)

            unsigned char keyboard_Scan(void)
            {
            unsigned char temp,key,row,Column;

            key_port_ddr = 0b00001111;// 高四位輸入行線/低四位輸出列線
            key_port= 0b11110000;// 高四位打開上拉電阻/低四位輸出低電平
            delay_nus(5);// 延時5us
            if((key_port_pin & 0xF0)!= 0xF0)// 作初檢查有否鍵按下,沒有,就返回
            {// 如果行線不全為1,可能有鍵按下
            delay_nms(5);// 延時去抖動

            //設(shè)置列線初始值3~0=1110
            for(Column=0,key_port=0b11111110;Column<4;Column++)
            {
            for(row=0,temp=0b11101111;row<4;row++)// 設(shè)置行線初始值7~4=1110
            {
            while((key_port_pin & 0xF0)==(temp & 0xF0))// 輸入行線,查看這行有否鍵按下
            {
            key=4*row+Column;// 鍵編碼=4*行輸入值+列掃描值
            key=key_table[key];// 鍵盤編碼轉(zhuǎn)換鍵值
            return (key);
            }
            temp<<=1;// 行線左移1位
            }
            key_port=((key_port<<1)|0x01);// 列線掃描值左移1位,掃描下一行
            }
            }
            return (No_key);
            }

            //main.c

            #include
            #include

            #include "key.h"

            voidmain(void)
            {
            unsigned char Key;
            while(1)
            {
            Key = keyboard_Scan();// 鍵盤掃描
            switch(Key)
            {
            case 0:
            break;

            ......

            default:
            break;
            }
            }
            }

            主函數(shù)中的延時個人覺得最好還是用定時器

            電路接法不同可修改key_table數(shù)組



            關(guān)鍵詞: AVR4x4矩陣鍵

            評論


            技術(shù)專區(qū)

            關(guān)閉