📄 key.c
字号:
/****************************************Copyright (c)**************************************************/
/**
;** 西南科技大学计算机科学学院
;**
;** http://www.cs.suswt.edu.cn
;**
;** 日期: 2007/10/08
;** 描述: 西南科技大学计算机学院CS-II型实验板键盘驱动工作程序,实现键盘轮转扫描,并显示相应
;** 数据
;** 作者:
;**
;**--------------key.c文件
;**------------------------------------------------------------------------------------------------------*/
/**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
#define _KEY_C_
#ifdef _KEY_C_
/************************************************
* Header File *
***********************************************/
#include"config.h"
#include"key.h"
/************************************************
* Globale variable *
***********************************************/
uint8 key_data=0x0f;//键盘初始状态
/*******************************************************************************
Function Name: void KEYShift(uint8 mode) *
Function Description : 进行轮转扫描时进行数据移位操作 *
*******************************************************************************/
void KEYShift(uint8 mode) //如果mode是0就将KEY_SI置零 如果mode是1就将KEY_SI置1
{
IO0CLR=KEY_RCLK; //RCLK=0x00
IO0CLR=KEY_SRCLK; //SRCLK=0
if((mode&0x01)==0x00) //该位为0
{
IO0CLR = KEY_SI;
}
else
{
IO0SET = KEY_SI;
}
IO0SET=KEY_SRCLK; //SLK=1
IO0SET=KEY_RCLK; //RCK=0x00
}
/*******************************************************************************
Function Name: uint8 KEYScan(void) *
Function Description : 键盘扫描函数,进行轮转扫描 *
*******************************************************************************/
uint8 tmp = 0x00;
uint8 KEYScan(void)
{
//KeyData变化范围为0x00----0x0f
//扫描过程
//先进行键盘判断上次键盘的判断
if((IO0PIN&KEY_KEY)==0) //有键按下(IO0PIN&KEY_KEY)== 0,即key位为0
{
tmp = key_data;
return key_data;
} //如果有键盘按下,连续对该键进行扫描,返回该键键值。
else
{
if(key_data==0x0f)
{
key_data=0x00;
KEYShift(0);
}
else
{
key_data++;
KEYShift(1);
}
return tmp;//0x10;
} //没有键盘按下,进行扫描轮转。
}
/*******************************************************************************
Function Name : void KEYInit(void) *
Function Description : 键盘的初始化程序,包括设置引脚链接模块,引脚输入输出设置*
*******************************************************************************/
void KEYInit(void)
{
PINSEL0&=KEY_PINSEL; //端口选择,这里选择P0.4~P0.7实现GPIO功能
IO0DIR|=KEY_SRCLK; //方向输出
IO0DIR|=KEY_RCLK; //方向输出
IO0DIR|=KEY_SI; //方向输出
IO0DIR&=(KEY_KEY^0XFFFFFFFF); //方向输入
}
#endif
/*****************************************************************************
* End of Entire File *
****************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -