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

專注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機教程網(wǎng) >> MCU設(shè)計實例 >> 瀏覽文章

STC89C52-秒表(精確10ms)同時LED二進制計數(shù)

作者:佚名   來源:本站原創(chuàng)   點擊數(shù):  更新時間:2013年12月28日   【字體:


 #include <reg52.h>
typedef  unsigned char   uint8;
typedef  unsigned int    uint16;
typedef  unsigned long   uint32;
/*數(shù)碼管0到F定義 */
code uint8 number[] = {0xc0,0xf9,0xa4,0xb0,
           0x99,0x92,0x82,0xf8,
         0x80,0x90,0x88,0x83,
         0xa7,0xa1,0x86,0x8e};
uint8 a[6];
uint16 counter1 = 0;
uint8 counter = 0;
sbit ENLED = P1^4;
sbit ADDR0 = P1^0;
sbit ADDR1 = P1^1;
sbit ADDR2 = P1^2;
sbit ADDR3 = P1^3;
/*定時器1初始化,并定時1ms*/
void timer1_init()
{
 TMOD |= 0x10;
 TMOD &= 0xdf;
 TH1   = 0xFC;
 TL1   = 0x67;
 TR1   = 1;
}
/*中斷初始化*/
void int_init()
{
 ET1 = 1;
 EA  = 1;
}
/*刷新數(shù)碼管*/
void refresh_led()
{
   static uint8 j = 0;
    uint8 b = number[a[2]] - 0x80 ;
  
  switch(j)
    {
     case 0: ADDR0 = 0;ADDR1 = 0;ADDR2 = 0;P0 = number[a[0]];break;
  case 1: ADDR0 = 1;ADDR1 = 0;ADDR2 = 0;P0 = number[a[1]];break;
     case 2: ADDR0 = 0;ADDR1 = 1;ADDR2 = 0;P0 = b;break;
  case 3: ADDR0 = 1;ADDR1 = 1;ADDR2 = 0;P0 = number[a[3]];break;
  case 4: ADDR0 = 0;ADDR1 = 0;ADDR2 = 1;P0 = number[a[4]];break;
  case 5: ADDR0 = 1;ADDR1 = 0;ADDR2 = 1;P0 = number[a[5]];break;
  default: break;
  }
  if(7 == j++) j = 0;
}
main()
{
 ENLED = 0; ADDR3 = 1;
 timer1_init();
 int_init();
 while(1);
 
}
/*中斷函數(shù)*/
void interrupt_timer1() interrupt 3
{
   static uint32 sec = 0;
   TH1 = 0xFC;
   TL1 = 0x66;
   counter++;
      if(counter == 10)   
   {
    sec++;    
  counter = 0;
  a[0] = sec%10;
  a[1] = sec/10%10;
  a[2] = sec/100%10;
  a[3] = sec/1000%10;
  a[4] = sec/10000%10;
  a[5] = sec/100000%10;
  if(sec%100 == 0) counter1++;   //LED時間1s
  if(counter1 == 256) counter1 = 0;
    }
    if(counter == 9)
   {ADDR0 = 0;ADDR1 = 1;ADDR2 = 1;P0 = ~counter1 ;}
   refresh_led();
     
}
 

關(guān)閉窗口

相關(guān)文章