求大神来指点一下渣渣啊!按键控制流水灯的问题!
时间:10-02
整理:3721RD
点击:
今天做单片机实验老师要我写一个关于按键控制流水灯的程序。是这样的,按第一个按键第一个流水灯亮,松开流水灯灭;按第二个按键亮两个流水灯,松开流水灯灭;这样依次到第八个按键。我写了很久但是都无法实现功能,大神快来救救我这个渣渣啊!万分感谢~
程序如下,求大神告诉我错在哪以及该如何写。谢谢啦啦啦啦啦!
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table[]={
0xfe,0xfc,0xf8,0xf0,
0xe0,0xc0,0x80,0x00};
void delayms(uint xms)
{
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
void display(uchar num)
{
P1=table[num];
}
void matrixkeyscan()
{
uchar temp,key;
P3=0xfe;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delayms(10);
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
temp=P3;
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)
{
P1=0xff;
}
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
display(key);
}
}
P3=0xfd;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delayms(10);
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
temp=P3;
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)
{
P1=0xff;
}
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
display(key);
}
}
}
void main()
{
P1=0xff;
while(1)
{
matrixkeyscan();
}
}
程序如下,求大神告诉我错在哪以及该如何写。谢谢啦啦啦啦啦!
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table[]={
0xfe,0xfc,0xf8,0xf0,
0xe0,0xc0,0x80,0x00};
void delayms(uint xms)
{
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
void display(uchar num)
{
P1=table[num];
}
void matrixkeyscan()
{
uchar temp,key;
P3=0xfe;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delayms(10);
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
temp=P3;
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)
{
P1=0xff;
}
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
display(key);
}
}
P3=0xfd;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delayms(10);
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
temp=P3;
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)
{
P1=0xff;
}
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
display(key);
}
}
}
void main()
{
P1=0xff;
while(1)
{
matrixkeyscan();
}
}
自己顶一下~~~~
沉了惹
