?? main.c
字號:
#include <reg52.h>
#define ulong unsigned long
#define uint unsigned int
#define uchar unsigned char
extern void delay(unsigned int x);
unsigned char Tab_key[]= //行列式鍵盤映射
{0x00, //無鍵按下
'7','8','9','/',
'4','5','6','*',
'1','2','3','-',
'C','0','=','+',
//下面為按'C'同時再按的鍵:
'7','8','9','/',
'4','5','6','*',
'1','2','3','-',
'0','=','+',};
// P1口行列式鍵盤 //
#define KEYPIN_L P1 // 定義鍵掃描列端口為 P1
低四位輸入 //
#define KEYPIN_H P1 // 定義鍵掃描行端口為 P1高
四位掃描輸出 //
// P1口行列式鍵盤 //
//公用函數(shù)
unsigned char KeysCAN(void); // 鍵掃描函數(shù) //
//內(nèi)部私有函數(shù)
unsigned char fnKeycode(unsigned char key); // 根據(jù)鍵盤
映射表輸出順序鍵值 //
/*
// P1口行列式鍵盤 //
extern unsigned char KeysCAN(void); // 鍵掃描函數(shù)
//
*/
// P1口行列式鍵盤 //
//---------------------------------------------------------
------------------//
unsigned char KeysCAN(void) // 鍵掃描
函數(shù) //
{
unsigned char sccode,recode,keytemp = 0;
KEYPIN_L = KEYPIN_L|0x0f; // P1低四
位為列線輸入 //
KEYPIN_H = KEYPIN_H&0x0f; // P1高四
位為行線發(fā)全零掃描碼 //
if ((KEYPIN_L&0x0f) != 0x0f)
{
delay(10); // 延時
10 MS 消抖 //
if ((KEYPIN_L&0x0f) != 0x0f)
{
sccode = 0xef; // 逐行掃
描碼初值(1110 1111) //
while(sccode != 0xff) //將掃描4次
,keytemp為每次鍵值相 或的值 //
{
KEYPIN_H = sccode; // 輸出
行掃描碼 //
if ((KEYPIN_L&0x0f) != 0x0f) // 本行有
鍵按下 //
{
recode = (KEYPIN_L&0x0f)|0xf0; // 只
要低位,高位置1 //
keytemp |= (~sccode)+(~recode); //特
征碼(高位為列P3,低位為行KEYPIN_H) //
}
sccode = (sccode << 1)|0x01; // 掃描碼0
向高位移動 //
}
}
}
KEYPIN_H = KEYPIN_H|0xf0;
return(fnKeycode(keytemp));
}
//---------------------------------------------------------
------------------//
unsigned char fnKeycode(unsigned char key) // 根據(jù)鍵盤
映射表輸出順序鍵值 //
{
switch(key)
{
case 0x11: // 1 鍵 //
key = 0x01;
break;
case 0x21: // 2 鍵 //
key = 0x02;
break;
case 0x41: // 3 鍵 //
key = 0x03;
break;
case 0x81: // 4 鍵 //
key = 0x04;
break;
case 0x12: // 5 鍵 //
key = 0x05;
break;
case 0x22: // 6 鍵 //
key = 0x06;
break;
case 0x42: // 7 鍵 //
key = 0x07;
break;
case 0x82: // 8 鍵 //
key = 0x08;
break;
case 0x14: // 9 鍵 //
key = 0x09;
break;
case 0x24: // 10 鍵 //
key = 0x0A;
break;
case 0x44: // 11 鍵 //
key = 0x0B;
break;
case 0x84: // 12 鍵 //
key = 0x0C;
break;
case 0x18: // 13 鍵 //
key = 0x0D;
break;
case 0x28: // 14 鍵 //
key = 0x0E;
break;
case 0x48: // 15 鍵 //
key = 0x0F;
break;
case 0x88: // 16 鍵 //
key = 0x10;
break;
//以下為功能鍵//
case 0x19: // 'C' +1 鍵 //
key = 0x11;
break;
case 0x29: // 'C' +2 鍵 //
key = 0x12;
break;
case 0x49: // 'C' +3 鍵 //
key = 0x13;
break;
case 0x89: // 'C' +4 鍵 //
key = 0x14;
break;
case 0x1A: // 'C' +5 鍵 //
key = 0x15;
break;
case 0x2A: // 'C' +6 鍵 //
key = 0x16;
break;
case 0x4A: // 'C' +7 鍵 //
key = 0x17;
break;
case 0x8A: // 'C' +8 鍵 //
key = 0x18;
break;
case 0x1C: // 'C' +9 鍵 //
key = 0x19;
break;
case 0x2C: // 'C' +10 鍵 //
key = 0x1A;
break;
case 0x4C: // 'C' +11 鍵 //
key = 0x1B;
break;
case 0x8C: // 'C' +12 鍵 //
key = 0x1C;
break;
// case 0x18: // 'C' +13 鍵 //
// key = 0x1D;
// break;
case 0x38: // 'C' +14 鍵 //
key = 0x1D;
break;
case 0x58: // 'C' +15 鍵 //
key = 0x1E;
break;
case 0x98: // 'C' +16 鍵 //
key = 0x1F;
break;
default : // 無鍵 //
key = 0x00;
break;
}
return(Tab_key[key]);
}
/*---------------------------------------------------------*/
矩鍵查尋鍵值44程序與顯示
#i nclude <reg52.h>
//#i nclude <math.h>
#i nclude <intrins.h>
#define uchar unsigned char
#define TURE 1
#define FALSE 0
int key;
int del;
void Tkey(void);
void led(void);
/************主 程序*************/
void main(void)
{
void tkey(void);
void led(void);
void delay(int);
SCON=0x00;
TI=0;
while(TURE)
{
Tkey();
led();
delay(2000);
}
}
/********矩鍵查尋鍵值4*4程序******/按鍵為P1.0---P1.7
void Tkey(void)
{
uchar readkey;//rereadkey;
uchar x_temp,y_temp;
P1=0x0f;
x_temp=P1&0x0f;
if(x_temp==0x0f) goto keyout;
P1=0xf0;
y_temp=P1&0xf0;
readkey=x_temp|y_temp;
readkey=~readkey;
switch(readkey)
{
case 0x11:key=0; break;
case 0x21:key=1; break;
case 0x41:key=2; break;
case 0x81:key=3; break;
case 0x12:key=4; break;
case 0x22:key=5; break;
case 0x42:key=6; break;
case 0x82:key=7; break;
case 0x14:key=8; break;
case 0x24:key=9; break;
case 0x44:key=10;break;
case 0x84:key=11;break;
case 0x18:key=12;break;
case 0x28:key=13;break;
case 0x48:key=14;break;
case 0x88:key=15;break;
default: key=16;break;
}
keyout:_nop_();
}
/************顯示程序*************/
void led(void)
{uchar code LEDValue[]=
{0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90}; //0-9
uchar data num[6];
uchar k;
num[0]=0;
num[1]=0;
num[2]=0;
num[3]=0;
num[4]=key/10;
num[5]=key-(key/10)*10;
for(k=0;k<=5;k++)
{
SBUF=LEDValue[num[5-k]];
while(TI==0);
TI=0;
}
}
/************延時程序*************/
void delay(del)
{
for(del;del>0;del--);
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -