秒表暂停 出错了

[复制链接]
3070|9
 楼主| howard-ch 发表于 2011-7-28 13:59 | 显示全部楼层 |阅读模式
秒表暂停后,百位和十位的数码管没有显示,怎么弄啊


#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar bai,shi,ge;
uint a;
sbit dula=P2^6;
sbit wela=P2^7;
sbit key1=P3^4;
sbit d1=P1^0;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
void display(uchar bai,uchar shi,uchar ge);
void init();
void delay(uint z);
void main()
{       
        init();                    //初始化子程序
        while(1)
        {                       
                if(key1==0)
                {
                        delay(5);                           //按下去,延时5毫秒
                        if(key1==0)
                        {
                                d1=0;
                                TR0=0;
                                while(!key1);
                                delay(5);                  //接通到松开,持续5毫秒
                                while(!key1);
                        }
                        display(bai,shi,ge);       
                }
                else
                {
                        d1=1;
                        TR0=1;
                }
                display(bai,shi,ge);
        }
}
void delay(uint z)
{                                                                                                //延时子程序
        uint x,y;
        for(x=z;x>0;x--)
                for(y=110;y>0;y--);
}
void display(uchar bai,uchar shi,uchar ge)                 //三位数的显示子程序
{
        dula=1;
        P0=table[bai];
        dula=0;
        P0=0xff;
        wela=1;
        P0=0xfe;
        wela=0;
        delay(5);

        dula=1;
        P0=table[shi];
        dula=0;
        P0=0xff;
        wela=1;
        P0=0xfd;
        wela=0;
        delay(5);

        dula=1;
        P0=table[ge];
        dula=0;
        P0=0xff;
        wela=1;
        P0=0xfb;
        wela=0;
        delay(5);       
}
void init()                                                           //初始化子程序
{
        TMOD=0x01;
        TH0=(65536-10000)/256;
        TL0=(65536-10000)%256;
        EA=1;
        ET0=1;
        TR0=1;
}
void timer0() interrupt 1                           //定时器0中断子程序,延时10毫秒
{
        TH0=(65536-10000)/256;
        TL0=(65536-10000)%256;
        a++;
        if(a==1000)
                a=0;
        bai=a/100;
        shi=a%100/10;
        ge=a%10;                       
}
lixiaoxu2meng 发表于 2011-7-28 15:24 | 显示全部楼层
lz 说的暂停 是如何实现的
是一直按下健值吗
 楼主| howard-ch 发表于 2011-7-28 15:42 | 显示全部楼层
一直按着不放开,让数码管停止计数并显示一个固定值,放开 继续计数,我这问题是 按着前两位数码管熄灭没显示 只有最后一位显示
lixiaoxu2meng 发表于 2011-7-28 15:48 | 显示全部楼层
本帖最后由 lixiaoxu2meng 于 2011-7-28 15:50 编辑

你一直按住(就在while那死等了)当然不会都有显示了  因为他不再实时掉用显示函数了    有电路图吗  单片机如何驱动的数码管
efen 发表于 2011-7-28 15:49 | 显示全部楼层
在第一个while(!key1);中加入数码管扫描
while(!key1)
{
   display(bai,shi,ge);
}
lixiaoxu2meng 发表于 2011-7-28 15:52 | 显示全部楼层
ls正解
pineapple2009 发表于 2011-7-28 17:22 | 显示全部楼层
在等键松开的过程中扫描数码管
 楼主| howard-ch 发表于 2011-7-28 21:49 | 显示全部楼层
问题解决了,谢谢各位啊!
lixiaoxu2meng 发表于 2011-8-1 13:55 | 显示全部楼层
你太不地道了 你发的帖子 至少三个 别人都帮你解答 你也结贴了 分谁也没给 要是你省下了也行     或者你刚开始就给0分也可以 你这样的 以后再问 问题估计很少人给你解答 至少我是不会了
 楼主| howard-ch 发表于 2011-8-5 12:56 | 显示全部楼层
对不住啊,我还没这么不地道啊,我结贴给分,提示什么不符合,给不了,没办法只能点击其他,这样也就没给分了,,,我是初次发帖,,那时我都不知道发帖默认的20分都可以改的,,,,,,,,不好意思,初次发帖,,,问题多多,希望能理解
您需要登录后才可以回帖 登录 | 注册

本版积分规则

20

主题

137

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部