/********************************************
*** 功能:1X4按鍵
*** 實(shí)驗(yàn)內(nèi)容:按下S1 S2 S3 S4 數(shù)碼管分別顯示出0 1 2 3
*** 開發(fā)板連接方法:把J3的的跳線帽跳到1-2(左邊)
*********************************************/
#include<pic.h> //包含單片機(jī)內(nèi)部資源預(yù)定義
__CONFIG(0xFF32);
//芯片配置字,看門狗關(guān),上電延時(shí)開,掉電檢測(cè)關(guān),低壓編程關(guān),加密,4M晶體HS振蕩
const unsigned char TABLE[] = {0x3f,0x6,0x5b,0x4f,0x66};
int result;
void delay(); //delay函數(shù)申明
void init(); //I/O口初始化函數(shù)申明
void scan(); //按鍵掃描程序申明
void display(int x); //顯示函數(shù)申明
/****************************************************************************
* 名 稱:main()
* 功 能:
* 入口參數(shù):
* 出口參數(shù):
****************************************************************************/
void main()
{
result = 0x8; //開始時(shí)顯示F
init(); //調(diào)用初始化函數(shù)
while (1) //死循環(huán)
{
scan(); //調(diào)用按鍵掃描程序
display(result); //調(diào)用結(jié)果顯示程序
}
}
/****************************************************************************
* 名 稱:init()
* 功 能:初始化
* 入口參數(shù):
* 出口參數(shù):
****************************************************************************/
void init()
{
TRISB = 0X0F; //設(shè)置B口低4位為輸入
TRISD = 0; //portd 輸出
TRISC = 0xf0;
TRISA = 0; //porta 輸出
PORTA = 0x00; //先關(guān)閉所有顯示
PORTD = 0x0f;
PORTC = 0xff;
}
/****************************************************************************
* 名 稱:scan()
* 功 能:按鍵掃描
* 入口參數(shù):
* 出口參數(shù):
****************************************************************************/
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()
* 功 能:結(jié)果顯示
* 入口參數(shù):int x 要現(xiàn)實(shí)的數(shù)據(jù)
* 出口參數(shù):
****************************************************************************/
void display(int x)
{
switch (x) //根據(jù)X值的不同,跳轉(zhuǎn)到相應(yīng)的部分處理
{
case 0x1:
PORTD = TABLE[0];PORTA = 0X3F;delay();break; //B0
case 0x2:
PORTD = TABLE[1];PORTA = 0X3F;delay();break; //B1
case 0x3:
PORTD = TABLE[2];PORTA = 0X3F;delay();break; //B2
case 0x4:
PORTD = TABLE[3];PORTA = 0X3F;delay();break; //B3
case 0x8:
PORTD = 0X71;PORTA = 0Xff;delay();break; //無按鍵下
}
}
/****************************************************************************
* 名 稱:delay()
* 功 能:延時(shí)
* 入口參數(shù):
* 出口參數(shù):
****************************************************************************/
void delay()
{
int i; //定義整形變量
for (i = 600;i--;); //延時(shí)
}