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

📄 clock.lst

📁 一个c51的时钟事例程序
💻 LST
字号:
C51 COMPILER V7.50   CLOCK                                                                 11/06/2005 11:42:29 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE CLOCK
OBJECT MODULE PLACED IN Clock.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Clock.c ROM(SMALL) BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include <REGX52.H>
   2          
   3          //==========变量定义===========
   4          int data msAdd=0;//ms累加
   5          char data dispCode[8]=0,timeNum[3]=0;//时间量的字形码//具体时间量
   6          char data whatLed=7;//当前显示的数码管
   7          int data i=0,j=0,k=0,stepAdd=0;//循环变量//时标变量
   8          char data select=3,keyNum=0;//设置位指示//键号
   9          
  10          //==========函数定义===========
  11          void setDisp(void);//计算字形码
  12          void runKey(void);//执行键盘功能
  13          
  14          void main(void)
  15          {
  16   1      
  17   1      //==========T0/T1定时3ms/1ms==========
  18   1              EA=1;
  19   1              ET0=1;
  20   1              ET1=1;
  21   1              TMOD=0x11;
  22   1              TH0=0xfc;
  23   1              TL0=0x67;
  24   1              TH1=0xf5;
  25   1              TL1=0x33;
  26   1              TR0=1;
  27   1              TR1=1;
  28   1      //=============================
  29   1      
  30   1              P2=0x7f;
  31   1              P3_6=1;
  32   1              P3_7=1;
  33   1      
  34   1              dispCode[6]=0xbf;//显示"-"
  35   1      
  36   1              while(1){;}
  37   1      
  38   1              return;
  39   1      }
  40          
  41          //==========时间/显示==========
  42          void Disp(void) interrupt 1 using 1
  43          {       
  44   1              bit data P2_H;
  45   1              char data P2_ALL;
  46   1                      
  47   1              ET0=0;
  48   1      
  49   1              if(select==3)
  50   1              {
  51   2                      if(msAdd==625)
  52   2                      {
  53   3                              msAdd=0;
  54   3      
  55   3      //========循环彩灯闪烁=========
C51 COMPILER V7.50   CLOCK                                                                 11/06/2005 11:42:29 PAGE 2   

  56   3                              if(P1==0x00)
  57   3                              {
  58   4                                      P1=0xff;
  59   4                              }
  60   3                              else
  61   3                              {
  62   4                                      P1>>=1;
  63   4                              }
  64   3      
  65   3      //=========时间累加============
  66   3                              if(timeNum[0]==59)
  67   3                              {
  68   4                                      timeNum[0]=0;
  69   4      
  70   4                                      if(timeNum[1]==59)
  71   4                                      {
  72   5                                              timeNum[1]=0;
  73   5      
  74   5                                              if(timeNum[2]==23)
  75   5                                              {
  76   6                                                      timeNum[2]=0;
  77   6                                              }
  78   5                                              else
  79   5                                              {
  80   6                                                      timeNum[2]++;
  81   6                                              }
  82   5                                      }
  83   4                                      else
  84   4                                      {
  85   5                                              timeNum[1]++;
  86   5                                      }
  87   4                              }
  88   3                              else
  89   3                              {
  90   4                                      timeNum[0]++;
  91   4                              }
  92   3                      }
  93   2                      else
  94   2                      {
  95   3                              msAdd++;
  96   3                      }
  97   2              }
  98   1      
  99   1      //=========按键识别============ 
 100   1              if(P3_6==0||P3_7==0)
 101   1              {
 102   2                      if(P3_6==0)
 103   2                      {
 104   3                              keyNum=P2+1;
 105   3                              runKey();
 106   3                      }
 107   2                      else if(P3_7==0)
 108   2                      {
 109   3                              keyNum=P2+2;
 110   3                              runKey();
 111   3                      }
 112   2              }       
 113   1              
 114   1      //=========上午/下午===========
 115   1              if(timeNum[2]>=12)
 116   1              {
 117   2                      dispCode[7]=0x8c;//显示"P"
C51 COMPILER V7.50   CLOCK                                                                 11/06/2005 11:42:29 PAGE 3   

 118   2              }
 119   1              else
 120   1              {
 121   2                      dispCode[7]=0x88;//显示"A"
 122   2              }
 123   1      
 124   1      //==========拆字/显示==========
 125   1              i=2;
 126   1              for(j=5;j>=0;j-=2)
 127   1              {
 128   2                      dispCode[j]=timeNum[i]/10;
 129   2                      dispCode[j-1]=timeNum[i]-dispCode[j]*10;
 130   2                      i--;
 131   2              }       
 132   1              setDisp();
 133   1      
 134   1      //========循环显示数值=========
 135   1              P2_ALL=P2;
 136   1              P2_H=P2_0;
 137   1              P2=0xff;
 138   1      
 139   1              if(whatLed>0)
 140   1              {
 141   2                      whatLed--;
 142   2              }
 143   1              else
 144   1              {
 145   2                      whatLed=7;
 146   2              }
 147   1              P0=dispCode[whatLed];
 148   1      
 149   1      //=========P2循环右移========== 
 150   1              P2_ALL=P2_ALL>>1;
 151   1              P2=P2_ALL;
 152   1              P2_7=P2_H;      
 153   1      //============================= 
 154   1      
 155   1              TH0=0xfc;
 156   1              TL0=0x67;
 157   1              TR0=1;
 158   1              ET0=1;
 159   1      
 160   1              return;
 161   1      }
 162          
 163          //=========计算字形码==========
 164          void setDisp()
 165          {
 166   1              for(i=5;i>=0;i--)
 167   1              {
 168   2                      switch(dispCode[i])
 169   2                      {               
 170   3                              case 0:dispCode[i]=0xc0;
 171   3                                      break;
 172   3                              case 1:dispCode[i]=0xf9;
 173   3                                      break;
 174   3                              case 2:dispCode[i]=0xa4;
 175   3                                      break;
 176   3                              case 3:dispCode[i]=0xb0;
 177   3                                      break;
 178   3                              case 4:dispCode[i]=0x99;
 179   3                                      break;
C51 COMPILER V7.50   CLOCK                                                                 11/06/2005 11:42:29 PAGE 4   

 180   3                              case 5:dispCode[i]=0x92;
 181   3                                      break;
 182   3                              case 6:dispCode[i]=0x82;
 183   3                                      break;
 184   3                              case 7:dispCode[i]=0xf8;
 185   3                                      break;
 186   3                              case 8:dispCode[i]=0x80;
 187   3                                      break;
 188   3                              case 9:dispCode[i]=0x90;
 189   3                                      break;
 190   3                              default:dispCode[i]=0xff;
 191   3                      }
 192   2              }
 193   1      
 194   1              if(select!=3)
 195   1              {
 196   2                      if(stepAdd>150)
 197   2                      {
 198   3                              dispCode[select*2]=0xff;
 199   3                              dispCode[select*2+1]=0xff;
 200   3                      }
 201   2              }
 202   1      
 203   1              dispCode[2]&=0x7f;
 204   1              dispCode[4]&=0x7f;
 205   1      
 206   1              return;
 207   1      }
 208          
 209          //========执行键盘功能=========
 210          void runKey(void)
 211          {
 212   1              switch(keyNum)
 213   1              {
 214   2                      case 0x80:
 215   2                      if(stepAdd%50==0)
 216   2                      {
 217   3                              if(select>0)
 218   3                              {
 219   4                                      select--;
 220   4                              }
 221   3                              else
 222   3                              {
 223   4                                      select=3;
 224   4                              }
 225   3                      }
 226   2                              break;
 227   2                      
 228   2                      case 0xc0:
 229   2                      if(stepAdd%50==0)
 230   2                      {
 231   3                              if(select!=3)
 232   3                              {
 233   4                                      if(select!=0)
 234   4                                      {
 235   5                                              timeNum[select]++;
 236   5                                      }
 237   4                                      else if (timeNum[0]>=30)
 238   4                                      {
 239   5                                              timeNum[select]=0;
 240   5                                              timeNum[1]++;
 241   5                                      }
C51 COMPILER V7.50   CLOCK                                                                 11/06/2005 11:42:29 PAGE 5   

 242   4                                      else
 243   4                                      {
 244   5                                              timeNum[select]=0;
 245   5                                      }
 246   4      
 247   4                                      if (timeNum[1]==60){timeNum[select]=0;}
 248   4                                      if (timeNum[2]==24){timeNum[select]=0;}
 249   4                              }
 250   3                      }
 251   2                      break;
 252   2              }
 253   1      
 254   1              return;
 255   1      }
 256          
 257          //=========辅助时标产生=========
 258          void step(void) interrupt 3 using 2
 259          {
 260   1              ET1=0;
 261   1      
 262   1              if(stepAdd<333)
 263   1              {
 264   2                      stepAdd++;
 265   2              }
 266   1              else
 267   1              {
 268   2                      stepAdd=0;
 269   2              }
 270   1      
 271   1              TH1=0xf5;
 272   1              TL1=0x33;
 273   1              TR1=1;
 274   1              ET1=1;
 275   1      
 276   1              return;
 277   1      }
 278                                                  


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    708    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     24    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----       1
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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