/*********************************************** 功能:1X4按鍵*** 實驗內容:按下S1 S2 S3 S4 數碼管分別顯示出0 1 2 3*** 開發板連接方法:把J3的的跳線帽跳到1-2(左邊)*********************************************/#include //包含單片機內部資源預定義__CONFIG(0xFF32);//芯片配置字,看門狗關,上電延時開,掉電檢測關,低壓編程關,加密,4M晶體HS振蕩const unsigned char TABLE[] = {0x3f,0x6,0x5b,0x4f,0x66};int result;void delay(); //delay函數申明void init(); //I/O口初始化函數申明void scan(); //按鍵掃描程序申明void display(int x); //顯示函數申明/***************************************************************************** 名 稱:main()* 功 能:* 入口參數:* 出口參數:****************************************************************************/void main(){ result = 0x8; //開始時顯示Finit(); //調用初始化函數while (1) //死循環{scan(); //調用按鍵掃描程序display(result); //調用結果顯示程序}}/***************************************************************************** 名 稱:init()* 功 能:初始化* 入口參數:* 出口參數:****************************************************************************/void init(){TRISB = 0X0F; //設置B口低4位為輸入TRISD = 0; //portd 輸出TRISC = 0xf0;TRISA = 0; //porta 輸出PORTA = 0x00; //先關閉所有顯示PORTD = 0x0f;PORTC = 0xff;}/***************************************************************************** 名 稱:scan()* 功 能:按鍵掃描* 入口參數:* 出口參數:****************************************************************************/void scan(){if (RB0 == 0) //判斷B0是否按下result = 0x1;if (RB1 == 0) //判斷B1是否按下result = 0x2;if (RB2 == 0) //判斷B2是否按下result = 0x3;if (RB3 == 0) //判斷B3是否按下result = 0x4;}/***************************************************************************** 名 稱:display()* 功 能:結果顯示* 入口參數:int x 要現實的數據* 出口參數:****************************************************************************/void display(int x){switch (x) //根據X值的不同,跳轉到相應的部分處理{case 0x1:PORTD = TABLE[0];PORTA = 0X3F;delay();break; //B0case 0x2:PORTD = TABLE[1];PORTA = 0X3F;delay();break; //B1case 0x3:PORTD = TABLE[2];PORTA = 0X3F;delay();break; //B2case 0x4:PORTD = TABLE[3];PORTA = 0X3F;delay();break; //B3case 0x8:PORTD = 0X71;PORTA = 0Xff;delay();break; //無按鍵下}}/***************************************************************************** 名 稱:delay()* 功 能:延時* 入口參數:* 出口參數:****************************************************************************/void delay() {int i; //定義整形變量for (i = 600;i--;); //延時}
評論