欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3016|回復: 2
打印 上一主題 下一主題
收起左側

秒表計時器 在key1第一次按下,顯示器會停,二次按下,為何顯示管會延時1-2...

[復制鏈接]
跳轉到指定樓層
樓主
ID:65930 發表于 2014-10-2 12:32 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
  • #include<reg52.h>
    #define uint unsigned int
    #define uchar unsigned char
    void display(uchar bai,uchar shi,uchar ge);
    void delay(uint z);
    void init();
    sbit du=P2^6;
    sbit we=P2^7;
    sbit key=P3^4;
    sbit key1=P3^5;
    sbit key3=P3^7;
    uchar code table[]={0x3f  , 0x06 , 0x5b , 0x4f , 0x66 , 0x6d ,
    0x7d , 0x07 , 0x7f  , 0x6f , 0x77 , 0x7c ,0x39 , 0x5e , 0x79 , 0x71 , 0x00};
    uchar t,a,bai,shi,ge,flag;
    uint temp;
    void main()               
    {  init();
       while(1)
       {  
            if(a==2)
               { a=0;
                     if(key==1)
                         { delay(2);
                             if(key==1)
                                    {
                                        temp++;
                                        if(temp==999)
                                       temp=0;
                                     bai=temp/100;
                                       shi=temp/10%10;
                                 ge=temp%10;
          
                                      }
                                  }
                          }
      display(bai,shi,ge);
         if (flag==0)
      {while(key1==0)
              {      
               TR0=0;
               flag=1;
                 display(bai,shi,ge);
               }
      }
    if(flag==1)
      {    while(key1==0)
             {TR0=1;
             flag=0;
             }
      }
      if(key3==0)
      {
        temp=0;
        bai=temp/100;
         shi=temp/10%10;
         ge=temp%10;
        display(bai,shi,ge);
        }
       }
    }
    void delay (uint z)
    {uint i,j;
    for(i=z;i>0;i--)
    for(j=110;j>0;j--);
    }
    void display(uchar bai,uchar shi,uchar ge)
    {   du=1;
    P0=table[bai];
    du=0;
    P0=0xff;
    we=1;
    P0=0xfe;
    we=0;
    delay(1);
    du=1;
    P0=table[shi];
    du=0;
    P0=0xff;
    we=1;
    P0=0xfd;
    we=0;
    delay(1);
    du=1;
    P0=table[ge];
    du=0;
    P0=0xff;
    we=1;
    P0=0xfb;
    we=0;
    delay(1);
    }
    void init()
    {du=0;
    we=0;
    t=0;
    TMOD=0x01;
    TH0=(65536-5000)/256;
    TL0=(65536-5000)%256;
    EA=1;
    ET0=1;
    TR0=1;  
    flag=0;
    }
    void timer0() interrupt 1
    {TH0=(65536-5000)/256;
    TL0=(65536-5000)%256;
    a++;
    }





分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:65930 發表于 2014-10-2 12:39 | 只看該作者
要求按下key1后,數碼管顯示停止,再按下key1后,數碼管顯示繼續計數
回復

使用道具 舉報

板凳
ID:19715 發表于 2014-10-2 17:44 | 只看該作者
本帖最后由 明白 于 2014-10-2 18:33 編輯

數碼管的個位是顯示0.01秒,很快!!
定時器中斷周期小(5ms),而在取個十百,這三個位值太消耗時間了,
三位數碼管顯示一遍也需要幾個毫秒,
當按下按鍵之后,定時器是停止了(temp固定了),
但是數碼管顯示內容仍然是1、2個中斷周期之前的數值,
也就是當前(個十百)的三個位值,不是當前temp轉換過來的
主程序干嘛要兩次調用display();

回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表