专注电子技术学习与研究
当前位置:单片机教程网 >> MCU设计实例 >> 浏览文章

PIC单片机1X4独立键盘C语言程序

作者:huqin   来源:本站原创   点击数:  更新时间:2014年03月31日   【字体:
/********************************************
*** 功能: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--;);     //延时
}
关闭窗口

相关文章