51单片机矩阵键盘检测问题
时间:10-02
整理:3721RD
点击:
不知道哪里有问题,按键按下去数码管都没反应
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
uchar num,temp;
sbit key1=P3^4;
sbit dula=P2^6;
sbit wela=P2^7;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71,0};
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void main()
{
dula=1;
P0=0;
dula=0;
wela=1;
P0=0xc0;
wela=0;
while(1)
{
P3=0xfe;
temp=P3;
temp=temp&0xf0;
while(temp!=0xf0)
{
delay(5);
temp=P3;
temp=temp&0xf0;
while(temp!=0xf0);
{
temp=P3;
switch(temp)
{
case 0xee:num=1;
break;
case 0xde:num=2;
break;
case 0xbe:num=3;
break;
case 0x7e:num=4;
break;
}
dula=1;
P0=table[num-1];
dula=0;
}
}
}
}
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
uchar num,temp;
sbit key1=P3^4;
sbit dula=P2^6;
sbit wela=P2^7;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71,0};
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void main()
{
dula=1;
P0=0;
dula=0;
wela=1;
P0=0xc0;
wela=0;
while(1)
{
P3=0xfe;
temp=P3;
temp=temp&0xf0;
while(temp!=0xf0)
{
delay(5);
temp=P3;
temp=temp&0xf0;
while(temp!=0xf0);
{
temp=P3;
switch(temp)
{
case 0xee:num=1;
break;
case 0xde:num=2;
break;
case 0xbe:num=3;
break;
case 0x7e:num=4;
break;
}
dula=1;
P0=table[num-1];
dula=0;
}
}
}
}
temp=temp&0xf0;
while(temp!=0xf0);
{
temp=P3;
上面while(temp!=0xf0);后面的;去掉试试,程序卡在那了
把电路图也发上来吧!
一看就知道是连菜鸟都不算的新手,程序逻辑都不懂。建议学一学画流程图。
针对你贴出来的问题,就在于两个while(temp!=0xf0),很明显你只是要判断temp和0xf0是不是相等,直接用if就可以,用while反而不可以。因为一旦条件成立,你的程序就在while(temp!=0xf0)那对花括号里出不来,除非你复位或者重新上电。
注意:逻辑很重要!
= =额,因为我后面还没把松手检测的程序加进去啊,加进去就能跳出来了。确实是渣渣新手,还在慢慢学习,希望大神多多赐教。
谢谢 = =确实是因为多了个;号。难怪没结果
