pic b連接埠按鍵實驗

來源:互聯網
上載者:User

*******************************************************************
  Name:        唐湘衡
  Copyright:
  Author:
  Date: 26-10-09 17:52

  Description:
********************************************************************/

/*******************************************************************
    功能:檢測4*4鍵盤是否按下,如有按下,在中間兩數位管顯示按鍵序號
     如無按鍵,顯示HH s5開啟3,4撥碼開關,s6 8個開關全開
    定義C口進行輸出,選XT震蕩,關閉看門狗定時器,低電壓複位
    器件:pic DEMOII 工程板,pic18f4520晶片,pic16-mcd2
    線上調試器
********************************************************************/
#include<pic18.h>

void  delay();                     //延時函數申明
void  init();                      //I/O口初始化函數申明
void  display(int x);              //顯示函式宣告
int   result;

//*****************************************************************

int main()
{
    init();                          //調用初始I/O口函數
   
    result = 0xff;                    
    if (RB0==0)
    {
          asm("nop");                //插入一定延時,確保電平穩定             //插入一定延時,確保電平穩定這裡為消除抖動         
          result = 0x01;
        
    }
    if (RB1==0)
    {RBPU = 0;                 //使能B口的內部上拉INTCON2中斷寄存器
          asm("nop");                //插入一定延時,確保電平穩定
          result = 0x02;
        
    }
    if (RB2==0)
    {
          asm("nop");                //插入一定延時,確保電平穩定               //插入一定延時,確保電平穩定這裡為消除抖動  
          result = 0x03;
        
    }
    if (RB3==0)
    {
          asm("nop");                //插入一定延時,確保電平穩定                //插入一定延時,確保電平穩定這裡為消除抖動
        // if (RB0==0)               //無需消除抖動,有此語句是按鍵失效
         // {           
              result = 0x04;
         // }
    }
    if (RB4==0)
    {
          asm("nop");                //插入一定延時,確保電平穩定               //插入一定延時,確保電平穩定這裡為消除抖動
          result = 0x05;
    }

    display(result);
    
}

//******************************************************************

void delay()                      //延時函數
{
     int i;
     for (i=100; i>0; i--){;}
}

//*******************************************************************

void init()                    //I/O口初始化函數
{
   
     ADCON1 = 0x07;            //設定A口為普通I/O口
     TRISA  = 0x33;             //設定(開啟第3和4數位管)
     TRISD  = 0x00;           //數位管的位設定全部輸出
     TRISB  = 0x1f;           //設定B口低5位為輸入其他未用到
     PORTA  = 0xff;
     PORTD  = 0xff;            //剛開始所有燈熄滅
     //CONFIG3H =0x05;            //PBADEN = 0; CONFIG3H是配置位中的寄存器,PBADEN=0是把RB0-RB4配置為數字I/O
     RBPU = 0;                 //使能B口的內部上拉INTCON2中斷寄存器
}

//****************************************************************

void display(int x)                //顯示函數:按鍵按下,顯示其序號,用中間兩數位管顯示
{
     switch(result)
     {
            case 0x01:
                 PORTA = 0x37;      //開啟第4個數位管
                 PORTD = 0xc0;      //顯示0
                 delay();          //延時
                 PORTA = 0X3b;      //開啟第3個數位管
                 PORTD = 0xf9;     //顯示1
                 delay(); break;
            case 0x02:
             
                 PORTA = 0x37;      //開啟第4個數位管
                 PORTD = 0xc0;      //顯示0
                 delay();          //延時
                 PORTA = 0X3b;      //開啟第3個數位管
                 PORTD = 0xa4;     //顯示1
                 delay(); break;
            case 0x03:
                 PORTA = 0x37;      //開啟第4個數位管
                 PORTD = 0xc0;      //顯示0
                 delay();          //延時
                 PORTA = 0X3b;      //開啟第3個數位管
                 PORTD = 0xb0;     //顯示1
                 delay(); break;
            case 0x04:
                 PORTA = 0x37;      //開啟第4個數位管
                 PORTD = 0xc0;      //顯示0
                 delay();          //延時
                 PORTA = 0X3b;      //開啟第3個數位管
                 PORTD = 0x99;     //顯示1
                 delay(); break;
            case 0x05:
                 PORTA = 0x37;      //開啟第4個數位管
                 PORTD = 0xc0;      //顯示0
                 delay();          //延時
                 PORTA = 0X3b;      //開啟第3個數位管
                 PORTD = 0x92;     //顯示1
                 delay(); break;
            case 0xff:
                 PORTA = 0x37;      //開啟第4個數位管
                 PORTD = 0x89;      //顯示0
                 delay();          //延時
                 PORTA = 0X3b;      //開啟第3個數位管
                 PORTD = 0x89;     //顯示1
                 delay();  break;                              
     }
}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.