?? key.c
字號:
#include <AT89X52.h>
#include "typedef.h"
#define Nothing 100
//端口定義
sbit C1 = P2^3;
sbit C2 = P2^4;
sbit C3 = P3^2;
sbit C4 = P3^3;
sbit R1 = P3^4;
sbit R2 = P3^5;
sbit R3 = P3^0;
sbit R4 = P3^1;
uchar Key=Nothing; //鍵盤緩沖寄存器(公有數據)
uchar Fn_Key; //功能鍵
//*********************************************************************
//= 函數原型: void KEYPAD_Scan(char* const Key, char* const Fn_Key)
//= 功 能: 掃描鍵盤
//= 參 數: 普通鍵New_Key,功能鍵New_FuncKey,緩存器的指針
//= 返 回 值:
//= 函數性質:私有函數
//**********************************************************************
void KEYPAD_Scan(char* const Key, char* const Fn_Key)
{
C1 = 0;
if (R1 == 0) *Fn_Key = 'o'; //ON鍵
if (R2 == 0) *Key = 0;
if (R3 == 0) *Fn_Key = '=';
if (R4 == 0) *Key = '+';
C1 = 1;
C2 = 0;
if (R1 == 0) *Key = 1;
if (R2 == 0) *Key = 2;
if (R3 == 0) *Key = 3;
if (R4 == 0) *Key = '-';
C2 = 1;
C3 = 0;
if (R1 == 0) *Key = 4;
if (R2 == 0) *Key = 5;
if (R3 == 0) *Key = 6;
if (R4 == 0) *Key = '*';
C3 = 1;
C4 = 0;
if (R1 == 0) *Key = 7;
if (R2 == 0) *Key = 8;
if (R3 == 0) *Key = 9;
if (R4 == 0) *Key = '/';
C4 = 1;
}
//*********************************************************************
//= 函數原型: void KEY_Update()
//= 功 能: 鍵盤緩沖寄存器更新程序. 普通鍵Key, 功能鍵Fn_Key
//= 參 數:
//= 返 回 值:
//= 函數性質:公有函數
//**********************************************************************
void KEY_Update()
{
static uchar delay=20; //去抖動延時
static bit delaying=0; //標識是否正在延時
if(delaying==0)
{
if(Key==Nothing) //如果Key緩存器中的數據未被讀取,則不掃描鍵盤
{
KEYPAD_Scan(&Key,&Fn_Key); //掃描鍵盤
if(Key!=Nothing)
{
delaying=1;
Key=Nothing;
}
}
}
else
{
if(delay==0) //延時結束
{
KEYPAD_Scan(&Key,&Fn_Key); //讀取鍵盤
delay=20;
delaying=0;
}
else delay--; //延時減一
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -