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

📄 clock623.lst

📁 一个本人编写的时钟程序
💻 LST
字号:
C51 COMPILER V8.02   CLOCK623                                                              06/26/2008 19:56:19 PAGE 1   


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

line level    source

   1          #include<reg51.h>
   2                                   
   3          sbit  led1=P1^3;  /* 4位数码管选通引脚 */
   4          sbit  led2=P1^4;          
   5          sbit  led3=P1^6;
   6          sbit  led4=P1^7;
   7          sbit  led2dz=P1^5;  /*小数点 */
   8          
   9          sbit  ls164_ab=P3^0; /*74LS164数据线 */
  10          sbit  ls164_clk=P3^1; /*74LS164时钟线 */
  11          
  12          sbit  key1=P3^5; /*按键1   */
  13          sbit  key2=P3^7; /*按键2   */
  14          
  15          unsigned int DispFlag;  /*显示标识  */
  16          
  17          sbit  key1flag=P3^2;
  18          sbit  key2flag=P3^3;
  19          
  20          sbit  beep=P1^0;
  21          
  22          unsigned int  MSCNT; /*中断次数  */
  23            
  24          unsigned char SecondBuf=25;
  25          unsigned char MinuteBuf=34;
  26          unsigned char HourBuf=16;
  27          unsigned char MonthBuf=10;
  28          unsigned char DayBuf=15;
  29          
  30          unsigned char DispBuf[15]; //显示缓冲
  31          /************************************************************/
  32          //DispBuf[1]-DispBuf[2]--DispBuf[3]-DispBuf[4]--DispBuf[5]-DispBuf[6]
  33          //分  钟     -------     小 时     -------      天
  34          //DispBuf[7]-DispBuf[8]--DispBuf[9]-DispBuf[10]
  35          //月         -------     秒        
  36          /************************************************************/
  37          
  38          /* led1查表 */
  39          unsigned char Sag_led1[10]=
  40          {0x50,0xF9,0x34,0xB0,0x99,0x92,0x12,0xF8,0x10,0x90}; 
  41          /* led2查表 */
  42          unsigned char Sag_led234[10]=
  43          {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
  44          
  45          /* 延时 */
  46          void Delay(unsigned int val)
  47          { 
  48   1        while (val!=0) val--;  
  49   1      }       
  50          void ClearDispBuf()
  51          {
  52   1        char i;
  53   1        for(i=0;i<15;i++)
  54   1         {
  55   2           DispBuf[0]=0;
C51 COMPILER V8.02   CLOCK623                                                              06/26/2008 19:56:19 PAGE 2   

  56   2         }
  57   1      }
  58          
  59                                    
  60          /* 74ls164工作原理子程序 */             
  61          void Send74ls164(unsigned char sag)
  62          { 
  63   1        char i;
  64   1        for(i=1;i<9;i++)
  65   1        {
  66   2         sag=sag<<1 ;
  67   2        if(CY==1)
  68   2         ls164_ab=1;
  69   2        else 
  70   2         ls164_ab=0;
  71   2        ls164_clk=1;
  72   2        ls164_clk=0 ; 
  73   2        }
  74   1      }
  75          
  76          //选定led1
  77          void Select_led1()
  78          { 
  79   1              led1=0;
  80   1              led2=1;
  81   1              led3=1;
  82   1              led4=1;
  83   1      }
  84          //选定led2
  85          void Select_led2()
  86          { 
  87   1          led2=0;
  88   1              led1=1;
  89   1          led3=1;
  90   1              led4=1;
  91   1      }
  92          //选定led3
  93          void Select_led3()
  94          { 
  95   1          led3=0;
  96   1              led1=1;
  97   1              led2=1;
  98   1              led4=1;
  99   1      }
 100          //选定led4
 101          void Select_led4()
 102          { 
 103   1          led4=0;
 104   1              led1=1;
 105   1              led2=1;
 106   1              led3=1;
 107   1      }
 108          
 109          //更新显示缓冲子程序
 110          int UpdateDispBuf()
 111          { //更新"秒"显示缓冲
 112   1              DispBuf[10]=SecondBuf/10;
 113   1              DispBuf[9] =SecondBuf%10;
 114   1        //更新"分钟"显示缓冲
 115   1              DispBuf[2]=MinuteBuf/10;
 116   1              DispBuf[1]=MinuteBuf%10;
 117   1        //更新"小时"显示缓冲
C51 COMPILER V8.02   CLOCK623                                                              06/26/2008 19:56:19 PAGE 3   

 118   1          DispBuf[4]=HourBuf/10;
 119   1              DispBuf[3]=HourBuf%10;
 120   1        //更新"月"显示缓冲
 121   1          DispBuf[8]=MonthBuf/10;
 122   1              DispBuf[7]=MonthBuf%10;
 123   1        //更新"日"显示缓冲
 124   1          DispBuf[6]=DayBuf/10;
 125   1              DispBuf[5]=DayBuf%10;
 126   1      }
 127          
 128          //4位数码管显示子程序
 129          void Disp(void) //2位 5000,4位 2500
 130          {
 131   1           UpdateDispBuf();
 132   1         
 133   1           switch(DispFlag)
 134   1          {
 135   2              case 0: //0x0: //显示 时,分                                                       
 136   2               Select_led4(); 
 137   2               Send74ls164(Sag_led234[DispBuf[1]]);
 138   2               Delay(2500);
 139   2      
 140   2                       Select_led3(); 
 141   2               Send74ls164(Sag_led234[DispBuf[2]]);
 142   2               Delay(2500);
 143   2      
 144   2                       Select_led2(); 
 145   2               Send74ls164(Sag_led234[DispBuf[3]]);
 146   2               Delay(2500);
 147   2      
 148   2                       Select_led1(); 
 149   2               Send74ls164(Sag_led1[DispBuf[4]]);
 150   2               Delay(2500);
 151   2                  break;
 152   2      
 153   2              case 0x1: //显示 月,日
 154   2                       Select_led4(); 
 155   2               Send74ls164(Sag_led234[DispBuf[5]]);
 156   2               Delay(2500);
 157   2      
 158   2                       Select_led3(); 
 159   2               Send74ls164(Sag_led234[DispBuf[6]]);
 160   2               Delay(2500);
 161   2      
 162   2                       Select_led2(); 
 163   2               Send74ls164(Sag_led234[DispBuf[7]]);
 164   2               Delay(2500);
 165   2      
 166   2                       Select_led1(); 
 167   2               Send74ls164(Sag_led1[DispBuf[8]]);
 168   2               Delay(2500);
 169   2                      break;
 170   2      
 171   2              case 0x2: //显示 秒
 172   2                       Select_led2(); 
 173   2               Send74ls164(Sag_led234[DispBuf[9]]);
 174   2               Delay(2500);
 175   2      
 176   2                       Select_led1(); 
 177   2               Send74ls164(Sag_led1[DispBuf[10]]);
 178   2               Delay(2500);
 179   2                      break;
C51 COMPILER V8.02   CLOCK623                                                              06/26/2008 19:56:19 PAGE 4   

 180   2      
 181   2              case 0x3: //显示 月
 182   2                       Select_led2(); 
 183   2               Send74ls164(Sag_led234[DispBuf[7]]);
 184   2               Delay(2500);
 185   2      
 186   2                       Select_led1(); 
 187   2               Send74ls164(Sag_led1[DispBuf[8]]);
 188   2               Delay(2500);
 189   2                  break;
 190   2      
 191   2              case 0x6: //显示 日       
 192   2                       Select_led4(); 
 193   2               Send74ls164(Sag_led234[DispBuf[5]]);
 194   2               Delay(2500);
 195   2      
 196   2                       Select_led3(); 
 197   2               Send74ls164(Sag_led234[DispBuf[6]]);
 198   2               Delay(2500);
 199   2                      break;
 200   2      
 201   2              case 0x9: //显示 时
 202   2                       Select_led2(); 
 203   2               Send74ls164(Sag_led234[DispBuf[3]]);
 204   2               Delay(2500);
 205   2      
 206   2                       Select_led1(); 
 207   2               Send74ls164(Sag_led1[DispBuf[4]]);
 208   2               Delay(2500);
 209   2                      break;
 210   2      
 211   2              case 12: //0x0C: //显示 分
 212   2                   Select_led4();     
 213   2               Send74ls164(Sag_led234[DispBuf[1]]);
 214   2               Delay(2500);
 215   2      
 216   2                       Select_led3(); 
 217   2               Send74ls164(Sag_led234[DispBuf[2]]);
 218   2               Delay(2500);
 219   2                      break;
 220   2      
 221   2                  default:
 222   2                  break;
 223   2      
 224   2           }
 225   1      }
 226          
 227          void KeyScan()
 228          { 
 229   1        if(key1flag==0)
 230   1          {
 231   2                if(key2flag==0)
 232   2                  {
 233   3                        if(key1==0)
 234   3                        {     //key1子程序
 235   4                          DispFlag+=3;
 236   4                              key1flag=1;
 237   4                              if(DispFlag>12)//0x0C)
 238   4                              {
 239   5                                DispFlag=0; 
 240   5                              }
 241   4                              else
C51 COMPILER V8.02   CLOCK623                                                              06/26/2008 19:56:19 PAGE 5   

 242   4                          {
 243   5                               //******
 244   5                      }
 245   4                         //返回
 246   4                        }
 247   3                        else
 248   3                          {
 249   4                            if(key2==0)
 250   4                                  {
 251   5                                      //key2子程序
 252   5                                         switch(DispFlag)
 253   5                                         {
 254   6                                            case 0:
 255   6                                                 
 256   6                                               break;
 257   6                                                case 1:
 258   6                                               break;
 259   6                                                case 2:
 260   6                                               break;
 261   6                                                case 3:
 262   6                                               break;
 263   6                                                case 6:
 264   6                                               break;
 265   6                                                case 9:
 266   6                                               break;
 267   6                                                case 12:
 268   6                                               break;
 269   6                                         }
 270   5      
 271   5                                      //返回
 272   5                                      }
 273   4                                else
 274   4                                  {
 275   5                                      //返回
 276   5                                      }
 277   4                          }
 278   3                      } 
 279   2                else 
 280   2                  {
 281   3                        if(key2==1)
 282   3                     {
 283   4                        key2flag=0;
 284   4                     }
 285   3                    else
 286   3                     {
 287   4                     //返回
 288   4                         }
 289   3                  }
 290   2              }
 291   1        else
 292   1          {
 293   2               if(key1==1)
 294   2                 {
 295   3                   key1flag=0;
 296   3                 }
 297   2               else
 298   2                 {
 299   3                 //返回
 300   3                 }   
 301   2          }
 302   1        
 303   1      }
C51 COMPILER V8.02   CLOCK623                                                              06/26/2008 19:56:19 PAGE 6   

 304          void main(void)                                                                                                                  
 305          {
 306   1        ClearDispBuf();        
 307   1        TMOD=0x01;
 308   1        TH0=0x0;
 309   1        TL0=0x0;
 310   1        MSCNT=15;
 311   1      
 312   1        ls164_ab=0;
 313   1        ls164_clk=0;
 314   1      
 315   1        DispFlag=0;
 316   1        loop: 
 317   1            Disp();
 318   1                KeyScan();
 319   1                goto loop;
 320   1              
 321   1      }
 322          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    440    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     44    ----
   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 + -