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

📄 clock_main.lst

📁 基于单片机设计的数字钟的设计
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V8.02   CLOCK_MAIN                                                            01/05/2008 15:47:41 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE CLOCK_MAIN
OBJECT MODULE PLACED IN clock_main.OBJ
COMPILER INVOKED BY: D:\Program Files\Keil_C51\C51\BIN\C51.EXE clock_main.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include <AT89X51.H>
   2          #include "CLOCK_MAIN.h"
   3          
   4          
   5          void  delay_ms(int xms)
   6          {   
   7   1              uchar j;
   8   1              int i;  
   9   1              for(i=xms;i>0;i--)
  10   1          for(j=250;j>0;j--);
  11   1      
  12   1      }
  13          void  delay(void)
  14          {       
  15   1          uchar i,j;
  16   1              for(i=5;i>0;i--)
  17   1              for(j=248;j>0;j--);
  18   1      }
  19          
  20          
  21          void main(void)
  22          {
  23   1      TMOD=0x12; //设置工作方式 
  24   1      TH0=0x06; // 设置定时初值 
  25   1      TL0=0x06;
  26   1      TH1=0XFF/50000;
  27   1      TL1=0XFF%50000;
  28   1      TR0=1;      //  开启定时器0 
  29   1      TR1=0;      //  关闭定时器1
  30   1      ET0=1;      // 充许定时中断 
  31   1      ET1=1; 
  32   1      EA=1;
  33   1      flag2=0;
  34   1      
  35   1      
  36   1       while(1)
  37   1       {       
  38   2         
  39   2          KeyBord ( );
  40   2              keymenu( );     
  41   2              alarm_s( );
  42   2              ring();
  43   2              test=!test;
  44   2      
  45   2      
  46   2        }     //end while 1 
  47   1      }//end main 
  48          
  49          void Time0(void) interrupt 1 using 0
  50          {
  51   1              EA=0;
  52   1              mstcnt++;
  53   1              if(mstcnt==8){
  54   2                      mstcnt=0; 
  55   2                      P2=dispbitcode_ca[dispbitcnt];
C51 COMPILER V8.02   CLOCK_MAIN                                                            01/05/2008 15:47:41 PAGE 2   

  56   2                      P0=dispcode_cc[dispbuf[dispbitcnt]];    
  57   2                      dispbitcnt++;
  58   2                      if(dispbitcnt==6){
  59   3                              dispbitcnt=0;
  60   3                              }
  61   2                      }
  62   1              
  63   1              tcnt++;
  64   1              if(tcnt==4000){
  65   2                      tcnt=0;
  66   2                      second++;
  67   2                      if(second==60){
  68   3                              second=0;
  69   3                              minite++;
  70   3                              if(minite==60){
  71   4                                      minite=0;
  72   4                                      hour++;
  73   4                                      if(hour==24)  {
  74   5                                              hour=0;
  75   5                                              p_month_day=p_month_day+1;
  76   5                               }  // end if (hour)
  77   4                              } //end if (minite)
  78   3                      }//end if(second )
  79   2              
  80   2                       if(flag1==1)
  81   2                      {
  82   3                      dispbuf[0]=second%10;
  83   3                      dispbuf[1]=second/10;
  84   3                      dispbuf[2]=minite%10;
  85   3                      dispbuf[3]=minite/10;
  86   3                      dispbuf[4]=hour%10;
  87   3                      dispbuf[5]=hour/10;     
  88   3                      } 
  89   2              }//end if (tcont) 
  90   1              EA=1;
  91   1      }
  92          
  93          
  94          
  95          void Time1(void) interrupt 3 using 0
  96          {
  97   1        
  98   1           test=!test;
  99   1      
 100   1              if((flag0==0x80)&&(tcnt<2000))
 101   1              {
 102   2              TH1=0xfe;          // 重装定时器频率为1600hz 
 103   2          TL1=0xc7; 
 104   2              TR1=1;
 105   2              speak=!speak;
 106   2              }
 107   1      //      else TR1=0;
 108   1              
 109   1              if((flag0==0x40)&&(tcnt<1000))
 110   1      
 111   1              {
 112   2                TH1=0xfd;        // 重装定时器频率为800hz
 113   2            TL1=0x8f; 
 114   2            TR1=1;
 115   2                speak=!speak;   
 116   2                }
 117   1               // else TR1=0;  
C51 COMPILER V8.02   CLOCK_MAIN                                                            01/05/2008 15:47:41 PAGE 3   

 118   1      
 119   1        if (flag2)
 120   1        { 
 121   2           TH1=0XFF/50000;
 122   2               TL1=0XFF%50000;
 123   2               TR1=1;            // 重起定时器1 
 124   2              if (second%2)      //
 125   2              {  if (flag0==1 ){
 126   4                flag0=0;
 127   4           undispbuf[0]=dispbuf[0] ;  // 进行数据保护
 128   4               undispbuf[1]=dispbuf[1] ; 
 129   4               undispbuf[2]=dispbuf[2] ; 
 130   4               undispbuf[3]=dispbuf[3] ;       
 131   4               undispbuf[4]=dispbuf[4] ;      
 132   4               undispbuf[5]=dispbuf[5] ;}     
 133   3      
 134   3              if  (flag2==0x01)
 135   3                 
 136   3                       dispbuf[0]=16 ;  // 显示灭(查表的)
 137   3          if  ( flag2==0x02)
 138   3                   dispbuf[1]=16 ;
 139   3          if (flag2==0x04)
 140   3                   dispbuf[2]=16 ; 
 141   3              if (flag2==0x08)
 142   3                   dispbuf[3]=16 ; 
 143   3              if (flag2==0x10)
 144   3                   dispbuf[4]=16 ; 
 145   3              if (flag2==0x20)
 146   3                   dispbuf[5]=16 ; 
 147   3               }
 148   2              else                                             // 恢复显示
 149   2              {  
 150   3                if(flag0==0){
 151   4           flag0=1;
 152   4               dispbuf[0]=undispbuf[0] ; 
 153   4               dispbuf[1]=undispbuf[1] ; 
 154   4               dispbuf[2]=undispbuf[2] ; 
 155   4               dispbuf[3]=undispbuf[3] ;
 156   4               dispbuf[4]=undispbuf[4] ; 
 157   4               dispbuf[5]=undispbuf[5] ; }
 158   3      
 159   3              }
 160   2        }
 161   1      
 162   1              
 163   1      
 164   1                      
 165   1      
 166   1      }
 167                  
 168          /*****************************************************************
 169          //
 170          //
 171          *****************************************************************/
 172          
 173          
 174          
 175           uchar  KeyBord (void)
 176          {
 177   1      
 178   1              uchar  key ;
 179   1              key =P1&0xf;
C51 COMPILER V8.02   CLOCK_MAIN                                                            01/05/2008 15:47:41 PAGE 4   

 180   1              if(key)        // 检测到按键
 181   1              {   delay();      // 去抖动延时
 182   2                      P1=P1&0xf;
 183   2                      key=P1;
 184   2             if (key==0x0f)
 185   2                 {
 186   3                         ligth=0;   // 输出指示
 187   3                     return 0;
 188   3                 }
 189   2                 else 
 190   2                 {               
 191   3                         ligth=1;  // 输出指示
 192   3                         return key;
 193   3                 }
 194   2              }
 195   1              return 0;
 196   1      
 197   1       }
 198          
 199          
 200           void  keymenu(void )
 201           {
 202   1      
 203   1          uchar state=0x01;
 204   1               key=KeyBord();
 205   1               // 主功能键 
 206   1              
 207   1               if (key==KEY1)
 208   1               {       
 209   2                       flag1=0;      //停止时间显示
 210   2                         /*
 211   2                       // 刷新数据区
 212   2                              
 213   2                      dispbuf[0]=0; 
 214   2                      dispbuf[1]=0;   
 215   2                  dispbuf[2]=0;
 216   2                  dispbuf[3]=0; 
 217   2                  dispbuf[4]=0;
 218   2                  dispbuf[5]=0;
 219   2                  flag2=0x3f;   //计数时间显示闪烁等待开始
 220   2                      TR1=1;  
 221   2                       key=KeyBord();
 222   2                       while (key!=KEY1)
 223   2                       {
 224   2                           key=KeyBord();
 225   2                               if (key==KEY2)
 226   2                               {
 227   2                                       flag2=0; // 停止闪烁
 228   2                                       flag3=1 ; //开始时间计时标志 
 229   2                               }
 230   2                               if (key==KEY3){
 231   2                               if (flag3==1)
 232   2                                               flag3=0; }
 233   2                       if (key==KEY4)
 234   2                                       {
 235   2                                       if (flag3==0)
 236   2                                       {
 237   2                                       // 刷新数据区  
 238   2                                              dispbuf[0]=0; 
 239   2                                              dispbuf[1]=0;   
 240   2                                              dispbuf[2]=0;
 241   2                                      dispbuf[3]=0; 
C51 COMPILER V8.02   CLOCK_MAIN                                                            01/05/2008 15:47:41 PAGE 5   

 242   2                              dispbuf[4]=0;
 243   2                              dispbuf[5]=0;
 244   2                                       }
 245   2                                       }
 246   2                          delay_ms(100) ;
 247   2                      //      key=KeyBord();
 248   2                       } // enf while (key!=key1) 结束计时模块 
 249   2                       
 250   2                         */
 251   2               flag3=0;
 252   2                       flag2=0x01;
 253   2                       TR1=1;
 254   2                       dispbuf[0]=alarm[0][1]%10; // 刷新数据区  
 255   2                       dispbuf[1]=alarm[0][1]/10;
 256   2               dispbuf[2]=alarm[0][0]%10;
 257   2                       dispbuf[3]=alarm[0][0]/10;
 258   2                       //dispbuf[4]=al_state&&0x01;
 259   2                       dispbuf[5]=0;
 260   2                       if (al_state&&0x01)
 261   2                                                dispbuf[4]=10;
 262   2                                                else
 263   2                                                dispbuf[4]=11;
 264   2                      
 265   2                       key=KeyBord();
 266   2                       while( key==KEY1)
 267   2                              key=KeyBord();         // 等待按间释放
 268   2                       while(key!=KEY1)
 269   2                       {
 270   3                                
 271   3                               key=KeyBord();
 272   3                               if (key==KEY2)
 273   3                               {
 274   4                                       if (flag2==1){
 275   5                                               alarm[num][1]=alarm[num][1]+1;
 276   5                                               dispbuf[0]=dispbuf[0]+1;
 277   5                                      }
 278   4                                       if (flag2==2){
 279   5                                        alarm[num][1]=alarm[num][1]+10;
 280   5                                      dispbuf[1]=dispbuf[1]+1;
 281   5                                        }

⌨️ 快捷键说明

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