key.c
来自「芯片at89s52」· C语言 代码 · 共 103 行
C
103 行
/******************************************************************************
* File Name: key.c *
* Create Time: 2007/07/14 *
* Description: *
* Copyright : *
* History : *
* |---Data---|---Author---|--Version--|--------------Description-------------|
*****************************************************************************/
//#define KEY_ONOFF
#ifdef KEY_ONOFF
/******************************
* Head File *
*****************************/
#include"key.h"
/******************************
* Global Variable *
*****************************/
int row=0; //键盘行数
int column=0;//键盘列数
uchar keybuf=0x00;//键盘按钮显示内容中间量*/
uchar keybit = 0;//用以计数键盘扫描行数
/******************************
* Const Segment *
*****************************/
uchar key_row[4] = {0x0e,0x0d,0x0b,0x07};//令键盘1-4行依次有效
/******************************
* Function Implement *
*****************************/
/**********************************************************************************************
Function Name:按键显示函数 *
Target : 将按键相应的数值显示在数码管上 *
Input Parameter : 8位的unsigned char *
Output Parameter : 无 *
Function Description : *
**********************************************************************************************/
uchar keyValue(uchar temp)
{
switch(temp&0xf0) //判断高四位的值
{
case 0x70:column = 0x00;break; //7位
case 0xb0:column = 0x04;break; //6
case 0xd0:column = 0x08;break; //5
case 0xe0:column = 0x0c;break; //4
}
switch(temp&0x0f) //判断第四位的值
{
case 0x0e:row = 0x00;break; //0
case 0x0d:row = 0x01;break; //1
case 0x0b:row = 0x02;break; //2
case 0x07:row = 0x03;break; //3
}
return row+column;
}
/**********************************************************************************************
Function Name:键盘按下函数 *
Target : 判断键盘是否按下 *
Input Parameter : 无 *
Output Parameter : 1或0 *
Function Description : 用全扫描的方法判断键盘是否有键按下,有键按下返回1,键值保存在中间量 *
temp中,没有返回0. *
**********************************************************************************************/
uchar isKeyDown(void)
{
P2=0xf0; //将低四位置0
if((P2&0xf0)<0xf0)//判断是否有键按下,即高四位不全为1即有键按下
{
keybuf=P2&0xf0;//保存高四位的值
P2=0x0f; //将高四位置0
keybuf|=P2&0x0f;//保存低四位的值
return 0x01;
}
return 0x00; //输出该键值
}
/**********************************************************************************************
Function Name:对按下键的操作函数 *
Target : 按下相应键做相应功能 *
Input Parameter : 无 *
Output Parameter : 无 *
Function Description : 若有键按下,显示键码 *
**********************************************************************************************/
void keyOperate(void)
{
if(isKeyDown()==0x01)
DisPrint(keyValue(keybuf));
}
uchar downKeyValue()
{
return keybuf;
}
/**********************************************************************************************
Function Name:定时器0中断函数 *
Target : 定时器中断并产生相应功能 *
Input Parameter : 无 *
Output Parameter : 无 *
Function Description : 间隔2.5ms产生一次中断 *
**********************************************************************************************/
#endif
/*******************************************************************************
* The end of the entire file *
******************************************************************************/
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?