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

標題: 數碼秒表設計 [打印本頁]

作者: xcola    時間: 2017-10-4 16:41
標題: 數碼秒表設計
  1. //實例65:數碼秒表設計
  2. #include<reg51.h>  //  包含51單片機寄存器定義的頭文件
  3. unsigned char code Tab[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
  4. //數碼管顯示0~9的段碼表
  5. unsigned char int_time;        //記錄中斷次數
  6. unsigned char second;        //儲存秒
  7. /***********************************************************************
  8. 函數功能:快速動態掃描延時,延時約0.6毫秒
  9. ************************************************************************/
  10. void delay(void)
  11. {
  12.   unsigned char i;
  13.   for(i=0;i<200;i++)
  14.         ;
  15. }
  16. /***********************************************************************
  17. 函數功能:顯示秒
  18. 入口參數:k
  19. 出口參數:無
  20. ************************************************************************/
  21. void DisplaySecond(unsigned char k)
  22. {
  23.    
  24.    P2=0xfb;        //P2.6引腳輸出低電平, DS6點亮
  25.    P0=Tab[k/10];          //顯示十位
  26.    delay();

  27.    P2=0xf7;       //P2.7引腳輸出低電平, DS7點亮
  28.    P0=Tab[k%10];         //顯示個位
  29.         delay();
  30.         P2=0xff;     //關閉所有數碼管



  31. }
  32.   void main(void)      //主函數
  33.    {
  34.           TMOD=0x01;                 //使用定時器T0
  35.           TH0=(65536-46083)/256;    //將定時器計時時間設定為46083×1.085微秒
  36. //=50000微秒=50毫秒
  37.            TL0=(65536-46083)%256;
  38.                 EA=1;                    //開啟總中斷
  39.                 ET0=1;                   //定時器T0中斷允許
  40.                 TR0=1;                   //啟動定時器T0開始運行
  41.                 int_time=0;     //中斷次數初始化
  42.                 second=0;           //秒初始化               
  43.         while(1)
  44.                 {
  45.                DisplaySecond(second);        //調用秒的顯示子程序
  46.                  }
  47.     }  
  48. //********************************************************
  49. //函數功能:定時器T0的中斷服務程序
  50. //*******************************************************
  51.   void interserve(void ) interrupt 1 using 1  
  52.   {
  53.     TR0=0;    //關閉定時器T0
  54.     int_time ++;        //每來一次中斷,中斷次數int_time自加1       
  55.          if(int_time==20)   //夠20次中斷,即1秒鐘進行一次檢測結果采樣
  56.           {
  57.         int_time=0;    //中斷次數清0
  58.             second++;    //秒加1
  59.             if(second==60)
  60.               second =0; //秒等于60就返回0
  61.           }                     
  62.           TH0=(65536-46083)/256;   //重新給計數器T0賦初值
  63.         TL0=(65536-46083)%256;
  64.         TR0=1;     //啟動定時器T0
  65. }  

  66. //實例65:數碼秒表設計
  67. #include<reg51.h>  //  包含51單片機寄存器定義的頭文件
  68. unsigned char code Tab[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
  69. //數碼管顯示0~9的段碼表
  70. unsigned char int_time;        //記錄中斷次數
  71. unsigned char second;        //儲存秒
  72. /***********************************************************************
  73. 函數功能:快速動態掃描延時,延時約0.6毫秒
  74. ************************************************************************/
  75. void delay(void)
  76. {
  77.   unsigned char i;
  78.   for(i=0;i<200;i++)
  79.         ;
  80. }
  81. /***********************************************************************
  82. 函數功能:顯示秒
  83. 入口參數:k
  84. 出口參數:無
  85. ************************************************************************/
  86. void DisplaySecond(unsigned char k)
  87. {
  88.    
  89.    P2=0xfb;        //P2.6引腳輸出低電平, DS6點亮
  90.    P0=Tab[k/10];          //顯示十位
  91.    delay();

  92.    P2=0xf7;       //P2.7引腳輸出低電平, DS7點亮
  93.    P0=Tab[k%10];         //顯示個位
  94.         delay();
  95.         P2=0xff;     //關閉所有數碼管



  96. }
  97.   void main(void)      //主函數
  98.    {
  99.           TMOD=0x01;                 //使用定時器T0
  100.           TH0=(65536-46083)/256;    //將定時器計時時間設定為46083×1.085微秒
  101. //=50000微秒=50毫秒
  102.            TL0=(65536-46083)%256;
  103.                 EA=1;                    //開啟總中斷
  104.                 ET0=1;                   //定時器T0中斷允許
  105.                 TR0=1;                   //啟動定時器T0開始運行
  106.                 int_time=0;     //中斷次數初始化
  107.                 second=0;           //秒初始化               
  108.         while(1)
  109.                 {
  110.                DisplaySecond(second);        //調用秒的顯示子程序
  111.                  }
  112.     }  
  113. //********************************************************
  114. //函數功能:定時器T0的中斷服務程序
  115. //*******************************************************
  116.   void interserve(void ) interrupt 1 using 1  
  117.   {
  118.     TR0=0;    //關閉定時器T0
  119.     int_time ++;        //每來一次中斷,中斷次數int_time自加1       
  120.          if(int_time==20)   //夠20次中斷,即1秒鐘進行一次檢測結果采樣
  121.           {
  122.         int_time=0;    //中斷次數清0
  123.             second++;    //秒加1
  124.             if(second==60)
  125.               second =0; //秒等于60就返回0
  126.           }                     
  127.           TH0=(65536-46083)/256;   //重新給計數器T0賦初值
  128.         TL0=(65536-46083)%256;
  129.         TR0=1;     //啟動定時器T0
  130. }  

復制代碼
51單片機數碼秒表設計。

作者: 電子x戰隊    時間: 2017-10-5 10:36
狗尾續貂,我也發一個,大一時候寫的,適用于小開發板,寫的很渣,只保留了一位小數~

#include<reg52.h>

unsigned char code Test[10] ={0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07,0x7F,0x6F};//1-10
unsigned char code DULA[4]={0xf7,0xfb,0xfd,0xfe};//控制顯示第幾位

sbit key0=P3^2;
sbit key1=P3^3;
sbit key2=P3^4;

static unsigned int counter=0;
static unsigned char i=0;

static unsigned char second=0;//十位數

static unsigned char signal1=0;//1為顯示十位數,0為不顯示,控制個位數,直接寫死=1
static unsigned char signal2=0;//1為顯示十位數,0為不顯示
static unsigned char signal3=0;//1為顯示百位數,0為不顯示
static unsigned char signal4=0;//1為顯示百位數,0為不顯示

static unsigned char ten=0;
static unsigned char hundred=0;
static unsigned char thousand=0;

void IntiTimer()//初始化定時器
{
        TH0=(65536-45872)/256;//45872是50ms
        TL0=(65536-45872)%256;
}
               
void dely(unsigned int k)
{       
        unsigned int i=0;
        unsigned char j=0;

        for(i=0;i<k;i++)
        {
                for(j=0;j<110;j++)
                {       
                       
                }
        }
}
void display()//控制數碼管
{
        if(signal2==0)
        {
                P2=0xf7;
                P0=~Test[i];
                P0=~0x00;
                P2=0xfb;//第二位為0
                P0=~(Test[0]|0x80);
                P0=~0x00;
        }
        if(signal2==1&&signal3==0)
        {
                P2=0xf7;
                P0=~Test[i];
                P0=~0x00;
                P2=0xfb;
                P0=~(Test[ten]|0x80);
                P0=~0x00;
               
        }
        if(signal2==1&&signal3==1&&signal4==0)
        {
                P2=0xf7;
                P0=~Test[i];
                P0=~0x00;
                P2=0xfb;
                P0=~(Test[ten]|0x80);
                P0=~0x00;
                P2=0xfd;//第三位
                P0=~Test[hundred];
                P0=~0x00;
               
        }
                if(signal2==1&&signal3==1&&signal4==1)
        {
                P2=0xf7;
                P0=~Test[i];
                P0=~0x00;
                P2=0xfb;
                P0=~(Test[ten]|0x80);
                P0=~0x00;
                P2=0xfd;//第三位
                P0=~Test[hundred];
                P0=~0x00;
                P2=0xfe;//第四位
                P0=~Test[thousand];
                P0=~0x00;
               
        }
        if(i==10)
        {
                i=0;
        }
}
//一個數碼管點亮1s后熄滅
//實現第一個stop鍵
void key0scanf()//檢測鍵盤 stop
{
        if(key0==0)//按下
        {
                dely(10);
                if(key0==0)
                {
                        while(!key0);//松手
                        TR0=~TR0;//定時器停止       
                }
        }
        if(key1==0)//按下        reset
        {
                dely(10);
                if(key1==0)
                {
                        while(!key1);//松手
                        IntiTimer();//初始化定時器
                        counter=0;
                        i=0;
                        signal1=0;
                        signal2=0;
                        signal3=0;
                        signal4=0;
                        ten=0;
                        hundred=0;
                        thousand=0;
                               
                }
        }
        if(key2==0)
        {
                dely(10);
                if(key2==0)
                {
                        while(!key2);
                        TR0=1;//開始計時
                }
        }
}
void Timer()
{
                TMOD=0x01;  //0101,GATA=0,C/T=1,M1MO=01
                EA=1;          
                TH0=(65536-45872)/256;
                TL0=(65536-45872)%256;//50mS
                ET0=1;
                TR0=0;
}
void main()
{
        Timer();
        while(1)
        {
                key0scanf();
                display();
        }       
}

void TimerInterrupt() interrupt 1//定時器
{
         IntiTimer();//初始化
         counter++;

        if(counter>=2&&counter<20)//1-9
        {
                if(counter%2==0)
                {
                        i++;
                }
                if(i==10)
                {
                        i=0;
                }
        }
        if(counter>=20&&counter<200)//10s-99s
        {
                signal2=1;//開啟十位

                if(counter%20==0)//每10s
                {
                        ten++;
                        if(ten==10)
                        {
                                ten=0;
                        }       
                }
                if(counter%2==0)//1s
                {
                        i++;
                        if(i==10)
                        {
                                i=0;
                        }
                }
        }
        if(counter>=200&&counter<2000)//100-999s
        {
                signal2=1;//開啟十位
                signal3=1;//開啟百位
                if(counter%200==0)//每100s
                {
                         hundred++;
                }
                if(counter%20==0)
                {
                        ten++;
                        if(ten==10)
                        {
                                ten=0;
                        }               
                }
               
                if(counter%2==0)//0.1s
                {
                        i++;
                        if(i==10)
                        {
                                i=0;
                        }
                }
        }
        if(counter>=2000&&counter<20000)
        {
                signal2=1;//開啟十位
                signal3=1;//開啟百位
                signal4=1;//開啟百位
                if(counter%2000==0)//每100s
                {
                         thousand++;
                         if(thousand==10)
                         {
                                 thousand=0;
                                TR0=~TR0;//數位滿后停止計時
                         }
                }
                if(counter%200==0)
                {
                        hundred++;
                        if(hundred==10)
                        {
                                hundred=0;
                        }               
                }
               
                if(counter%20==0)//1s
                {
                        ten++;
                        if(ten==10)
                        {
                                ten=0;
                        }
                }
                if(counter%2==0)
                {
                        i++;
                        if(i==10)
                        {
                                i=0;
                        }
                }
        }
}


作者: 51hei靜靜    時間: 2017-10-16 15:19
51黑有你更精彩!!!




歡迎光臨 (http://www.raoushi.com/bbs/) Powered by Discuz! X3.1