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

📄 main.lst

📁 单片机并口实验
💻 LST
字号:
C51 COMPILER V6.12  MAIN                                                                   12/05/2005 09:31:23 PAGE 1   


C51 COMPILER V6.12, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN .\main.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE .\main.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          #include <reg52.h>
   2          #include <stdio.h>
   3          #include "absacc.h"
   4          #include "math.h"
   5          
   6          #define port_a 0x0000
   7          #define port_b 0x0100
   8          #define port_c 0x0210
   9          #define port_con 0x0300
  10          
  11          #define key_null 0x00
  12          #define key_set 0x06
  13          #define key_add 0x05
  14          #define key_sub 0x03
  15          
  16          
  17          
  18          
  19          char key_num=0;
  20          int scantimer=0;    //扫描计数单位
  21          int counter=0;  //毫秒计数单位
  22          
  23          char hour=5;
  24          char mini=12;
  25          char sec=4;
  26          
  27          char state=0;//表示当前的状态,0表示工作,其他态表示设置
  28          
  29          char key=key_null;   //输入的键盘至
  30          char last_pressed_key=key_null;
  31          
  32          char scan=1;
  33          char show_loop=0;
  34          
  35          char show_buffer[]={ 0x00,	0x00,0x00,0x00,0x00,0x00,0x00,0x00};
  36          char code char_dot[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
  37          
  38          
  39          void moditimer(void);
  40          void showchar(void);
  41          
  42          void int0(void);
  43          void main ()
  44          {
  45   1      int i=9;
  46   1      
  47   1      EA=1;
  48   1      ET0=1;//
  49   1      TMOD=1;//计数器的工作模式
  50   1      TH0=0xFC;
  51   1      TL0=0x17;
  52   1      
  53   1      
  54   1      TR0=1;//定时器的运行控制位
  55   1      EX0=1;
C51 COMPILER V6.12  MAIN                                                                   12/05/2005 09:31:23 PAGE 2   

  56   1      IT0=1;//外部中断的触发方式选择位
  57   1      
  58   1      P1=0xff;
  59   1      XBYTE[port_con]=0x81;
  60   1      
  61   1      XBYTE[port_a]=0x81;
  62   1      XBYTE[port_b]=scan;
  63   1      XBYTE[port_c]=0x8f;
  64   1      
  65   1      //设置8255
  66   1      
  67   1      while (i==9){
  68   2      }
  69   1      
  70   1      }
  71          
  72          
  73          void int0( )interrupt 0
  74          {
  75   1      key=XBYTE[port_c]&0x07;
  76   1      
  77   1      if (key==key_set){
  78   2                       state++;
  79   2                       if (state>=4){state=0;}}
  80   1      
  81   1      if (state!=0)
  82   1      {   
  83   2       
  84   2      /////////////////////////////
  85   2           if (state==1)
  86   2           {
  87   3               if (key==key_add)
  88   3      		 {
  89   4      		    if (hour<100) hour++;else hour=0;
  90   4                  //hour++;
  91   4      		 }
  92   3               if (key==key_sub)
  93   3      		 {
  94   4      		   // if (hour==0) hour=23;else 
  95   4      		   hour--;
  96   4      		 }
  97   3           }
  98   2      
  99   2      /////////////////////////////
 100   2           if (state==2)
 101   2           {
 102   3               if (key==key_add)
 103   3      		 {
 104   4      		    if (mini<12) mini++;else mini=1;
 105   4              
 106   4      		 }
 107   3               if (key==key_sub)
 108   3      		 {
 109   4      		    if (mini==0) mini=12;else mini--;
 110   4      		 }
 111   3           }
 112   2      
 113   2      /////////////////////////////
 114   2           if (state==3)
 115   2           {
 116   3               if (key==key_add)
 117   3      		 {
C51 COMPILER V6.12  MAIN                                                                   12/05/2005 09:31:23 PAGE 3   

 118   4                 if(mini==2)
 119   4                     if(hour%400==0)
 120   4                        {if (sec<29) sec++;else sec=1; }
 121   4                     else
 122   4                       if(hour%100==0)
 123   4                          {if (sec<28) sec++;else sec=1; }
 124   4                       else
 125   4                         if(hour%4==0)
 126   4                            {if (sec<29) sec++;else sec=1; }
 127   4                         else                       
 128   4                            {if (sec<28) sec++;else sec=1; }
 129   4                 else
 130   4                      if(mini<8&&mini%2==1||mini>=8&&mini%2==0)
 131   4      		            {if (sec<31) sec++;else sec=1;}
 132   4      		       else
 133   4      		           {if (sec<30) sec++;else sec=1;}
 134   4                
 135   4      
 136   4      		 }
 137   3               if (key==key_sub)
 138   3      		 {   if(mini==2)
 139   4                     if(hour%400==0)
 140   4                       {if (sec==1) sec=29;else sec--;}
 141   4                     else
 142   4                       if(hour%100==0)
 143   4                         {if (sec==1) sec=28;else sec--;}
 144   4                       else
 145   4                         if(hour%4==0)
 146   4                           {if (sec==1) sec=29;else sec--;}
 147   4                         else                       
 148   4                           {if (sec==1) sec=28;else sec--;}
 149   4                   else
 150   4                      if(mini<8&&mini%2==1||mini>=8&&mini%2==0)
 151   4                         {if (sec==1) sec=31;else sec--;}
 152   4                      else
 153   4                         {if (sec==1) sec=30;else sec--;} 
 154   4                
 155   4      		 }
 156   3           }
 157   2      	 
 158   2      }//非零状态结束标志
 159   1      
 160   1      showchar();
 161   1      
 162   1      }
 163          
 164          
 165          void timeron( )interrupt 1
 166          {
 167   1      
 168   1      TH0=0xFC;
 169   1      TL0=0x17;
 170   1      
 171   1      
 172   1      //判断是否需要增加一秒
 173   1       
 174   1      if (state==0)
 175   1      {   
 176   2         if(counter<1000){ counter=counter+1;}
 177   2         else
 178   2           { 
 179   3      	 counter=0;
C51 COMPILER V6.12  MAIN                                                                   12/05/2005 09:31:23 PAGE 4   

 180   3      	 moditimer(); 
 181   3      	 show_buffer[2]=0x40;
 182   3      	 show_buffer[5]=0x40;
 183   3      
 184   3        showchar();
 185   3        }
 186   2        
 187   2        if (counter==500)
 188   2           {
 189   3      	 show_buffer[2]=0x00;
 190   3      	 show_buffer[5]=0x00;
 191   3      	 }
 192   2      
 193   2        
 194   2        }
 195   1      
 196   1       if( state!=0)
 197   1       {
 198   2      	 show_buffer[2]=0x00;
 199   2      	 show_buffer[5]=0x00;
 200   2      
 201   2        if(counter<800 )counter=counter+1;else counter=0;
 202   2         
 203   2        if (counter==0) showchar();
 204   2        if (counter==500)
 205   2           {
 206   3             if (state==1){show_buffer[0]=0;show_buffer[1]=0; };  
 207   3             if (state==2){show_buffer[3]=0;show_buffer[4]=0; };  
 208   3             if (state==3){show_buffer[6]=0;show_buffer[7]=0; };  
 209   3        
 210   3           }
 211   2      
 212   2       }
 213   1      
 214   1      
 215   1      
 216   1        
 217   1      // 循环显示并且扫描键盘
 218   1      
 219   1      if (scantimer<2)
 220   1      {
 221   2      scantimer++;
 222   2      }
 223   1      else
 224   1      {
 225   2        //循环的次数并执行显示
 226   2      
 227   2        if (show_loop<8){show_loop++;}  else{show_loop=0 ;}  
 228   2      
 229   2          XBYTE[port_a]=show_buffer[show_loop];
 230   2      
 231   2          XBYTE[port_b]=~(scan<<show_loop);
 232   2      
 233   2      	scantimer=0;
 234   2      }
 235   1      
 236   1      
 237   1      }
 238          
 239          void moditimer(void)
 240          {
 241   1      //先加上秒
C51 COMPILER V6.12  MAIN                                                                   12/05/2005 09:31:23 PAGE 5   

 242   1      sec++;
 243   1      if(mini==2)
 244   1        if(hour%400==0)
 245   1              { if (sec==30)
 246   2                   { sec=1; 
 247   3                     mini++;
 248   3                     if (mini==13)
 249   3      	           {mini=1;
 250   4      		        hour++;
 251   4      	            if (hour==100){ hour=0; }
 252   4          		   } 
 253   3                    }}
 254   1        else
 255   1           if(hour%100==0)
 256   1                 { if (sec==29)
 257   2                   { sec=1; 
 258   3                     mini++;
 259   3                     if (mini==13)
 260   3      	           {mini=1;
 261   4      		        hour++;
 262   4      	            if (hour==100){ hour=0; }
 263   4          		   } 
 264   3                    } }     
 265   1           else
 266   1              if(hour%4==0)
 267   1                   { if (sec==30)
 268   2                    { sec=1; 
 269   3                     mini++;
 270   3                     if (mini==13)
 271   3      	           {mini=1;
 272   4      		        hour++;
 273   4      	            if (hour==100){ hour=0; }
 274   4          		   } 
 275   3                    } }     
 276   1               else                       
 277   1                   {if (sec==29||sec>30)
 278   2                   { sec=1; 
 279   3                     mini++;
 280   3                     if (mini==13)
 281   3      	           {mini=1;
 282   4      		        hour++;
 283   4      	            if (hour==100){ hour=0; }
 284   4          		   } 
 285   3                    } }      
 286   1      else
 287   1            if(mini<8&&mini%2==1||mini>=8&&mini%2==0)
 288   1      		{ if (sec==32)
 289   2                {  sec=1; 
 290   3                  mini++;
 291   3                  if (mini==13)
 292   3               	{ mini=1;
 293   4      	          hour++;
 294   4                    if (hour==100){ hour=0; }
 295   4      	        } 
 296   3                 }}
 297   1      	else
 298   1      	if (sec==31)
 299   1           {  sec=1; 
 300   2          mini++;
 301   2            if (mini==13)
 302   2          	{ mini=1;
 303   3      	    hour++;
C51 COMPILER V6.12  MAIN                                                                   12/05/2005 09:31:23 PAGE 6   

 304   3              if (hour==100){ hour=0; }
 305   3      	    } 
 306   2           }	        
 307   1      
 308   1      
 309   1      
 310   1       }//---
 311          
 312          
 313          
 314          
 315          
 316          void showchar(void)
 317          {
 318   1      char index=0;
 319   1      index=sec / 10;
 320   1      show_buffer[6]=char_dot[index];
 321   1      index=sec % 10;
 322   1      show_buffer[7]=char_dot[index];
 323   1      
 324   1      index=mini / 10;
 325   1      show_buffer[3]=char_dot[index];
 326   1      index=mini % 10;
 327   1      show_buffer[4]=char_dot[index];
 328   1      
 329   1      index=hour / 10;
 330   1      show_buffer[0]=char_dot[index];
 331   1      index=hour % 10;
 332   1      show_buffer[1]=char_dot[index];
 333   1      
 334   1      
 335   1      }
 336          
 337          
 338          
 339          


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