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

📄 main.lst

📁 基于51单片机开发的数字时钟
💻 LST
字号:
C51 COMPILER V8.08   MAIN                                                                  06/03/2007 14:20:58 PAGE 1   


C51 COMPILER V8.08, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: E:\keil c51\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include <reg51.h>
   2          #define uchar unsigned char
   3          #define uint  unsigned int
   4          
   5          sbit P1_0 =P1^0;
   6          sbit P1_1 =P1^1;
   7          sbit P1_2 =P1^2;
   8          sbit P1_3 =P1^3;
   9          sbit P1_7 =P1^7;
  10          sbit P1_6 =P1^6;
  11          
  12          typedef struct   
  13          { uchar hour;
  14            uchar minute;
  15            uchar second; 
  16          }time;
  17          
  18          time now={0,0,0};
  19          time dingshi={0,0,0};  
  20            
  21          uchar code num_tab1[]={0x80,0x40,0x20,0x10,0x08,0x04};                  
  22          uchar code num_tab2[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};   //共阳极显示
  23          uchar state=0;    
  24          uchar count=100;
  25          uchar flag=0;           //调整时间/定时的标志
  26          uchar recount=0;
  27          uchar recount1=0;
  28          
  29          
  30          void delay(uint time1)            //延时子程序
  31          {
  32   1              int i;
  33   1              int k;
  34   1              for(i=0;i<time1;i++)
  35   1              for(k=0;k<100;k++);
  36   1      }
  37          
  38          
  39          void display(time disnum)         //显示子程序
  40          {
  41   1              int hour_shi,hour_ge,min_shi,min_ge,sec_shi,sec_ge,i;
  42   1              int num[6]={0,0,0,0,0,0};
  43   1              hour_shi=disnum.hour/10;
  44   1              hour_ge=disnum.hour%10;
  45   1              min_shi=disnum.minute/10;
  46   1              min_ge=disnum.minute%10;
  47   1              sec_shi=disnum.second/10;
  48   1              sec_ge=disnum.second%10;
  49   1              num[0]=hour_shi;
  50   1              num[1]=hour_ge;
  51   1              num[2]=min_shi;
  52   1              num[3]=min_ge;
  53   1              num[4]=sec_shi;
  54   1              num[5]=sec_ge;
  55   1              for(i=0;i<6;i++)
C51 COMPILER V8.08   MAIN                                                                  06/03/2007 14:20:58 PAGE 2   

  56   1              {
  57   2                P2=num_tab1[i];
  58   2                P0=num_tab2[num[i]];
  59   2                delay(1);
  60   2              }                               
  61   1          
  62   1      }
  63          
  64          
  65          void display_1(uchar wei,uchar k)     //显示子程序1
  66          {
  67   1         uchar wei1,wei2;
  68   1         wei1=wei/10;
  69   1         wei2=wei%10;
  70   1      
  71   1         P2=num_tab1[k];
  72   1         P0=num_tab2[wei1];
  73   1         delay(1);
  74   1         P2=num_tab1[k+1];
  75   1         P0=num_tab2[wei2];
  76   1         delay(1);
  77   1      }
  78          
  79          
  80          void  interrupt_init(void)     
  81          {
  82   1         EA=0;
  83   1         TMOD=0x01;
  84   1         TH0=0xd8;
  85   1         TL0=0xf0;
  86   1         IT0=1;
  87   1         ET0=1;
  88   1         EX0=1;
  89   1         EA=1;
  90   1         TR0=1;     
  91   1      }
  92          
  93          void interrup0(void) interrupt 0 using 3
  94          {  
  95   1         uchar i=0;
  96   1         delay(1);
  97   1         if(P1_0==0)  //调时 
  98   1         {
  99   2           if(flag==1)           //定时的调节
 100   2               {
 101   3                  state++;
 102   3              if(state==9)
 103   3                  { state=0;}
 104   3               }
 105   2               else                   
 106   2               {
 107   3              TR0=0;
 108   3              state++;
 109   3              if(state==4)
 110   3              {
 111   4                    state=0;
 112   4                    TR0=1;
 113   4                  }
 114   3               }
 115   2         }  
 116   1         if(P1_1==0)  //加
 117   1         {
C51 COMPILER V8.08   MAIN                                                                  06/03/2007 14:20:58 PAGE 3   

 118   2           switch(state)
 119   2             {
 120   3               case 0: break;
 121   3               case 1: { 
 122   4                         now.hour++;
 123   4                         if(now.hour==24)
 124   4                         now.hour=0;
 125   4                                         break;
 126   4                       }
 127   3               case 2: { 
 128   4                         now.minute++;
 129   4                         if(now.minute==60)
 130   4                         now.minute=0;
 131   4                                         break;
 132   4                       }
 133   3               case 3: { 
 134   4                         now.second++;
 135   4                         if(now.second==60)
 136   4                         now.second=0;
 137   4                                         break;
 138   4                       }
 139   3                       case 4: break;
 140   3                       case 5: { 
 141   4                         dingshi.hour++;
 142   4                         if(dingshi.hour==60)
 143   4                         dingshi.hour=0;
 144   4                                         break;
 145   4                       }
 146   3      
 147   3                       case 6: { 
 148   4                         dingshi.minute++;
 149   4                         if(dingshi.minute==60)
 150   4                         now.minute=0;
 151   4                                         break;
 152   4                       }
 153   3                       case 7: { 
 154   4                         dingshi.second++;
 155   4                         if(dingshi.second==60)
 156   4                         dingshi.second=0;
 157   4                                         break;
 158   4                       }
 159   3                       case 8: break;
 160   3             }
 161   2         }
 162   1         if(P1_2==0)  //减
 163   1         {
 164   2            switch(state)
 165   2             {
 166   3               case 0: break;
 167   3               case 1: { 
 168   4                         if(now.hour==0)
 169   4                         now.hour=23;
 170   4                                         else
 171   4                                         now.hour--;
 172   4                                         break;
 173   4                       }
 174   3               case 2: { 
 175   4                         if(now.minute==0)
 176   4                         now.minute=59;
 177   4                                         else
 178   4                                         now.minute--;
 179   4                                         break;
C51 COMPILER V8.08   MAIN                                                                  06/03/2007 14:20:58 PAGE 4   

 180   4                       }
 181   3               case 3: { 
 182   4                         if(now.second==0)
 183   4                         now.second=59;
 184   4                                         else
 185   4                                         now.second--;
 186   4                                         break;
 187   4                       }
 188   3                       case 4: break;
 189   3                       case 5: { 
 190   4                         if(dingshi.hour==0)
 191   4                         dingshi.hour=23;                                
 192   4                                         else
 193   4                                         dingshi.hour--;
 194   4                                         break;
 195   4                        }
 196   3      
 197   3                       case 6: { 
 198   4                                         if(dingshi.minute==0)
 199   4                         now.minute=59;
 200   4                                         else
 201   4                                         dingshi.minute--;                              
 202   4                                         break;
 203   4                       }
 204   3                       case 7: { 
 205   4                                         if(dingshi.second==0)
 206   4                         dingshi.second=59;
 207   4                                         else
 208   4                                         dingshi.second--;
 209   4                                         break;
 210   4                       }
 211   3                       case 8: break;
 212   3             }
 213   2         }
 214   1         if(P1_3==0)   // 定时/取消定时
 215   1         {
 216   2            if(flag==0)       // 定时
 217   2                {
 218   3                  flag=1;
 219   3                      state=4;
 220   3                }
 221   2                else                   //取消定时
 222   2                { 
 223   3                  flag=0;
 224   3                      state=0;
 225   3                      dingshi.hour=0;
 226   3                      dingshi.minute=0;
 227   3                      dingshi.second=0;
 228   3                }
 229   2         }
 230   1      }
 231          
 232          void interrup1(void) interrupt 1 using 3
 233          {
 234   1        TR0=0;
 235   1        TH0=0xd8;
 236   1        TL0=0xf0;
 237   1        TR0=1;
 238   1        if(count==0)
 239   1        {
 240   2          count=100;
 241   2          now.second++;
C51 COMPILER V8.08   MAIN                                                                  06/03/2007 14:20:58 PAGE 5   

 242   2          if(now.second==60)
 243   2          {
 244   3            now.minute++;
 245   3            now.second=0;
 246   3            if(now.minute==60)
 247   3            {
 248   4                  recount=(now.hour+1)*2;   //整点提示
 249   4              now.hour++;
 250   4              now.minute=0;
 251   4              if(now.hour==24)
 252   4              {
 253   5                now.hour=0;     
 254   5              }  
 255   4            }  
 256   3                      
 257   3          }
 258   2        if(flag==1 )
 259   2                {
 260   3                   if(dingshi.hour==now.hour && dingshi.minute==now.minute && dingshi.second==now.second )
 261   3                       recount1=18;
 262   3                }
 263   2        if(recount!=0)
 264   2        {
 265   3             P1_7=~P1_7;
 266   3                 recount--;
 267   3        }
 268   2        else
 269   2        { P1_7=0;}
 270   2        if(recount1!=0)
 271   2        {
 272   3             P1_6=~P1_6;
 273   3                 recount1--;
 274   3        }
 275   2        else
 276   2        { P1_6=0;}
 277   2        }
 278   1        else
 279   1        {
 280   2          count--;
 281   2        }
 282   1      
 283   1      }
 284          
 285          
 286          void main(void)             
 287           {  
 288   1          uchar j=0;
 289   1              flag=0;
 290   1          interrupt_init();       //中断初始化   
 291   1              P1_6=0;
 292   1              P1_7=0;
 293   1          while(1)
 294   1          {
 295   2             switch(state)
 296   2             {
 297   3                case 0: display(now);break;
 298   3                case 1: display_1(now.hour,0);break;
 299   3                case 2: display_1(now.minute,2);break;            
 300   3                case 3: display_1(now.second,4);break;
 301   3                        case 4: display(dingshi);break;                 //显示定时初值00:00:00
 302   3                        case 5: display_1(dingshi.hour,0);break;
 303   3                        case 6: display_1(dingshi.minute,2);break; 
C51 COMPILER V8.08   MAIN                                                                  06/03/2007 14:20:58 PAGE 6   

 304   3                        case 7: display_1(dingshi.second,4);break;  
 305   3                    case 8: display(dingshi);break;       //显示定时时间                    
 306   3             }
 307   2              
 308   2          }
 309   1       }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    827    ----
   CONSTANT SIZE    =     28    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     11      26
   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 + -