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

<s id="cmphk"><label id="cmphk"></label></s>
    <span id="cmphk"><var id="cmphk"></var></span>
    <dfn id="cmphk"><var id="cmphk"></var></dfn>
    <menu id="cmphk"><thead id="cmphk"></thead></menu>

    <address id="cmphk"></address>

      <dfn id="cmphk"></dfn>
      
      
      <span id="cmphk"></span>

      <object id="cmphk"><tt id="cmphk"></tt></object>
      1. 新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > mega8515的矩陣鍵盤與LED顯示程序

        mega8515的矩陣鍵盤與LED顯示程序

        作者: 時(shí)間:2016-11-29 來源:網(wǎng)絡(luò) 收藏
        ATmega8515是一種與51單片機(jī)引腳相容的avr單片機(jī),下面的程序已經(jīng)通過測(cè)試可以正常使用:

        /******************************************************************
        //文件名稱:Key4X4_Led
        //功 能:4X4矩陣鍵盤控制LED小燈
        //作 者:懶貓愛飛
        //日 期:2010.05.25
        *******************************************************************/
        #include
        #include

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

        #define uchar unsigned char
        #define uint unsigned int

        uint Key_num=20;

        //宏定義左移,右移函數(shù)crol為左移,cror為右移
        #define crol(a,n) a=(a<>(8-n))
        #define cror(a,n) a=(a>>n)|(a<<(8-n))

        /****************************************************************
        //函數(shù)名稱: delay(void)
        //功 能:延時(shí)
        //入口參數(shù):無
        //出口參數(shù):無
        *****************************************************************/
        void delay(void)
        {
        uint i;
        for(i=1;i<100;i++)
        ;
        }

        /****************************************************************
        //函數(shù)名稱:delay_1ms(void)
        //功 能:延時(shí)1ms
        //入口參數(shù):無
        //出口參數(shù):無
        *****************************************************************/
        void delay_1ms(void)//1ms
        {
        uint i;
        for(i=1;i<(uint)(8*143-2);i++)
        ;
        }
        /****************************************************************
        //函數(shù)名稱:delay_ms(uint time)
        //功 能:延時(shí)time ms
        //入口參數(shù):time
        //出口參數(shù):無
        *****************************************************************/
        void delay_ms(uint time)//time*1ms
        {
        uint i="0";
        while(i {
        delay_1ms();
        i++;
        }
        }
        /****************************************************************
        //函數(shù)名稱:Port_init(void)
        //功 能:端口初始化
        //入口參數(shù):無
        //出口參數(shù):無
        *****************************************************************/
        void Port_init(void)
        {
        DDRA = 0xff; //A口輸出口,控制LED
        PORTA = 0xff;

        DDRB = 0x00; //B口設(shè)為輸出口,控制LED
        PORTB = 0x00;

        DDRC = 0xff; //C口
        PORTC = 0xff;

        DDRD = 0xf0; //D口低四位輸入,置高電平,高四位輸出,置低電平
        PORTD = 0x00;
        }

        /****************************************************************
        //函數(shù)名稱:uchar Key_scan(void)
        //功 能:鍵盤掃描,讀取鍵值
        //入口參數(shù):無
        //出口參數(shù):無
        *****************************************************************/
        uchar Key_scan(void)
        {
        uchar i,j;
        DDRD = 0xf0; //設(shè)置PD高四位為輸出口,低四位為輸入口
        PORTD = 0x00; // 初始運(yùn)行輸出全為0
        if((PIND & 0x0f) == 0x0f) return 20; // 判斷有無按鍵動(dòng)作,沒有,返回0
        else
        {
        delay_ms(10); //按鍵消抖
        if((PIND & 0x0f) == 0x0f) return 20; //再次判斷是否有按鍵動(dòng)作
        else
        {
        for(i = 4;i < 8;i++) //逐行輸出0
        {
        PORTD = ~(1 << i) | 0x0f; //第i行輸出0
        for(j = 0;j < 4;j++)
        {
        if((PIND & (1 << j)) == 0) //逐列檢測(cè)
        Key_num= (i - 4) * 4 + j; //計(jì)算鍵值
        }
        }
        return Key_num; //
        }
        }
        }
        /****************************************************************
        //函數(shù)名稱:Led_display(void)
        //功 能:Led顯示控制
        //入口參數(shù):無
        //出口參數(shù):無
        *****************************************************************/
        void Led_display(void)
        {
        switch(Key_num) //根據(jù)鍵碼值選擇控制情況
        {
        case 0:PORTA=0xfe;PORTC=0xff;break;
        case 1:PORTA=0xfc;PORTC=0xff;break;
        case 2:PORTA=0xf8;PORTC=0xff;break;
        case 3:PORTA=0xf0;PORTC=0xff;break;
        case 4:PORTA=0xe0;PORTC=0xff;break;
        case 5:PORTA=0xc0;PORTC=0xff;break;
        case 6:PORTA=0x80;PORTC=0xff;break;
        case 7:PORTA=0x00;PORTC=0xff;break;
        case 8:PORTA=0x00;PORTC=0xfe;break;
        case 9:PORTA=0x00;PORTC=0xfc;break;
        case 10:PORTA=0x00;PORTC=0xf8;break;
        case 11:PORTA=0x00;PORTC=0xf0;break;
        case 12:PORTA=0x00;PORTC=0xe0;break;
        case 13:PORTA=0x00;PORTC=0xc0;break;
        case 14:PORTA=0x00;PORTC=0x80;break;
        case 15:PORTA=0x00;PORTC=0x00;break;
        default: break;
        }
        }
        /****************************************************************
        //函數(shù)名稱:main(void)
        //功 能:主程序
        //入口參數(shù):無
        //出口參數(shù):無
        *****************************************************************/
        void main(void)
        {
        //#define debug1
        #ifdef debug1
        Key_code=2;//測(cè)試函數(shù)Led_display()是否可用
        #endif

        Port_init();
        while(1)
        {
        Key_scan();
        Led_display();
        }
        }



        關(guān)鍵詞: mega8515矩陣鍵盤LED顯

        評(píng)論


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

        關(guān)閉