用at89c51单片机的定时/计数器T0产生1秒的定时

用at89c51单片机的定时/计数器T0产生1秒的定时时间,作为秒计数时间,当一秒产生时,秒计数加1,秒计数到60时,自动从0开始。
可以附图吗?(用数码管显示那种)

参考这个:

#include <reg52.h>

#include <intrins.h>

#define uchar unsigned char

#define uint unsigned int

uchar Count;

sbit Dot = P0^7;

uchar code DSY_CODE[]=

{

  0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f

};

uchar Digits_of_6DSY[]={0,0,0,0,0,0};

void DelayMS(uint x)

{

  uchar i;

while(--x)

{

  for(i=0;i<120;i++);

}

}

void main()

{

  uchar i,j;

P0 = 0x00;

P3 = 0xff;

Count =0;

TMOD = 0x01;

TH0  = (65535-50000)/256;

TL0  = (65535-50000)%256;

IE = 0x82;

TR0 = 1;

while(1)

{

  j = 0x7f;

for(i=5;i!=-1;i--)

{

  j=_crol_(j,1);

P3 = j;

P0 = DSY_CODE[Digits_of_6DSY[i]];

if(i==1) P0 |= 0x80;

DelayMS(2);

}

}

}

void Time0() interrupt 1

{

  uchar i;

TH0  = (65535-50000)/256;

TL0  = (65535-50000)%256;

if(++Count !=2) return;

Count = 0;

Digits_of_6DSY[0]++;

for(i=0;i<=5;i++)

{

  if(Digits_of_6DSY[i] == 10)

{

  Digits_of_6DSY[i] = 0;

if(i != 5) Digits_of_6DSY[i+1]++;

}

else break;

}

}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-04-01
#include unsigned char count,sec;//T0计数和秒变量//T0中断void timer0(void) interrupt 1{ TH0=0x3c; TL0=0xb0; count++; if(count==20) //1秒时间到 { count=0; sec++; if(sec==60)sec=0; // 秒计数到60时,自动从0开始 }}//主函数void main(void){TMOD=0x1;TH0=0x3c;TL0=0xb0;TR0=1;ET0=1;EA=1;while(1);} 电路图看这



实物面板看这



参考资料:http://hi.baidu.com/dsu5566

来自:求助得到的回答
第1个回答  2012-04-01
可以用T0产生较短时间的定时,比如1ms
然后计数到1000就算一秒
第2个回答  2012-04-02
你是想要代码吗?