在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,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) > 設計應用 > AVR矩陣鍵盤程序

            AVR矩陣鍵盤程序

            作者: 時間:2016-11-13 來源:網(wǎng)絡 收藏
            搞了一頓竟然連矩陣鍵盤的程序都不會寫

            do
            {
            i=(i<<1|i>>7);
            PORTD=i;
            DDRD=0X0F;//
            key=PIND;//不論如何配置DDxn,都可以通過讀取PINxn 寄存器來獲得引腳電平
            j=key&0xf0;

            }while(j==0xf0);//直到發(fā)現(xiàn)按鍵按下。若沒有找到按鍵按下 的,繼續(xù)循環(huán)

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

            i的初值0x7f。i=(i<<1|i>>7);之后。i=1111 1110b

            第二次,i= 1111 1101b

            保證只有一位為0


            下面是程序,寫得很巧妙

            #include
            #include
            #define uchar unsigned char
            #define uint unsigned int
            #pragma data:code //save to areas of program
            const table[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c ,
            0x39,0x5e,0x79,0x71,0};

            void delay(uint ms)
            {
            uint i,j;
            for(i=0;ifor(j=0;j<1141;j++);
            }
            void show_init()
            {
            DDRA|=BIT(3);
            DDRB=0XFF;
            DDRA|=BIT(4);
            }
            void show(uchar aa,uchar bb)//第aa個數(shù)碼管顯示bb
            {

            //PORTB=0XFF;
            PORTA|=BIT(4);
            PORTB=~BIT(aa);
            PORTA&=~BIT(4);

            PORTA|=BIT(3);
            PORTB=table[bb];
            PORTA&=~BIT(3);


            delay(10);
            }
            uchar key_press()
            {
            uchar i;
            DDRD=0XFF;
            PORTD=0XF0;

            DDRD=0X0F;
            i=PIND;
            if(i==0xf0)
            {
            DDRD=0XFF;
            return 0;

            }
            else
            {
            DDRD=0XFF;
            return 1;
            }
            }
            uchar key_scan()
            {
            uchar key,i=0x7f,j,code;
            delay(10);
            if(key_press())
            {
            do
            {
            i=(i<<1|i>>7);
            PORTD=i;
            DDRD=0X0F;
            key=PIND;
            j=key&0xf0;

            }while(j==0xf0);

            while(key_press());

            switch(key)
            {
            case 0x7e: code=0;break;
            case 0xbe: code=1;break;
            case 0xde: code=2;break;
            case 0xee: code=3;break;

            case 0x7d: code=4;break;
            case 0xbd: code=5;break;
            case 0xdd: code=6;break;
            case 0xed: code=7;break;

            case 0x7b: code=8;break;
            case 0xbb: code=9;break;
            case 0xdb: code=10;break;
            case 0xeb: code=11;break;

            case 0x77: code=12;break;
            case 0xb7: code=13;break;
            case 0xd7: code=14;break;
            case 0xe7: code=15;break;

            }
            }

            return code;
            }

            void main()
            {
            uchar s;
            show_init();
            while(1)
            {
            if(key_press())
            {
            s=key_scan();
            show(0,s);
            }
            }

            }




            關鍵詞: AVR矩陣鍵

            評論


            技術專區(qū)

            關閉