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

📄 disk.lst

📁 万年历C语言
💻 LST
字号:
C51 COMPILER V8.08   DISK                                                                  08/21/2011 19:21:23 PAGE 1   


C51 COMPILER V8.08, COMPILATION OF MODULE DISK
OBJECT MODULE PLACED IN DISK.OBJ
COMPILER INVOKED BY: D:\Keil\C51\BIN\C51.EXE DISK.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /*-------------------------------------
   2          程序功能:万年历
   3          硬件连接:输出(PO连接J3,P1.0连接位码,P1.1连接段码)
   4                           独立按键输入(P2连接K1--8,但是只用到了端口低位4个)
   5          --------------------------------------*/
   6          
   7          
   8          #include<reg52.h>
   9          #define uint unsigned int
  10          #define uchar unsigned char
  11          #define ulong unsigned long
  12          #define InPut P2
  13          #define DataOut P0
  14          
  15          sbit SegDat=P1^0;
  16          sbit SegCs=P1^1;
  17          
  18          ulong JBit;
  19          uint KeyData,CsCount,JChoose,i;
  20          uint TimeCount,SecondData,MinuteData,HourData;DayData,MonthData,YearDataL,YearDataH;
  21          bit JDisplay;
  22          
  23          uint ReadKey();
  24          
  25          
  26          DisplayData [8];
  27          CsData [9]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0x67};
  28          
  29          uchar   code tab[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x67};
  30                                                             /*0     1    2    3    4    5    6    7    8    9    共阴*/
  31          
  32          //*****时间模式*****
  33          TimeDisplay()   
  34          {DisplayData [0]=tab[HourData/10];
  35   1       DisplayData [1]=tab[HourData%10];
  36   1       DisplayData [2]=0x40;
  37   1       DisplayData [3]=tab[MinuteData/10];
  38   1       DisplayData [4]=tab[MinuteData%10];
  39   1       DisplayData [5]=0x40;
  40   1       DisplayData [6]=tab[SecondData/10];
  41   1       DisplayData [7]=tab[SecondData%10];            //送入显示数据
  42   1       if(JChoose==1)                                                         //小时修改
  43   1              {if(KeyData==0xfb)
  44   2                      {KeyData=0xff,HourData++;}
  45   2               if(KeyData==0xf7)
  46   2                      {KeyData=0xff,HourData--;}
  47   2              
  48   2               if(SecondData%2==0)                            //光标闪烁
  49   2               {DisplayData [0]=0x00;
  50   3                DisplayData [1]=0x00;}
  51   2              }
  52   1       else if(JChoose==2)                                            //分钟修改
  53   1              {if(KeyData==0xfb)
  54   2                      {KeyData=0xff,MinuteData++;}
  55   2               if(KeyData==0xf7)
C51 COMPILER V8.08   DISK                                                                  08/21/2011 19:21:23 PAGE 2   

  56   2                      {KeyData=0xff,MinuteData--;}
  57   2              
  58   2               if(SecondData%2==0)                            //光标闪烁
  59   2               {DisplayData [3]=0x00;
  60   3                DisplayData [4]=0x00;}
  61   2              }
  62   1       else JChoose=0;
  63   1      }
  64          //*****日期模式*****
  65          DateDisplay()
  66          {DisplayData [0]=tab[2];
  67   1       DisplayData [1]=tab[0];
  68   1       DisplayData [2]=tab[YearDataL/10];
  69   1       DisplayData [3]=tab[YearDataL%10];
  70   1       DisplayData [4]=tab[MonthData/10];
  71   1       DisplayData [5]=tab[MonthData%10];
  72   1       DisplayData [6]=tab[DayData/10];
  73   1       DisplayData [7]=tab[DayData%10];               //送入显示数据
  74   1       if(JChoose==1)                                                 //年份修改
  75   1              {if(KeyData==0xfb)
  76   2                      {KeyData=0xff,YearDataL++;}
  77   2               if(KeyData==0xf7)
  78   2                      {KeyData=0xff,YearDataL--;}
  79   2              
  80   2               if(SecondData%2==0)
  81   2               {DisplayData [0]=0x00;
  82   3                DisplayData [1]=0x00;
  83   3                DisplayData [2]=0x00;
  84   3                DisplayData [3]=0x00;}
  85   2              }
  86   1       else if(JChoose==2)                                    //月份修改
  87   1              {if(KeyData==0xfb)
  88   2                      {KeyData=0xff,MonthData++;}
  89   2               if(KeyData==0xf7)
  90   2                      {KeyData=0xff,MonthData--;}
  91   2              
  92   2               if(SecondData%2==0)
  93   2               {DisplayData [4]=0x00;
  94   3                DisplayData [5]=0x00;}
  95   2              }
  96   1       else if(JChoose==3)                                    //日期修改
  97   1              {if(KeyData==0xfb)
  98   2                      {KeyData=0xff,DayData++;}
  99   2               if(KeyData==0xf7)
 100   2                      {KeyData=0xff,DayData--;}
 101   2              
 102   2               if(SecondData%2==0)
 103   2               {DisplayData [6]=0x00;
 104   3                DisplayData [7]=0x00;}
 105   2              }
 106   1       else JChoose=0;
 107   1      }
 108          
 109          //////////菜单判断系统////////////////
 110          DisplaySystem()
 111          {       if(KeyData==0xfe)               //判断菜单按键
 112   1              {JDisplay=~JDisplay;
 113   2               KeyData=0xff;}
 114   1              else if(KeyData==0xfd)          //判断修改按键
 115   1              {JChoose++;
 116   2               KeyData=0xff;}
 117   1              else;
C51 COMPILER V8.08   DISK                                                                  08/21/2011 19:21:23 PAGE 3   

 118   1      
 119   1              if(JDisplay==0)
 120   1                      {TimeDisplay();}                //时间模式
 121   1              else
 122   1                      {DateDisplay();}                //日期模式
 123   1      }
 124          
 125          
 126          ////////时间判断系统////////////////
 127          HourSystem()    //小时判断
 128          {       if(SecondData==60)
 129   1                      {SecondData=0;
 130   2                       MinuteData++;}
 131   1              else if(SecondData>60)
 132   1                      {SecondData=0;}
 133   1              else;
 134   1              
 135   1              if(MinuteData==60)
 136   1                      {MinuteData=0;
 137   2                       HourData++;}
 138   1              else if(MinuteData>60)
 139   1                      {MinuteData=0;}
 140   1              else;
 141   1              
 142   1              if(HourData>24)
 143   1                      {HourData=0;
 144   2                       DayData++;}
 145   1              else;
 146   1      }
 147          
 148          /////////////日期判断系统///////////
 149          DaySystem()
 150          {       if(MonthData<7&MonthData>0)             //1~7月
 151   1                      {if(MonthData==2)               //2月   
 152   2                              {if(YearDataL%4==0)             //润年
 153   3                                      {if(DayData>29)
 154   4                                              {DayData=1;
 155   5                                               MonthData++;}
 156   4                                       else if(DayData==0)
 157   4                                              {DayData=1;}
 158   4                                       else;
 159   4                                      }
 160   3                               else                                   //平年  
 161   3                                      {if(DayData>28)
 162   4                                              {DayData=1;
 163   5                                               MonthData++;}
 164   4                                       else if(DayData==0)
 165   4                                              {DayData=1;}
 166   4                                       else;
 167   4                                      }
 168   3                              }
 169   2                      
 170   2      
 171   2                       if(MonthData%2==0&MonthData!=2)                //小月
 172   2                              {if(DayData>30)
 173   3                                      {DayData=1;
 174   4                                      MonthData++;}
 175   3                               else if(DayData==0)
 176   3                                              {DayData=1;}
 177   3                               else;          
 178   3                              }
 179   2                       else                                   //大月
C51 COMPILER V8.08   DISK                                                                  08/21/2011 19:21:23 PAGE 4   

 180   2                              {if(DayData>31)
 181   3                                      {DayData=1;
 182   4                                      MonthData++;}
 183   3                               else if(DayData==0)
 184   3                                              {DayData=1;}
 185   3                               else;
 186   3                              }
 187   2                      }
 188   1      
 189   1      
 190   1              else if(MonthData>=7&MonthData<=12)//8~12月     
 191   1                      {if(MonthData%2==0)                             //大月
 192   2                              {if(DayData>31)
 193   3                                      {DayData=1;
 194   4                                      MonthData++;}
 195   3                               else if(DayData==0)
 196   3                                              {DayData=1;}
 197   3                               else;
 198   3                              }
 199   2      
 200   2                       else                                                   //小月
 201   2                              {if(DayData>30)
 202   3                                      {DayData=1;
 203   4                                      MonthData++;}
 204   3                               else if(DayData==0)
 205   3                                              {DayData=1;}
 206   3                               else;
 207   3                              }
 208   2                      
 209   2                      }
 210   1              else if(MonthData==13)          //月份进位
 211   1                      {MonthData=1;
 212   2                       YearDataL++;}
 213   1              else {MonthData=1;}//超出范围
 214   1      }
 215          
 216          ///////////年份判断系统/////////////
 217          YearSystem()
 218                  {if(YearDataL>50)
 219   1                      {YearDataL=50;}
 220   1               else if(YearDataL<0)
 221   1                      {YearDataL=0;}
 222   1               else ;
 223   1              }
 224          ///////////按键////////////
 225          KeyScan()
 226          {       if(ReadKey()!=0xff)
 227   1                      {JBit++;
 228   2                       if(JBit==10)                           //短按防抖
 229   2                              {KeyData=ReadKey();}
 230   2                       else if(JBit%50==0)            //长按加1
 231   2                              {KeyData=ReadKey();}
 232   2                       else; 
 233   2                      }
 234   1              else {JBit=0;}
 235   1      }
 236          
 237          uint ReadKey()                                          //键值读取
 238          {       uint tempkey;
 239   1              InPut=0xff;
 240   1              tempkey=InPut;
 241   1              return (tempkey);
C51 COMPILER V8.08   DISK                                                                  08/21/2011 19:21:23 PAGE 5   

 242   1      }
 243          //*****显示
 244          Display()
 245          {       while(CsCount<8)
 246   1                      {       DataOut=DisplayData[CsCount];   //送数据
 247   2                              SegDat=1;
 248   2                              SegDat=0;
 249   2                              
 250   2                              DataOut=CsData[CsCount];                //送位码
 251   2                              SegCs=1;
 252   2                              SegCs=0;
 253   2                              
 254   2                              for(i=0;i<100;i++);                     //循环写入
 255   2      
 256   2                              DataOut=0xff;                           
 257   2                              SegCs=1;
 258   2                              SegCs=0;
 259   2                              CsCount++;
 260   2                                      
 261   2                      }
 262   1              CsCount=0;              
 263   1      }
 264          
 265          
 266          main()
 267          {       TMOD=0x01;
 268   1              TH0=(65539-50000)/256;
 269   1              TL0=(65539-50000)%256;
 270   1              EA=1;
 271   1              ET0=1;
 272   1              TR0=1;  
 273   1      //*****************************
 274   1              while(1)
 275   1                      {HourSystem();
 276   2                       DaySystem();
 277   2                       YearSystem();
 278   2                       KeyScan();
 279   2                       DisplaySystem();
 280   2                       Display();
 281   2                       }
 282   1      }
 283          ////////定时中断///////////////
 284          void Time() interrupt 1 
 285          {       TH0=(65536-50000)/256;
 286   1              TL0=(65536-50000)%256;
 287   1              TimeCount++;
 288   1              if(TimeCount==20)
 289   1                      {SecondData++;
 290   2                       TimeCount=0;}
 291   1              else;
 292   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1593    ----
   CONSTANT SIZE    =     10    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     62    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      1    ----
END OF MODULE INFORMATION.

C51 COMPILER V8.08   DISK                                                                  08/21/2011 19:21:23 PAGE 6   


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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