打印

急求关于按键显示的问题.。。。。。

[复制链接]
1249|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zhang5805350|  楼主 | 2012-4-5 17:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我最近在做按键实验时,碰到当我按下按键时,数码管上只能显示出个位数,其他位则不能显示。当松手后则可以正常显示而来。。。。。。。请大虾门帮我看看问题出在哪了。。。。。



#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit key1=P3^2;
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

uchar num;
void delay(uint ms)
// 11.0592M晶振一毫秒延时
{
   uint x,y;
   for(x=ms;x>0;x--)
    for(y=114;y>0;y--);
}
void display(uint temp)
{
  uchar ge,shi,bai;
    bai=temp/100;
    shi=(temp%100)/10;  
    ge=temp%10;  

P2=0xf8;

P0=table[bai];

delay(1);

P2=0xf9;

P0=table[shi];

delay(1);

P2=0xfa;
     

P0=table[ge];

delay(1);
}
void key()
{

if(key1==0)

{

// display(num);

if(key1==0)

{


while(!key1);

num++;

if(num==66)

{

   num=0;

}



}

}
}
void main()
{

while(1)

{




display(num);


  key();

}
}

相关帖子

沙发
joyme| | 2012-4-5 17:30 | 只看该作者
while(!key1);
一直按着都死循环了,肯定执行不了display函数,寄存器保持上次执行的值就是现实个位,程序不是这么写的

使用特权

评论回复
板凳
zhang5805350|  楼主 | 2012-4-5 17:58 | 只看该作者
那请问下我这程序该怎么修改啊。。。。

使用特权

评论回复
地板
chenbb8| | 2012-4-5 18:22 | 只看该作者
阻塞型的程序架构么,你的显示程序使用的是动态扫描的显示方法,当程序被阻塞的时候,当然会只能显示一个数值咯。 想要显示正常就要消除程序阻塞,假设按键按下时Key1 == 0 那么有:

#define NO_KEY 0//没有按键
#define UP_KEY 1//上键
static char KEY_State  = NO_KEY;
void key()
{
   swtich(KEY_State)
   {
       case NO_KEY:
          if(Key1 == 0)    //按键按下      
          KEY_State = UP_KEY;
          break;

       case UP_KEY:
          if(Key != 0)       //按键松开
          KEY_State = NO_KEY;
          num++;
          if(num==66)   num=0;
          break;

       default:
          break;
    }
}

}

使用特权

评论回复
5
joyme| | 2012-4-6 09:14 | 只看该作者
在4楼的基础上加上防抖处理就好了

使用特权

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

本版积分规则

3

主题

65

帖子

1

粉丝