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

📄 clock626.lst

📁 一个本人编写的时钟程序
💻 LST
字号:
C51 COMPILER V8.02   CLOCK626                                                              06/27/2008 10:51:22 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE CLOCK626
OBJECT MODULE PLACED IN CLOCK626.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE CLOCK626.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   CLOCK626                                                              06/27/2008 10:51:22 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   CLOCK626                                                              06/27/2008 10:51:22 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_led4(); 
 173   2               Send74ls164(Sag_led234[DispBuf[9]]);
 174   2               Delay(2500);
 175   2      
 176   2                       Select_led3(); 
 177   2               Send74ls164(Sag_led1[DispBuf[10]]);
 178   2               Delay(2500);
 179   2                      break;
C51 COMPILER V8.02   CLOCK626                                                              06/27/2008 10:51:22 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                        }
C51 COMPILER V8.02   CLOCK626                                                              06/27/2008 10:51:22 PAGE 5   

 242   3                        else if(key2==0)
 243   3                                  {
 244   4                                      //key2子程序
 245   4                                         switch(DispFlag)
 246   4                                         {
 247   5                                            case 0: //显示"月,日"
 248   5                                                  DispFlag+=1;
 249   5                                                      key2flag=1;
 250   5                                               break;
 251   5      
 252   5                                                case 1: //显示"秒"
 253   5                                                  DispFlag+=1;
 254   5                                                      key2flag=1;
 255   5                                               break;
 256   5      
 257   5                                                case 2: //返回显示"时,分"
 258   5                                                  DispFlag=0;
 259   5                                                      key2flag=1;
 260   5                                               break;
 261   5      
 262   5                                                case 3: //"月"+1   
 263   5                                                  MonthBuf+=1;
 264   5                                               break;
 265   5      
 266   5                                                case 6: //"日"+1 
 267   5                                                  DayBuf+=1;
 268   5                                               break;
 269   5      
 270   5                                                case 9: //"时"+1 
 271   5                                                  HourBuf+=1;
 272   5                                               break;
 273   5      
 274   5                                                case 12://"分"+1 
 275   5                                                  MinuteBuf+=1;
 276   5                                               break;
 277   5      
 278   5                                               default:
 279   5                                               break;
 280   5                                         }
 281   4      
 282   4                                      //返回
 283   4                                      }
 284   3                      } 
 285   2                else if(key2==1)
 286   2                     {
 287   3                        key2flag=0;
 288   3                     }
 289   2              }
 290   1        else if(key1==1)
 291   1                 {
 292   2                   key1flag=0;
 293   2                 }
 294   1      }
 295          void main(void)                                                                                                                  
 296          {
 297   1        ClearDispBuf();        
 298   1        TMOD=0x01;
 299   1        TH0=0x0;
 300   1        TL0=0x0;
 301   1        MSCNT=15;
 302   1      
 303   1        ls164_ab=0;
C51 COMPILER V8.02   CLOCK626                                                              06/27/2008 10:51:22 PAGE 6   

 304   1        ls164_clk=0;
 305   1      
 306   1        DispFlag=0;
 307   1        loop: 
 308   1            Disp();
 309   1                KeyScan();
 310   1                goto loop;
 311   1              
 312   1      }
 313          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    512    ----
   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 + -