打印

10S的秒表程序按下暂停键时,数码管只显示第三位

[复制链接]
2903|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jzfbbs|  楼主 | 2012-8-24 11:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
做了一个10S的秒表程序,用三个数码管显示。显示精度是1%秒。自动运行时,三个数三管显示正常。按下暂停开关时,只有第三个数码管亮,松开开关时,三个数码管正常,都能显示。请高手帮忙分析一下,按下开关时,三个数码管应该都能显示当前的数字。
程序如下:
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit dula=P2^6;
sbit wela=P2^7;
sbit key2=P3^4;
uint temp;
uchar t0,bai,shi,ge;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
void delay(uint z);
void display(uchar bai,uchar shi,uchar ge);
void main()
{
   P3=0xff;
   TMOD=0X01;
   TH0=(65536-10000)/256;
   TL0=(65536-10000)%256;
   ET0=1;
   EA=1;
   TR0=1;
   while(1)
   {
        if(t0==1)//1ms定时到时,进入程序内部.
        {
         t0=0;
         temp++;
         if(temp==1000)
         temp=0;
         bai=temp/100;
         shi=temp%100/10;
         ge=temp%10;
         }
          display(bai,shi,ge);//数码管显示程序
         if(key2==0)//开关按下时,定时器0停止工作,
           {
            delay(5);
            if(key2==0)
            TR0=0;
            while(!key2);//开关松开时,定时器0工作,
            delay(5);
            while(!key2);
            TR0=1;
           }
        }
   
  
}
void delay(uint z)
{
  uint x,y;
  for(x=z;x>0;x--)
     for(y=110;y>0;y--);
}
void time0() interrupt 1
{
  TH0=(65536-10000)/256;
  TL0=(65536-10000)%256;
  t0++;

}
void display(uchar bai,uchar shi,uchar ge)
{
    wela=1;
    P0=0xfe;
    wela=0;//打开第一个数码管
    dula=1;
    P0=table[bai];
    dula=0;
    delay(1);//显示
    wela=1;
    P0=0xfd;
    wela=0;//打开第二个数码
    dula=1;
    P0=table[shi];
    dula=0;
    delay(1);//显示2
    wela=1;
    P0=0xfb;
    wela=0;//打开第三个数码管
    dula=1;
    P0=table[ge];
    dula=0;
    delay(1);//显示3
}

相关帖子

沙发
3htech| | 2012-8-24 11:45 | 只看该作者
按下开关时,你的程序在等待按键松开,未执行显示扫描函数。
你可以在等待按键松开时,进行显示扫描,这样就不会出现你说的现象了。

使用特权

评论回复
板凳
wuxin999| | 2012-9-5 15:34 | 只看该作者
你的while(!key2);
里面加个显示子程序
while(!key2)
{
   display(bai,shi,ge);//数码管显示程序
}

使用特权

评论回复
地板
zhang7676050| | 2012-9-5 20:45 | 只看该作者
程序中,也就是等待按键松开的时候,while     中  显示暂停时的数值就可以了

使用特权

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

本版积分规则

112

主题

387

帖子

3

粉丝