资源简介

基于AT89S52单片机数码管显示数字钟(含proteus仿真) 转载请标明出处,并保持代码完整。

资源截图

代码片段和文件信息

#include  
unsigned char code dispcode[]={0x3f0x060x5b0x4f 
                               0x660x6d0x7d0x07 
                               0x7f0x6f0x770x7c 
                               0x390x5e0x790x710x40};//共阴数码管编码:0-f,最后是“-”
unsigned char dispbitcode[]={0x070x060x050x04 
                             0x030x020x010x00}; //位选端
unsigned char dispbuf[8]={0016001600};//初始状态:00-00-00
unsigned char dispbitcnt=0; 
unsigned char second=0; 
unsigned char minute=0; 
unsigned char hour; 
unsigned int tcnt; 
unsigned char mstcnt=0;  
unsigned char ij; 
sbit P0_0=P0^0;
sbit P0_1=P0^1;
sbit P0_2=P0^2;
sbit P0_7=P0^7;
sbit P3_0=P3^0;
sbit P3_4=P3^4;
void main(void) 
{
  TMOD=0x02; 
  TH0=0x06; 
  TL0=0x06; 
  TR0=1; 
  ET0=1; 
  EA=1; 
  hour=0;
  P3_0=0;
  P0_7=0;
   while(1) 
    { 
 if(P0_0==0) 
        { 
          for(i=10;i>0;i--) 
          for(j=248;j>0;j--); 
          if(P0_0==0) 
            { 
              second++; 
              if(second==60) 
                { 
                  second=0; 
                } 
              dispbuf[0]=second%10; 
              dispbuf[1]=second/10; 
              while(P0_0==0); 
            } 
        } 
      if(P0_1==0) 
        { 
          for(i=10;i>0;i--) 
          for(j=248;j>0;j--); 
          if(P0_1==0) 
            { 
              minute++; 
              if(minute==60) 
                { 
                  minute=0; 
                } 
              dispbuf[3]=minute%10; 
              dispbuf[4]=minute/10; 
              while(P0_1==0); 
            } 
        } 
      if(P0_2==0) 
        { 
          for(i=10;i>0;i--) 
          for(j=248;j>0;j--); 
          if(P0_2==0) 
            { 
              hour++; 
              if(hour==24) 
                { 
                  hour=0; 
                } 
              dispbuf[6]=hour%10; 
              dispbuf[7]=hour/10; 
              while(P0_2==0); 
            } 
        } 
  
    } 

void t0(void) interrupt 1 using 0 

 
  mstcnt++; 
  
  if(mstcnt==8) 
    { 
      mstcnt=0; 
  P3_0=1;
      P2=dispcode[dispbuf[dispbitcnt]]; 
  P3_0=0;
      P1=dispbitcode[dispbitcnt]; 
      dispbitcnt++; 
      if(dispbitcnt==8) 
        { 
          dispbitcnt=0;
 
        } 
    } 

  tcnt++; 
  if(tcnt==4000) 
    { 
      tcnt=0; 
      second++;
  if((second==54)&&(minute==59))
     P3_4=0;
  if(second==59)
     P3_4=1; 
      if(second==60) 
        { 
          second=0; 
          minute++; 
  if(minute==60) 
            { 
  
              minute=0;
  hour++; 
              if(hour==24) 
                { 
                  hour=0; 
                } 
            } 
        } 
      dispbuf[0]=second%10; 
      dispbuf[1]=second/10; 
      dispbuf[3]=minute%10; 
      dispbuf[4]=minute/10; 
      dispbuf[6]=hour%10; 
      dispbuf[7]=hour/10; 
    } 

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       4833  2009-07-08 09:19  基于AT89s52数码管显示数字钟\474

     文件       1634  2009-07-08 09:19  基于AT89s52数码管显示数字钟\474.hex

     文件         40  2009-07-08 09:19  基于AT89s52数码管显示数字钟\474.lnp

     文件       7434  2009-07-08 09:19  基于AT89s52数码管显示数字钟\474.M51

     文件       1344  2009-10-06 17:06  基于AT89s52数码管显示数字钟\474.Opt

     文件        182  2009-10-06 17:06  基于AT89s52数码管显示数字钟\474.plg

     文件       2106  2009-07-08 09:20  基于AT89s52数码管显示数字钟\474.Uv2

    .......      1343  2009-10-05 20:02  基于AT89s52数码管显示数字钟\474_Opt.Bak

     文件     108683  2009-07-09 00:55  基于AT89s52数码管显示数字钟\Last Loaded 方案三---单片机数字钟.DBK

     文件       3032  2009-07-08 09:20  基于AT89s52数码管显示数字钟\Text1.c

     文件       6068  2009-07-08 09:19  基于AT89s52数码管显示数字钟\Text1.LST

     文件       5715  2009-07-08 09:19  基于AT89s52数码管显示数字钟\Text1.OBJ

     文件     108902  2009-10-06 17:06  基于AT89s52数码管显示数字钟\方案三---单片机数字钟.DSN

     文件        742  2009-10-06 17:06  基于AT89s52数码管显示数字钟\方案三---单片机数字钟.PWI

     目录          0  2009-10-06 17:06  基于AT89s52数码管显示数字钟

----------- ---------  ---------- -----  ----

               252058                    15


评论

共有 条评论