- 晓月
-
#include<reg51.h>
#define uchar unsigned char;
uchar distab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff};
void delay(unsigned int a)
{
unsigned int i,j;
for(i=0;i<a;i++)
for(j=0;j<1000;j++);
}
uchar kbscan(void)
{
unsigned char sccode,recode;
P2=0x0f; //发0扫描,列线输入
if ((P2 & 0x0f) != 0x0f) //有键按下
{
delay(20); //延时去抖动
if ((P2&0x0f)!= 0x0f)
{
sccode = 0xef; //逐行扫描初值
while((sccode&0x01)!=0)
{
P2=sccode;
if((P2&0x0f)!=0x0f)
{
recode=(P2&0x0f)|0xf0;
return((~sccode)+(~recode));
}
else
sccode=(sccode<<1)|0x01;
}
}
}
return 0; //无键按下,返回0
}
void getkey(void)
{
unsigned char key;
key=kbscan();
if(key==0)return;
switch(key)
{
case 0x11:P1=distab[0];break;
case 0x12:P1=distab[1];break;
case 0x14:P1=distab[2];break;
case 0x18:P1=distab[3];break;
case 0x21:P1=distab[4];break;
case 0x22:P1=distab[5];break;
case 0x24:P1=distab[6];break;
case 0x28:P1=distab[7];break;
case 0x41:P1=distab[8];break;
case 0x42:P1=distab[9];break;
case 0x44:P1=distab[10];break;
case 0x48:P1=distab[11];break;
case 0x81:P1=distab[12];break;
case 0x82:P1=distab[13];break;
case 0x84:P1=distab[14];break;
case 0x88:P1=distab[15];break;
default:P1=distab[16];break;
}
}
main()
{
while(1)
{
getkey();
}
}
- LuckySXyd
-
功能:静态共阳数码管显示矩阵键盘的键值
#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
#define key P2
#define led P0
//定义全局变量
uchar code table []=
{0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,
0xc6,0xa1,0x86,0x8e};
uchar temp,num;
//函数声明
void delay10ms(uint t);
void main(){
temp=0;
num=0;
led=0xff;
while(1){
key=0xfe;
temp=key;
temp=temp&0xf0;
if(temp!=0xf0){
delay10ms(1);
temp=key;
temp=temp&0xf0;
if(temp!=0xf0){
switch(temp){
case 0xe0: num=1;led=table[num-1];break;
case 0xd0: num=2;led=table[num-1];break;
case 0xb0: num=3;led=table[num-1];break;
case 0x70: num=4;led=table[num-1];break;
}
}
}
key=0xfd;
temp=key;
temp=temp&0xf0;
if(temp!=0xf0){
delay10ms(1);
temp=key;
temp=temp&0xf0;
if(temp!=0xf0){
switch(temp){
case 0xe0: num=5;led=table[num-1];break;
case 0xd0: num=6;led=table[num-1];break;
case 0xb0: num=7;led=table[num-1];break;
case 0x70: num=8;led=table[num-1];break;
}
}
}
key=0xfb;
temp=key;
temp=temp&0xf0;
if(temp!=0xf0){
delay10ms(1);
temp=key;
temp=temp&0xf0;
if(temp!=0xf0){
switch(temp){
case 0xe0: num=9;led=table[num-1];break;
case 0xd0: num=10;led=table[num-1];break;
case 0xb0: num=11;led=table[num-1];break;
case 0x70: num=12;led=table[num-1];break;
}
}
}
key=0xf7;
temp=key;
temp=temp&0xf0;
if(temp!=0xf0){
delay10ms(1);
temp=key;
temp=temp&0xf0;
if(temp!=0xf0){
switch(temp){
case 0xe0: num=13;led=table[num-1];break;
case 0xd0: num=14;led=table[num-1];break;
case 0xb0: num=15;led=table[num-1];break;
case 0x70: num=16;led=table[num-1];break;
}
}
}
}
}
//延时10ms
void delay10ms(uint t){
uchar i,j;
for(t;t>0;t--)
for(i=38;i>0;i--)
for(j=130;j>0;j--);
}
- Chen
-
只要按键程序,不需要显示?