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

📄 time.lst

📁 利用89S52做的数字时钟
💻 LST
字号:
C51 COMPILER V8.02   TIME                                                                  08/16/2007 22:51:26 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE TIME
OBJECT MODULE PLACED IN time.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE time.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include"delay.h"
   2          #include"PIO.h"
   3          #include"led.h"
   4          #include"key.h"
   5          int n=0;
   6          char time[4]={0,0,0,0};
   7          unsigned int date[3]={1,5,2007};
   8          uchar month[12]={31,28,31,30,31,30,31,31,30,31,30,31};
   9          uchar day=1,work=1,datework=0,daywork=0;
  10          void main()
  11          {
  12   1          unsigned int i=0;
  13   1          PT2=1;//定时器2设为高优先级
  14   1              IT0=1;//外部中断设为负跳变触发方式
  15   1              EX0=1;//开启外部中断
  16   1              RCAP2H=0x3c;//初始化定时器2     
  17   1              RCAP2L=0xb0;
  18   1              TH2=0x3c;
  19   1              TL2=0xb0;
  20   1              TR2=1;//启动定时器2
  21   1              ET2=1;//开启定时器2
  22   1              EA=1;
  23   1              while(1)
  24   1              {
  25   2              for(date[1]=1;date[1]<=12;date[1]++)//每12个月进1
  26   2              {
  27   3                  for(date[0]=1;date[0]<=month[date[1]-1];date[0]++)//足一个月的天数进1
  28   3                  {
  29   4                              for(time[2]=0;time[2]<24;time[2]++)//每24小时进1
  30   4                              {
  31   5                                      for(time[1]=0;time[1]<60;time[1]++)//每60分进1
  32   5                                      {
  33   6                                              for(time[0]=0;time[0]<60;)//每60秒进1
  34   6                                              {
  35   7                                  num2(2,time[2]);//显示时间
  36   7                                  dot(4);
  37   7                                  num2(3,time[1]);
  38   7                                  dot(6);
  39   7                                                      num2(4,time[0]);
  40   7                                  keyread();//键盘扫描
  41   7                                  if(KEY==1&&P2==0xff)//若按下1号键,则显示日期
  42   7                                  {
  43   8                                      datework=1;//日期显示标记
  44   8                                      KEY=0;
  45   8                                      for(i=0;i<150;i++)
  46   8                                      {
  47   9                                          num4(1,date[2]);//显示日期
  48   9                                          dot(4);
  49   9                                          num2(3,date[1]);
  50   9                                          dot(6);
  51   9                                          num2(4,date[0]);
  52   9                                          keyread();//键盘扫描
  53   9                                          if(KEY==1&&P2==0xff)
  54   9                                                                              {
  55  10                                                                                      daywork=1;//星期显示标记
C51 COMPILER V8.02   TIME                                                                  08/16/2007 22:51:26 PAGE 2   

  56  10                                                                                      KEY=0;
  57  10                                                                                      for(i=0;i<100;i++)
  58  10                                                                                      {
  59  11                                                                                              w_p(8,day);//显示星期
  60  11                                                                                              delay(10);//使显示稳定
  61  11                                                                                              keyread();//键盘扫描
  62  11                                                                                              if(KEY==1&&P2==0xff)break;//若按下1键,则跳出星期显示循环,回到时间显示循环境保护
  63  11                                                                                              if(KEY==13&&P2==0xff){p32=0;p32=1;KEY=1;}
  64  11                                                                                      }                                                                               
  65  10                                                                                      daywork=0;//清除星期显示标记
  66  10                                                                              }
  67   9                                                                              if(KEY==1)break;
  68   9                                                                              if(KEY==13&&P2==0xff){p32=0;p32=1;}
  69   9                                      }
  70   8                                      KEY=0;
  71   8                                      datework=0;//清除日期显示标记
  72   8                                  }
  73   7                                  if
  74   7                                  (KEY==13&&P2==0xff){p32=0;p32=1;}
  75   7                                              }
  76   6                              time[0]=0;
  77   6                                      }
  78   5                              }
  79   4                                      day++;
  80   4                                      if(day==8)day=1;
  81   4                  }
  82   3              }
  83   2              date[2]++;
  84   2              if((date[2]%4==0&&date[2]%100!=0)||date[2]%400==0)
  85   2              month[1]=29;//如果是闰年,则2月变为29日,否则是28日
  86   2              else
  87   2              month[1]=28;
  88   2              }       
  89   1      }
  90          
  91          //计时函数每秒使time[0]加1
  92          timer0() interrupt 5
  93          {
  94   1              static uchar t;
  95   1              TF2=0;
  96   1              t++;
  97   1              if(t==20)
  98   1              {
  99   2                      t=0;
 100   2                      time[0]++;
 101   2              }
 102   1      }
 103          
 104          //时间设定函数
 105          set_time() interrupt 0  
 106          {       
 107   1              KEY=0;
 108   1                      if(daywork)//修改星期
 109   1                      while(1)
 110   1                      {       
 111   2                              w_p(8,day);
 112   2                              delay(10);
 113   2                              keyread();
 114   2                              if(KEY==16&&P2==0xff){KEY=0;break;}
 115   2                  if(KEY==14&&P2==0xff){KEY=0;day++;if(day==8)day=1;}
 116   2                  if(KEY==15&&P2==0xff){KEY=0;day--;if(day==0)day=7;}
 117   2                      }
C51 COMPILER V8.02   TIME                                                                  08/16/2007 22:51:26 PAGE 3   

 118   1              if(!datework)//修改时间
 119   1              while(1)
 120   1              {
 121   2                  while(1)
 122   2                  {
 123   3                      delay(10);
 124   3                      work=0;
 125   3                                      if(time[0]==60){time[0]=0;time[1]++;}
 126   3                      num2(4,time[0]);
 127   3                      keyread();
 128   3                      if(KEY==16&&P2==0xff){KEY=0;break;}
 129   3                      if(KEY==13&&P2==0xff){KEY=0;work=1;}
 130   3                      if(KEY==14&&P2==0xff){KEY=0;time[0]++;if(time[0]==60)time[0]=0;}
 131   3                      if(KEY==15&&P2==0xff){KEY=0;time[0]--;if(time[0]<0)time[0]=59;}
 132   3                                      if(work)break;
 133   3                   }
 134   2      
 135   2                  if(work)
 136   2                  while(1)
 137   2                  {
 138   3                      delay(10);
 139   3                      work=0;
 140   3                      num2(3,time[1]);
 141   3                      keyread();
 142   3                      if(KEY==16&&P2==0xff){KEY=0;break;}
 143   3                      if(KEY==13&&P2==0xff){KEY=0;work=1;}
 144   3                      if(KEY==14&&P2==0xff){KEY=0;time[1]++;if(time[1]==60)time[1]=0;}
 145   3                                      if(KEY==15&&P2==0xff){KEY=0;time[1]--;if(time[1]<0)time[1]=59;}
 146   3                      if(work)break;
 147   3                   }
 148   2                  
 149   2                  if(work)
 150   2                  while(1)
 151   2                  {
 152   3                      work=0;
 153   3                      delay(10);
 154   3                      num2(2,time[2]);
 155   3                      keyread();
 156   3                      if(KEY==16){KEY=0;break;}
 157   3                      if(KEY==13&&P2==0xff){KEY=0;work=1;break;}
 158   3                      if(KEY==14&&P2==0xff){KEY=0;time[2]++;if(time[2]==24)time[2]=0;}
 159   3                      if(KEY==15&&P2==0xff){KEY=0;time[2]--;if(time[2]<0)time[2]=23;}
 160   3                      if(work)break;
 161   3                  }
 162   2                  if(work==0)break;
 163   2                  }
 164   1      
 165   1              else if(!daywork)     //修改日期
 166   1              while(1)
 167   1              {
 168   2                  while(1)
 169   2                  {
 170   3                      delay(10);
 171   3                      work=0;
 172   3                      num2(4,date[0]);
 173   3                      keyread(); 
 174   3                      if(KEY==16&&P2==0xff){KEY=0;break;}
 175   3                      if(KEY==13&&P2==0xff){KEY=0;work=1;}
 176   3                      if(KEY==14&&P2==0xff){KEY=0;date[0]++;if(date[0]==32)date[0]=0;}
 177   3                      if(KEY==15&&P2==0xff){KEY=0;date[0]--;if(date[0]==0)date[0]=31;}
 178   3                      if(work)break;
 179   3                   }
C51 COMPILER V8.02   TIME                                                                  08/16/2007 22:51:26 PAGE 4   

 180   2      
 181   2                  if(work)
 182   2                  while(1)
 183   2                  {
 184   3                      delay(10);
 185   3                      work=0;
 186   3                      num2(3,date[1]);
 187   3                      keyread(); 
 188   3                      if(KEY==16&&P2==0xff){KEY=0;break;}
 189   3                      if(KEY==13&&P2==0xff){KEY=0;work=1;}
 190   3                      if(KEY==14&&P2==0xff){KEY=0;date[1]++;if(date[1]==13)date[1]=0;}
 191   3                      if(KEY==15&&P2==0xff){KEY=0;date[1]--;if(date[1]==0)date[1]=12;}
 192   3                      if(work)break;
 193   3                   }
 194   2                  
 195   2                  if(work)
 196   2                  while(1)
 197   2                  {
 198   3                      work=0;
 199   3                      delay(10);
 200   3                      num4(1,date[2]);
 201   3                      keyread();
 202   3                      if(KEY==16){KEY=0;break;}
 203   3                      if(KEY==13&&P2==0xff){KEY=0;work=1;break;}
 204   3                      if(KEY==14&&P2==0xff){KEY=0;date[2]++;}
 205   3                      if(KEY==15&&P2==0xff){KEY=0;date[2]--;if(date[2]<0)date[2]=2007;}
 206   3                      if((date[2]%4==0&&date[2]%100!=0)||date[2]%400==0)
 207   3                          month[1]=29;//如果是闰年,则2月变为29日,否则是28日
 208   3                      else
 209   3                          month[1]=28;
 210   3                      if(work)break;
 211   3                  }
 212   2                  if(work==0)break;
 213   2                  }
 214   1      
 215   1      }
 216          
 217          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1925    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     30       6
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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