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

📄 keyboard.c

📁 周立功开发板
💻 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 + -