⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 数字钟程序.txt

📁 用AVR编写的点阵显示屏
💻 TXT
字号:
//MCU:AT89S51
//晶振:12M
#include "AT89X51.H"
unsigned char code numcode[]={0x3f,0x06,0x5b,0x4f,0x66,
							  0x6d,0x7d,0x07,0x7f,0x6f,
							  0x40};
							  //数字及"-"共阴代码
unsigned char dispbitcode[]={0xfe,0xfd,0xfb,0xf7,
                             0xef,0xdf,0xbf,0x7f};

unsigned char dispbuf[8]={0,0,10,0,0,10,0,0};
unsigned char disp_bit_count;
 
unsigned char second;
unsigned char minite;
unsigned char hour;
unsigned int  tcount;
unsigned char disp_count;
 



/********1ms延时子程序***********/
delay_nms(unsigned int n)
{
 unsigned int i;
 unsigned char j;

 for(i=0;i<n;i++)
    for(j=0;j<120;j++)
	  ;     //空操作
}

 
void main(void)
{
  TMOD=0x02;  //使用定时器0,选择方式2(常数自动重装的8位定时器)
  TH0=0x06;   //保存数值,用于自动重装
  TL0=0x06;  //定时250uS初值
  TR0=1;    //开定时器0
  ET0=1;   //开定时器0溢出中断
  EA=1;    //开总中断
 
  while(1)
    {
     if(P2_0==0)
        {
          delay_nms(10);
          if(P2_0==0)
            {
              second++;   //按键SW1按下,秒加1
              if(second==60)
                {
                  second=0;
                }
              dispbuf[0]=second%10;
              dispbuf[1]=second/10;
              while(P2_0==0);
            }
        }
      if(P2_1==0)
        {
          delay_nms(10);
          if(P2_1==0)
            {
              minite++;   //按键SW2按下,分加1
              if(minite==60)
                {
                  minite=0;
                }
              dispbuf[3]=minite%10;
              dispbuf[4]=minite/10;
              while(P2_1==0);
            }
        }
      if(P2_2==0)     // 按键SW3按下,分加1
        {
          delay_nms(10);
          if(P2_2==0)
            {
              hour++;
              if(hour==24)
                {
                  hour=0;
                }
              dispbuf[6]=hour%10;
              dispbuf[7]=hour/10;
              while(P2_2==0);
            }
        }
		;
    }
}


/**********T0250uS中断服务程序***************/
void t0(void) interrupt 1 using 0
{

  tcount++;
  disp_count++;
  if(disp_count==8)
    {
      disp_count=0;
      P0=numcode[dispbuf[disp_bit_count]];
      P1=dispbitcode[disp_bit_count];
      disp_bit_count++;
      if(disp_bit_count==8)
        {
          disp_bit_count=0;
        }
    }

  if(tcount==4000)
    {
      tcount=0;
      second++;
      if(second==60)
        {
          second=0;
          minite++;
          if(minite==60)
            {
              minite=0;
              hour++;
              if(hour==24)
                {
                  hour=0;
                }
            }
        }
      dispbuf[0]=second%10;
      dispbuf[1]=second/10;
      dispbuf[3]=minite%10;
      dispbuf[4]=minite/10;
      dispbuf[6]=hour%10;
      dispbuf[7]=hour/10;
    }
}

 
 
 
 
 


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -