打印

菜鸟,来也!

[复制链接]
1939|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
gentleman1358|  楼主 | 2010-10-14 11:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
这个按键程序有没有问题?我按着按钮不放时为什么个位上的数字不会显示,但十位上的数字还在显示啊?
按原因来说: while(!key);只要我按钮不松开就不会调用显示程序吧?应该数码管都没有东西吧?

程序如下:
#include<reg52.h>
sbit key=P1^3;
#define uchar unsigned char
#define uint unsigned int
uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,
     0x92,0x82,0xf8,0x80,0x90};//显示段码//
uchar code wei[]={0x01,0x02,0x04,0x08,0x10,0x20};//位编码//
uchar num;
display(uchar );
delay(uchar);
void main()
{
num=0;
while(1)
{
  if(key==0)//检测按钮
  {
   delay(50);
   if(key==0)//确定按下
   {
      if(num==99)//最大显示值
        num=0;
     
         else
        num++;
    while(!key);//检测按钮是否松开
   }
   
  }
      
  display(num);//调用显示子程序
}
}
display(uchar num1)//显示子程序
{
P3=0x00;
P2=table[num1%10];
P3=wei[5];
delay(80);
P3=0x00;
P2=table[num1/10];
P3=wei[4];
delay(80);

}
delay(uchar x)//延时子程序
{
uchar a,b;
for(a=x;a>0;a--)
  for(b=200;b>0;b--);
}

相关帖子

沙发
new1988| | 2010-10-14 12:52 | 只看该作者
谁说只要不松开就不会调用显示程序了啊,当你没按键按下的时候不是调用显示程序了吗?在没有按键按下的时候,十位和个位的位选交替打开,当你按下按键的时候,只有十位的位选是打开的,十位肯定是量的啦!

使用特权

评论回复
板凳
zjswuyunbo| | 2010-10-14 13:10 | 只看该作者
程序是停了,所以停的时候是亮的,就是亮的

使用特权

评论回复
地板
gentleman1358|  楼主 | 2010-10-14 13:56 | 只看该作者
没办法,人太笨了,还是有点拐不过弯来:L
我总认为while语句为真,程序应该就停在这里了,我数码管用的是动态扫描,如果程序停在这里它为什么还可以正常显示十位上的数字。
真不好意思,麻烦各位兄台了!

使用特权

评论回复
5
kuku887| | 2010-10-14 14:01 | 只看该作者
两位说的有理,
我个人做这种需要自己控制的显示基本都放在中断里。这样就不会受按键影响 了

使用特权

评论回复
6
kuku887| | 2010-10-14 14:03 | 只看该作者
因为你显示完十位之后没有关掉,还在继续显示十位;想要不显示的话
display(uchar num1)//显示子程序
{
P3=0x00;
P2=table[num1%10];
P3=wei[5];
delay(80);
P3=0x00;
P2=table[num1/10];
P3=wei[4];
delay(80);
在这里吧P3P2都清掉就可以了

使用特权

评论回复
7
5号工作室| | 2010-10-14 14:15 | 只看该作者
delay(50)是你原本的消抖程序,这时CPU消耗在计时而不做其他事情,所以按下后不会显示,你把delay(50)换成让cpu做其他事情就OK了!

使用特权

评论回复
8
gentleman1358|  楼主 | 2010-10-14 14:41 | 只看该作者
哦!多谢各位兄台指点,令小弟maosedunkai茅塞顿开!
单步执:行才想起来,原来P口是有**的。:lol

使用特权

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

本版积分规则

0

主题

100

帖子

1

粉丝