?? key.c
字號:
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar buff,times,j;
unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f, //0,1,2,3
0x66,0x6d,0x7d,0x07, //4,5,6,7
0x7f,0x6f,0x77,0x7c, //8,9,A,B
0x39,0x5e,0x79,0x71,0x00}; //C,D,E,F,null
unsigned char idata value[8];
void delay1ms(void) //消抖動
{ uchar i;
for(i=200;i>0;i--);
}
void delay5ms(void) //延時5ms
{
unsigned char i,j;
for(i=5;i>0;i--)
for(j=248;j>0;j--);
}
void key_scan(void) //鍵盤輸入掃描函數
{ uchar hang,lie,key;
P3=0xf0;
if((P3&0xf0)!=0xf0) //行碼為0,列碼為1
{ delay1ms();
if((P3&0xf0)!=0xf0) //有鍵按下,列碼變為0
{ hang=0xfe; //逐行掃描
times++;
if(times==9)
times=1;
while((hang&0x10)!=0) //掃描完4行后跳出
{ P3=hang;
if((P3&0xf0)!=0xf0) //本行有鍵按下
{ lie=(P3&0xf0)|0x0f;
buff=((~hang)+(~lie));
switch(buff)
{ case 0x28: key=0;break;
case 0x14: key=1;break;
case 0x24: key=2;break;
case 0x44: key=3;break;
case 0x12: key=4;break;
case 0x22: key=5;break;
case 0x42: key=6;break;
case 0x11: key=7;break;
case 0x21: key=8;break;
case 0x41: key=9;break;
case 0x81: key=10;break;
case 0x82: key=11;break;
case 0x84: key=12;break;
case 0x88: key=13;break;
case 0x48: key=14;break;
case 0x18: key=15;break;
}
value[times-1]=key; //按下的鍵值
}
else hang=(hang<<1)|0x01; //下一行掃描
}
}
}
}
void main(void)
{ uchar key;
while(1)
{ key_scan();
P0=0;
for(j=times;j>0;j--) //74LS138掃描
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -