打印

秒表暂停 出错了

[复制链接]
2236|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那死等了)当然不会都有显示了  因为他不再实时掉用显示函数了    有电路图吗  单片机如何驱动的数码管

使用特权

评论回复
5
efen| | 2011-7-28 15:49 | 只看该作者
在第一个while(!key1);中加入数码管扫描
while(!key1)
{
   display(bai,shi,ge);
}

使用特权

评论回复
6
lixiaoxu2meng| | 2011-7-28 15:52 | 只看该作者
ls正解

使用特权

评论回复
7
pineapple2009| | 2011-7-28 17:22 | 只看该作者
在等键松开的过程中扫描数码管

使用特权

评论回复
8
howard-ch|  楼主 | 2011-7-28 21:49 | 只看该作者
问题解决了,谢谢各位啊!

使用特权

评论回复
9
lixiaoxu2meng| | 2011-8-1 13:55 | 只看该作者
你太不地道了 你发的帖子 至少三个 别人都帮你解答 你也结贴了 分谁也没给 要是你省下了也行     或者你刚开始就给0分也可以 你这样的 以后再问 问题估计很少人给你解答 至少我是不会了

使用特权

评论回复
10
howard-ch|  楼主 | 2011-8-5 12:56 | 只看该作者
对不住啊,我还没这么不地道啊,我结贴给分,提示什么不符合,给不了,没办法只能点击其他,这样也就没给分了,,,我是初次发帖,,那时我都不知道发帖默认的20分都可以改的,,,,,,,,不好意思,初次发帖,,,问题多多,希望能理解

使用特权

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

本版积分规则

20

主题

137

帖子

1

粉丝