/******************************************** *** 功能:1X4按键 *** 实验内容:按下S1 S2 S3 S4 数码管分别显示出0 1 2 3 *** 开发板连接方法:把J3的的跳线帽跳到1-2(左边) *********************************************/ #include<pic.h> //包含单片机内部资源预定义 __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; //开始时显示F init(); //调用初始化函数 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; //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() * 功 能:延时 * 入口参数: * 出口参数: ****************************************************************************/ void delay() { int i; //定义整形变量 for (i = 600;i--;); //延时 }