新闻  |   论坛  |   博客  |   在线研讨会
用定时器0的方式1实现第一个发光管以200ms间隔闪烁,用定时器1的方式实现数码管前两位59s循环计时,
bofeng | 2013-07-10 09:52:21    阅读:10720   发布文章

#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit dula=P1^0;
sbit wela=P1^1;
sbit led1=P0^0;
uchar code table[]={0x3f,0x06,0x5b,0x4f,
     0x66,0x6d,0x7d,0x07,
     0x7f,0x6f,0x77,0x7c,
     0x39,0x5e,0x79,0x71};
void delayms(uint);
void display(uchar,uchar);
uchar num,num1,num2,shi,ge;
void main()
{
        TMOD=0x11;
  TH0=(65535-45872)/256;
  TL0=(65535-45872)%256;
     TH1=(65535-45872)/256;
  TL1=(65535-45872)%256;
   EA=1;
    ET0=1;
    ET1=1;
     TR0=1;
     TR1=1;
    while(1)
    {
     display(shi,ge);
    }
}
void display(uchar shi,uchar ge)
{
  dula=1;
  P0=table[shi];
  dula=0;
  P0=0xff;
  wela=1;
  P0=0xfe;
  wela=0;
  delayms(5);

  dula=1;
  P0=table[ge];
  dula=0;
  P0=0xff;
  wela=1;
  P0=0xfd;
  wela=0;
  delayms(5);
}
void delayms(uint xms)
{
  uint i,j;
  for(i=xms;i>0;i--)
   for(j=110;j>0;j--);
}
void T0_time() interrupt 1
{
   TH0=(65535-45872)/256;
   TL0=(65535-45872)%256;
   num1++;
   if(num1==4)
   {
     num1=0;
  led1=~led1;
   }
}
void T1_time() interrupt 3
{
   TH1=(65535-45872)/256;
   TL1=(65535-45872)%256;
   num2++;
   if(num2==20)
   {
     num2=0;
  num++;
  if(num==60)
  num=0;
  shi=num/10;
  ge=num%10;
   }
}

*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
推荐文章
最近访客