📄 keyboard.c
字号:
/****************************************Copyright (c)**************************************************/
/**
;** 西南科技大学计算机科学学院
;**
;** http://www.cs.suswt.edu.cn
;**
;** 日期: 2007.09.21
;** 描述: keyboard.c 西南科技大学计算机学院CS-II型实验板键盘工作程序,控制
;** 键盘扫描功能,负责将数据传输到目标,并控制595对键盘进行扫描,
;** 完成键盘工作的功能
;** 作者:miracle
;**
;**--------------keyboard.c文件
;**------------------------------------------------------------------------------------------------------*/
/**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
#define _KEYBOARD_C_
#ifdef _KEYBOARD_C_
/************************************************
* Header File *
***********************************************/
#include "config.h"
#include "keyboard.h"
/************************************************
* Globale variable *
***********************************************/
uint8 gc_key_bit = 0x00;
/******************************************************************************
* Function Name: KEYInit *
* Description : 键盘端口初始化 *
*****************************************************************************/
void KEYInit(void)
{
PINSEL0 &= KEYBOARD_SMAT;
IO0DIR |= KEYBOARD_SCK;
IO0DIR |= KEYBOARD_RCK;
IO0DIR |= KEYBOARD_SI;
IO0DIR &= (KEYBOARD_KEY^0XFFFFFFFF);
}
/******************************************************************************
* Function Name: KEYSendWord
* Description : 向595端口传一个字数据。用来选重键盘位的。其中比有且只有一位为0 *
*****************************************************************************/
void KEYSendWord(uint16 display_data)
{
uint8 send_keycount;
IO0CLR=KEYBOARD_RCK;
for(send_keycount=0x00;send_keycount<0x10;send_keycount++)
{
IO0CLR=KEYBOARD_SCK;
if((display_data&(0x01<<send_keycount))==0x00)//注意运算符号的优先级
{
IO0CLR = KEYBOARD_SI;
}
else
{
IO0SET = KEYBOARD_SI;
}
IO0SET=KEYBOARD_SCK;
}
IO0SET=KEYBOARD_RCK;
}
/******************************************************************************
* Function Name: KEYSendBit *
* Description : 向595端口传输一位为1的数据,可以通过它让595中的数据移位 *
*****************************************************************************/
void KEYSendBit()
{
IO0CLR=KEYBOARD_RCK;
IO0CLR=KEYBOARD_SCK;
IO0SET=KEYBOARD_SI;
IO0SET=KEYBOARD_SCK;
IO0SET=KEYBOARD_RCK;
}
/******************************************************************************
* Function Name: KEYScan *
* Description : 扫描键盘,并给予返回值,扫描的方式是通过移位的方式来进行的 *
*****************************************************************************/
uint8 KEYScan(void)
{
/*for(Key_Bit=0x00;Key_Bit<0x10;Key_Bit++)
{
if(Key_Bit==0x00)
{
Keyboard_Sendword(0x7fff);
}
else
{
//Speak();
Keyboard_Sendbit();
}
if((IO0PIN&Keyboard_KEY)==0)
{
//Speak();
if(Key_Bit==0)
{
Speak();
}
return Key_Bit;
}
}
return 0xff;*/
//Speak();
if(gc_key_bit==0x00) //两处注释分别为另外两种方法
{
KEYSendWord(0x7fff);
}
else
{
KEYSendBit();
}
if((IO0PIN&KEYBOARD_KEY)==0x00)
{
//Speak();
return gc_key_bit;
}
gc_key_bit++;
if(gc_key_bit==0x10)
{
gc_key_bit=0x00;
}
if((IO0PIN&KEYBOARD_KEY)!=0)
{
//Speak();
return 0xff;
}
/* if((IO0PIN&Keyboard_KEY)==0)
{
return Key_Bit;
}
else
{
if(Key_Bit==0x0f)
{
Key_Bit=0;
Keyboard_Sendword(0x7fff);
}
else
{
Key_Bit++;
Keyboard_Sendbit();
}
return 0xff;
}*/
return 0;
}
#endif
/*****************************************************************************
* End of Entire File *
****************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -