中文字幕 另类精品,亚洲欧美一区二区蜜桃,日本在线精品视频免费,孩交精品乱子片免费

<sup id="3hn2b"></sup>

    1. <sub id="3hn2b"><ol id="3hn2b"></ol></sub><legend id="3hn2b"></legend>

      1. <xmp id="3hn2b"></xmp>

      2. 新聞中心

        EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于AVR的4*4矩陣鍵盤(pán)掃描與LED顯示程序

        基于AVR的4*4矩陣鍵盤(pán)掃描與LED顯示程序

        作者: 時(shí)間:2012-08-02 來(lái)源:網(wǎng)絡(luò) 收藏

        /**************
        此程序在別人的基礎(chǔ)上進(jìn)行了一些修改,能應(yīng)用到我的開(kāi)發(fā)板中,
        并與我自制的外接按鍵和LED燈配合使用,在此感謝原創(chuàng)者?。?!
        硬件:M16
        作用:當(dāng)按下按鍵時(shí)顯示相對(duì)應(yīng)的按鍵控制的LED燈
        頻率:8.000000MHZ
        開(kāi)發(fā)板:Easy M16 v12
        編譯軟件:ICC6.31A
        下載軟件:studio4.14
        編寫(xiě)人:伍建忠
        編寫(xiě)日期:2011.10.14
        修改日期:
        ************/
        #includeiom16v.h>
        #includemacros.h>
        #define uchar unsigned char
        #define uint unsigned int
        uint key_num=20;
        //以下為左右移動(dòng)參數(shù)宏定義
        #define crol(a,n)a=(a>(8-n))
        #define cror(a,n)a=(a>>n)|(a(8-n))
        void delay(void)
        {
        uint i;
        for(i=1;i100;i++);
        }
        void delay_1ms(void)
        {
        uint i;
        for(i=1;i(uint)(8*143-2);i++);
        }
        void delay_ms(uint time)
        {
        uint i=0;
        while(i)
        {
        delay_1ms();
        i++;
        }
        }
        void port_init(void)
        {
        DDRA=0xff;
        PORTA=0xff;
        DDRB=0x00;
        PORTB=0x00;
        DDRC=0xff;//
        PORTC=0xff;//
        DDRD=0xf0;//D口低四位為輸入,置高電平。
        PORTD=0x00;//高四位為輸出,置低電平。
        }
        uchar key_scan(void)
        {
        uchar i,j;
        DDRD=0xf0;
        PORTD=0x00;//初始運(yùn)行時(shí)輸出全為0
        if((PIND0x0f)==0x0f)//判斷有無(wú)按鍵按下
        return 20;
        else
        {
        delay_ms(10);
        if((PIND0x0f)==0x0f)//第二次判斷,必不可少
        return 20;
        else
        {
        for(i=4;i8;i++)//掃描行線
        {
        PORTD=~(1i)|0x0f;//行線上是否有拉低
        for(j=0;j4;j++)//掃描列線
        {
        if((PIND(1j))==0)//列線上有無(wú)按鍵按下
        key_num=((i-4)*4+j);//確定按鍵值
        }
        }
        return key_num;//無(wú)鍵按下則返回初始狀態(tài)
        }
        }
        }
        void led_display(void)//按鍵按下時(shí)在LED上顯示相應(yīng)的狀態(tài)
        {
        switch(key_num)
        {
        case 0: PORTA=0xfe; PORTD=0xee; break;
        case 1: PORTA=0xfc; PORTD=0xde; break;
        case 2: PORTA=0xf8; PORTD=0xbe; break;
        case 3: PORTA=0xf0; PORTD=0x7e; break;
        case 4: PORTA=0xe0; PORTD=0xed; break;
        case 5: PORTA=0xc0; PORTD=0xdd; break;
        case 6: PORTA=0x07; PORTD=0xbd; break;
        case 7: PORTA=0x55; PORTD=0x7d; break;
        case 8: PORTA=0xaa; PORTD=0xeb; break;
        case 9: PORTA=0xcc; PORTD=0xdb; break;
        case 10: PORTA=0xbb; PORTD=0xbb; break;
        case 11: PORTA=0x77; PORTD=0x7b; break;
        case 12: PORTA=0xf0; PORTD=0xe7; break;
        case 13: PORTA=0x66; PORTD=0xd7; break;
        case 14: PORTA=0xee; PORTD=0xd7; break;
        case 15: PORTA=0xdd; PORTD=0x77; break;
        default: break;
        key_num=16;
        }
        }
        void main(void)
        {
        #ifdef debag1
        key_code=2;
        #endif
        port_init();//調(diào)用端口初始化函數(shù)
        while(1)
        {
        key_scan();//調(diào)用按鍵掃描函數(shù)
        led_display();//調(diào)用顯示函數(shù)
        }
        }



        評(píng)論


        相關(guān)推薦

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

        關(guān)閉