控制4x4矩陣鍵盤,當1號鍵按下以后數碼管顯示1,2號鍵按下時顯示2,...,當10號按鍵按下時顯示A,...,當15號按鍵按下時顯示F,當16號鍵按下時顯示 error,而初次開機的時候顯示 HELLO...
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
uchar code smg_duan[]={0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7c,0x39,0x5e,0x79,0x71};
uchar code smg_wei[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
uchar code smg_open[]={0x80,0x80,0x80,0x3f,0x38,0x38,0x79,0x76};
uchar code smg_error[]={0x50,0x5c,0x50,0x50,0x79};
void delay(uint);
uchar keyscan();
void error_display();
void open_display();
sbit C_JA=P2^0;
sbit C_JB=P2^1;
uchar keyboard,num;
void main()
{
num=17;
C_JA=0;
C_JB=0;
P1=0x7f;
C_JA=1;
C_JA=0;
while(num==17)
{
open_display();
keyscan();
}
while(1)
{
if(num==15)
{
error_display();
}
P1=0x7f;
C_JA=1;
C_JA=0;
P1=smg_duan[num];
C_JB=1;
C_JB=0;
keyscan();
}
}
uchar keyscan()
{
P0=0xfe;
keyboard=P0;
keyboard=keyboard&0xf0;
if(keyboard!=0xf0)
{
delay(6);
keyboard=P0;
keyboard=keyboard&0xf0;
if(keyboard!=0xf0)
{
switch(keyboard)
{
case 0xe0:num=3;
break;
case 0xd0:num=2;
break;
case 0xb0:num=1;
break;
case 0x70:num=0;
break;
}
}
}
P0=0xfd;
keyboard=P0;
keyboard=keyboard&0xf0;
if(keyboard!=0xf0)
{
delay(6);
keyboard=P0;
keyboard=keyboard&0xf0;
if(keyboard!=0xf0)
{
switch(keyboard)
{
case 0xe0:num=7;
break;
case 0xd0:num=6;
break;
case 0xb0:num=5;
break;
case 0x70:num=4;
break;
}
}
}
P0=0xfb;
keyboard=P0;
keyboard=keyboard&0xf0;
if(keyboard!=0xf0)
{
delay(6);
keyboard=P0;
keyboard=keyboard&0xf0;
if(keyboard!=0xf0)
{
switch(keyboard)
{
case 0xe0:num=11;
break;
case 0xd0:num=10;
break;
case 0xb0:num=9;
break;
case 0x70:num=8;
break;
}
}
}
P0=0xf7;
keyboard=P0;
keyboard=keyboard&0xf0;
if(keyboard!=0xf0)
{
delay(6);
keyboard=P0;
keyboard=keyboard&0xf0;
if(keyboard!=0xf0)
{
switch(keyboard)
{
case 0xe0:num=15;
break;
case 0xd0:num=14;
break;
case 0xb0:num=13;
break;
case 0x70:num=12;
break;
}
}
}
return num;
}
void error_display()
{
uchar i;
for(i=0;i<5;i++)
{
P1=smg_wei[i];
C_JA=1;
C_JA=0;
P1=smg_error[i];
C_JB=1;
C_JB=0;
delay(3);
P1=0x00;
C_JB=1;
C_JB=0;
}
}
void open_display()
{
uchar i;
for(i=0;i<8;i++)
{
P1=smg_wei[i];
C_JA=1;
C_JA=0;
P1=smg_open[i];
C_JB=1;
C_JB=0;
delay(4);
P1=0x00;
C_JB=1;
C_JB=0;
}
}
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=70;y>0;y--);
} |