#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
void delay(uint xms)
{
uint i,j;
for(i=xms;i>0;i++)
for(j=110;j>0;j--);
}
void display(uchar num)
{
P0=table[num];
}
void keyscan()
{
uchar temp,key;
P1=0xfe;
temp=P1;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(10);
temp=P1;
temp=temp&0xf0;
if(temp!=0xf0)
{
temp=P1;
switch(temp)
{
case 0xee: key=0; break;
case 0xde: key=1; break;
case 0xbe: key=2; break;
case 0x7e: key=3; break;
}
while(temp!=0xf0)
{
temp=P1;
temp=temp&0xf0;
}
display(key);
}
}
P1=0xfd;
temp=P1;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(10);
temp=P1;
temp=temp&0xf0;
if(temp!=0xf0)
{
temp=P1;
switch(temp)
{
case 0xed: key=4; break;
case 0xdd: key=5; break;
case 0xbd: key=6; break;
case 0x7d: key=7; break;
}
while(temp!=0xf0)
{
temp=P1;
temp=temp&0xf0;
}
display(key);
}
}
P1=0xfb;
temp=P1;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(10);
temp=P1;
temp=temp&0xf0;
if(temp!=0xf0)
{
temp=P1;
switch(temp)
{
case 0xeb: key=8; break;
case 0xdb: key=9; break;
case 0xbb: key=10; break;
case 0x7b: key=11; break;
}
while(temp!=0xf0)
{
temp=P1;
temp=temp&0xf0;
}
display(key);
}
}
P1=0xf7;
temp=P1;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(10);
temp=P1;
temp=temp&0xf0;
if(temp!=0xf0)
{
temp=P1;
switch(temp)
{
case 0xe7: key=12; break;
case 0xd7: key=13; break;
case 0xb7: key=14; break;
case 0x77: key=15; break;
}
while(temp!=0xf0)
{
temp=P1;
temp=temp&0xf0;
}
display(key);
}
}
}
void main()
{
P0=0X00;
while(1)
{
keyscan();
}
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
sbit dula=P2^6;
sbit wela=P2^7;
unsigned char code segnum[16] =
{0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
void delay(int n)
{
int i = 0;
int j = 0;
for(i = 0; i < n; i++)
for(j = 110; j < n; j++);
}
void main()
{
wela = 1;
P0 = 0xc0;
wela = 0;
while(1)
{
int temp = 0;
int i = 0;
for (i = 0; i < 4; i++)
{
temp = P3 = 0xff & ~(1<<i);
temp = P3 & temp;
delay(5);
temp = P3 & temp;
switch(temp | 0x0f)
{
case 0xef:
{
dula = 1;
P0 = segnum[i*4];
dula = 0;
}
break;
case 0xdf:
{
dula = 1;
P0 = segnum[i*4+1];
dula = 0;
}
break;
case 0xbf:
{
dula = 1;
P0 = segnum[i*4+2];
dula = 0;
}
break;
case 0x7f:
{
dula = 1;
P0 = segnum[i*4+3];
dula = 0;
}
break;
default:
{
dula = 1;
P0 = 0x00;
dula = 0;
}
break;
}
}
}
}
C:UsersdongzhiDesktop无标题.jpg
一周热门 更多>