c52单片机将数码管从0-9循环,使用定时器每过1s变一次数字

将数码管从0-9循环,使用定时器每过1s变一次数字,通过两个按键控制定时器定时长来改变数字变换时间,如1.5s或0.5s。(使用中断系统控制定时器时间变换)


/*
*定时器中断实现每来1s,P1口接的一位共阳极数码管显示数+1,
*加到9之后再来1s清零并重复上述过程
*/
#include<reg52.h>
sbit SEG = P1^0;
unsigned char code DSY_CODE[] = {0xC0,0xF9,0xA4,0xB0,0x99,
0x92,0x82,0xF8,0x80,0x90}; //共阳极数码管


void main()
{
  TMOD &=0X0F;
  TMOD |=0x01;
  TH0 = (65536 - 50000)/256;//高四位初值
  TL0 = (65536 - 50000)%256;//低四位初值,每隔50ms溢出
  EA = 1;        //开总中断
  ET0 = 1;       //T1开时定时器溢出
  TR0 = 1;       //开启定时器
  while(1);
}

void ET0_ISR(void) interrupt 1       //定时中断
{ 
  static unsigned int cnt = 0;       
  static unsigned int i = 0;
  TH0 = (65536-50000)/256;
  TL0 = (65536-50000)%256;
  cnt++;
  if(cnt >= 20)                     //当为1秒时数码管自动+1
  {
    cnt = 0;
    P1 = DSY_CODE[i++];
    while(i>9)                        //加到9数码管清零
    {
      i = 0;
    }
  }
}