51单片机矩阵键盘检测问题

2019-07-15 15:56发布

不知道哪里有问题,按键按下去数码管都没反应
#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;       

}

}
               
                }
}


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
5条回答
lanxihong
1楼-- · 2019-07-15 17:01
 精彩回答 2  元偷偷看……
changhaozhe
2楼-- · 2019-07-15 20:29
把电路图也发上来吧!
1522495332
3楼-- · 2019-07-16 02:06
一看就知道是连菜鸟都不算的新手,程序逻辑都不懂。建议学一学画流程图。
针对你贴出来的问题,就在于两个while(temp!=0xf0),很明显你只是要判断temp和0xf0是不是相等,直接用if就可以,用while反而不可以。因为一旦条件成立,你的程序就在while(temp!=0xf0)那对花括号里出不来,除非你复位或者重新上电。
注意:逻辑很重要!!!
a62501536
4楼-- · 2019-07-16 03:54
1522495332 发表于 2015-10-15 21:47
一看就知道是连菜鸟都不算的新手,程序逻辑都不懂。建议学一学画流程图。
针对你贴出来的问题,就在于两个while(temp!=0xf0),很明显你只是要判断temp和0xf0是不是相等,直接用if就可以,用while反而不可以。因为一旦条件成立,你的程序就在while(temp!=0xf0)那对花括号里出不来,除非你复位或者重新上电。
注意:逻辑很重 ...

= =额,因为我后面还没把松手检测的程序加进去啊,加进去就能跳出来了。。。确实是渣渣新手,还在慢慢学习,希望大神多多赐教。。。
a62501536
5楼-- · 2019-07-16 04:36
lanxihong 发表于 2015-10-15 21:34
temp=temp&0xf0;
                                while(temp!=0xf0);
                                {

谢谢 = =确实是因为多了个;号。。。难怪没结果

一周热门 更多>