打印

扫描按键的问题,求大神

[复制链接]
1058|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Elorylove|  楼主 | 2014-10-30 14:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit dula=P2^6;
sbit wela=P2^7;
sbit key1=P3^4;
sbit key2=P3^5;
sbit key3=P3^6;
sbit key4=P3^7;

uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
uchar num,temp;

void delay(uint z)
{
        uint x,y;
        for(x=z;x>0;x--)
                for(y=110;y>0;y--);
}

void main()
{
        wela=1;
        P0=0x00;
        wela=0;
        while(1)
        {
                P3=0xfe;
                temp=P3;
                temp=temp&0xf0;
       
                                  
                while(temp!=0xf0)
                {        delay(5);
                        temp=P3;
                        temp=temp&0xf0;
                        while(temp!=0xf0)
                        {
                                switch(temp)
                                {        case 0xe0: num=1;break;
                                        case 0xd0: num=2;break;
                                        case 0xb0: num=3;break;
                                        case 0x70: num=4;break;}                   
                        dula=1;
                        P0=table[num-1];
                        dula=0;
                        break;
       
                        }        
                   break;
                   }


                   P3=0xfd;
                        temp=P3;
                        temp=temp&0xf0;
               
                  
                        while(temp!=0xf0)
                                {
                                        delay(5);
                                        temp=P3;
                                        temp=temp&0xf0;
                                        while(temp!=0xf0)
                                        {
                                                temp=P3;
                                        switch(temp)
                                                {
                                                        case 0xed:num=5;
                                                                break;
                                                        case 0xdd:num=6;
                                                                break;
                                                        case 0xbd:num=7;
                                                                break;
                                                        case 0x7d:num=8;
                                                                break;
                                                }                  
                        dula=1;
                        P0=table[num-1];
                        dula=0;
                        break;
       
                                        }        
                   break;
                                }
                               
                        P3=0xf7;
                        temp=P3;
                        temp=temp&0xf0;
                        while(temp!=0xf0)
                                {
                                        delay(5);
                                        temp=P3;
                                        temp=temp&0xf0;
                                        while(temp!=0xf0)
                                        {
                                                temp=P3;
                                        switch(temp)
                                                {
                                                        case 0xe7:num=13;
                                                                break;
                                                        case 0xd7:num=14;
                                                                break;
                                                        case 0xb7:num=15;
                                                                break;
                                                        case 0x77:num=16;
                                                                break;
                                                }               
                                                          dula=1;
                        P0=table[num-1];
                        dula=0;
                        break;
       
                                        }        
                   break;
                  }
                  
                   }
}
       
我有个地方不懂。。就是进入大循环while(1)之后,它不断地循环扫描,如果我按了第二行的第一个键后,他是怎么知道我按得第二行的。。他也是从第一行扫描然后再扫第二行吗。。。。。。。为什么假设按的第二行第一个键。。。temp=0xed这个依然可以进入扫描第一行的那个小循环啊  并且按照程序分析下去的话还可以显示0.。。但是用单片机运行却显示的是正确的结果。。。我不懂这是为什么啊

相关帖子

沙发
Elorylove|  楼主 | 2014-10-30 14:58 | 只看该作者
有人知道吗

使用特权

评论回复
板凳
Elorylove|  楼主 | 2014-10-30 15:03 | 只看该作者
没人来吗

使用特权

评论回复
地板
Elorylove|  楼主 | 2014-10-30 15:08 | 只看该作者
醉了

使用特权

评论回复
5
wlc824136| | 2014-11-2 17:22 | 只看该作者
每个键按下,单片机取到的值都是不一样的

使用特权

评论回复
6
原野之狼| | 2014-11-2 23:32 | 只看该作者
看到程序就头晕

使用特权

评论回复
7
liufb| | 2014-11-3 17:48 | 只看该作者
哈哈,顶楼上。
不明白就debug,看程序怎么执行,数值有什么变化。

使用特权

评论回复
8
ZG11211| | 2014-11-3 19:53 | 只看该作者
这种带延时和死循环的按键处理程序是没多少人看的,太浪费资源了,也不适合实时性比较强的运行系统。一般实用的案件处理函数都是分时扫描的结构。

使用特权

评论回复
9
ayb_ice| | 2014-11-5 10:36 | 只看该作者
正反读,几条语句就搞定了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

11

帖子

0

粉丝