📄 keyboard.c
字号:
/****************************************Copyright (c)**************************************************/
/**
;** 西南科技大学计算机科学学院
;**
;** http://www.cs.suswt.edu.cn
;**
;** 日期: 2006.4.1
;** 描述: DataLedDriver.c 西南科技大学计算机学院CS-II型实验板数码管工作程序,控制
;** 数码管底层显示功能,负责将数据传输到目标,并控制595对数码管键盘进行扫描,
;** 完成键盘工作的功能,该文件给DataLed.c提供底层接口
;** 作者:
;**
;**--------------Keyboard.c文件
;**------------------------------------------------------------------------------------------------------*/
/**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
#define _KEYBOARD_C_
#ifdef _KEYBOARD_C_
/************************************************
* Header File *
***********************************************/
#include "config.h"
#include "Keyboard.h"
/*************************************************
名称:KEYBInit
功能:初使化端口为IO口
*************************************************/
void KEYBNumInit(void);
void KEYBInit(void)
{
PINSEL0 &= KEYB_IO;
IO0DIR |= KEYB_SCK;
IO0DIR |= KEYB_RCK;
IO0DIR |= KEYB_SI;
IO0DIR &= (KEYB_KEY ^ 0xffffffff);
KEYBNumInit(); //初使化74HC595使其全部为1
}
/*************************************************
名称:KEYBSendData(uint16 keydata)
功能:把一个十六位的数据通过74HC595传给相应的端口
*************************************************/
void KEYBSendData(uint16 keydata)
{
uint8 counter;
IO0CLR = KEYB_RCK;
for(counter = 0; counter < 16; counter++)
{
IO0CLR = KEYB_SCK;
if((keydata & 0x0001) == 0x0000)
{
IO0CLR = KEYB_SI;
}
else
{
IO0SET = KEYB_SI;
}
IO0SET = KEYB_SCK;
}
IO0SET = KEYB_SCK;
}
/*************************************************
名称:KEYBNumInit()
功能:键盘扫描的数据初使化,全部为1
*************************************************/
void KEYBNumInit()
{
KEYBSendData(0xffff);
}
/*************************************************
名称:KEYBShift(uint8 data)
功能:移位,把74HC595全部向下移一位,在顶部加上0或1
*************************************************/
void KEYBShift(uint8 data)
{
IO0CLR = KEYB_RCK; //如果为0则在74HC595顶部加上0,否则为1
IO0CLR = KEYB_SCK;
if((data & 0x01) == 0x00)
{
IO0CLR = KEYB_SI;
}
else
{
IO0SET = KEYB_SI;
}
IO0SET = KEYB_SCK;
IO0SET = KEYB_RCK;
}
/*************************************************
名称:KEYBScan()
功能:键盘扫描函数,返回按下的键值
*************************************************/
uint8 KeyData = 0x0f; //合局变量,初使化为0x0f因为这样可以初使化扫描函数
uint8 KEYBScan()
{
if((IO0PIN & KEYB_KEY) == 0)
{
return KeyData;
}
else
{
if(KeyData == 0x0f) //如果KeyData为初使值或是溢出,执行键盘扫描的初使化
{
KeyData = 0;
KEYBShift(0); //些时所有的键盘的输出为1,要扫描必须要置1个0
}
else
{
KeyData++;
KEYBShift(1); //在74HC595顶部加上1个1,这样可以使0向下移一位,实现逐位扫描
}
return (0xff);
}
}
#endif
/*****************************************************************************
* End of Entire File *
****************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -