⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 key.c

📁 基于MSP430F14X单片机的红外接收程序
💻 C
字号:
/*****************************************************************************
* 文件名:   Key.c
* Copyright (c) 2008 *********武汉理工大学信息工程学院电信系
* 创建人:   王康
* 日 期:   2008.8.13
* 修改人:   王康
* 日 期:
* 描 述:   本文件定义了供调用的用户外部函数,是关于板上5个按键的驱动程序,函数名
*           均以Key开头.
* 接  口:       K1          K1--P1.4        K2--P5.7
*           K2  K5  K4      K3--P8.6        K4--P5.5
*               K3          K5--P5.4
* 版 本:   IAR V4.11
******************************************************************************/


//头文件
#include "config.h"


/*****************************************************************************
* 函数名:    Key_Init
* 输 入:   无
* 输 出:   无
* 功能描述: 本函数为键盘初始化子函数
* 全局变量: 无
* 调用模块: 无
* 作 者:   王康
* 日 期:   2008.8.13
* 修 改:   王康
* 日 期:
* 版  本:   IAR V4.11
******************************************************************************/
void Key_Init(void)
{
    g_KeyPressed = 0;    
    g_KeyVal = 0;
    g_KeyFlag = 0; 
    P1DIR = 0xef;                       //P1.4为输入,其余为输出模式   
    P5DIR = 0x0f;                       //P5.4~P5.7为输入,其余为输出模式
}


/*****************************************************************************
* 函数名:   Key_Delay
* 输 入:   无
* 输 出:   无
* 功能描述: 本函数为延时子函数,主要用于按键去抖
* 全局变量: 无
* 调用模块: 无
* 作 者:   王康
* 日 期:   2008.8.13
* 修 改:   王康
* 日 期:
* 版  本:   IAR V4.11
******************************************************************************/
void Key_Delay(void)
{
    uchar   t = 100;
    while(t--);
}


/*****************************************************************************
* 函数名:   Key_Check
* 输 入:   无
* 输 出:   无
* 功能描述: 本函数为获取键值子函数,用来检查按键,确认键值
* 全局变量: 无
* 调用模块: 无
* 作 者:   王康
* 日 期:   2008.8.13
* 修 改:   王康
* 日 期:
* 版  本:   IAR V4.11
******************************************************************************/
void Key_Check(void)
{
    uchar   temp1;
    uchar   temp2;
    temp2 = P1IN & 0x10;
    temp1 = (P5IN & 0xf0) | (temp2 >> 1);
    switch(temp1)
    {
        case 0xf0 : g_KeyVal = 1;
                    break;
        case 0x78 : g_KeyVal = 2;
                    break;
        case 0xb8 : g_KeyVal = 3;
                    break;
        case 0xd8 : g_KeyVal = 4;
                    break;
        case 0xe8 : g_KeyVal = 5;
                    break;
        default :   break;
    }
}


/*****************************************************************************
* 函数名:   Key_Event
* 输 入:   无
* 输 出:   无
* 功能描述: 本函数为按键查询子函数,用来检测键盘是否有键按下,若有则获取键值
* 全局变量: 无
* 调用模块: 无
* 作 者:   王康
* 日 期:   2008.8.13
* 修 改:   王康
* 日 期:
* 版  本:   IAR V4.11
******************************************************************************/
void Key_Event(void)
{
    uchar   temp1;
    uchar   temp2;
    temp2 = P1IN & 0x10;                //读取P1.4的状态
    //将5个按键的状态全部读入到temp1中,并且依次存放在temp1的高5位中
    temp1 = (P5IN & 0xf0) | (temp2 >> 1);
    if((g_KeyPressed == 0) & ((temp1 & 0xf8) < 0xf8))
    {                                   //若g_KeyPressed为0,且有键按下
        Key_Delay();                    //延时去抖
        if((g_KeyPressed == 0) & ((temp1 & 0xf8) < 0xf8))
        {
            g_KeyPressed = 1;           //如果有键按下,则置位g_KeyPressed标志
            Key_Check();                //调用获取键值子函数
        }
    }
    else if((g_KeyPressed == 1) & ((temp1 & 0xf8) == 0xf8))
    {
        g_KeyPressed = 0;               //键已释放则复位g_KeyPressed标志
        g_KeyFlag = 1;                  //置位g_KeyFlag标志,表示可以读出已获取的键值                
    }
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -