dataandtime.lst

来自「本源程序是基于AT89C51单片机的」· LST 代码 · 共 292 行 · 第 1/2 页

LST
292
字号
C51 COMPILER V7.50   DATAANDTIME                                                           04/20/2007 12:49:12 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE DATAANDTIME
OBJECT MODULE PLACED IN DataAndTime.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE DataAndTime.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1           /***********************************************************************************
   2           ************************************************************************************
   3                                  ********************************                      
   4                                   基于MSC-51单片机的万年历程序
   5                                  ********************************
   6                 文件名称:DataAndTime.c
   7                 设 计 者:  黄开坤
   8           ***********************************************************************************/
   9          #include <reg51.h>
  10          #include <LCD1602.h>
  11          #include <DS18B20.h>
  12          /***全局变量************************************************************************/
  13          unsigned char year             =7  ;    //年变量,初始值为2007年
  14          unsigned char month            =4  ;    //月娈量,初始值为4月
  15          unsigned char day              =20 ;    //日变量,初始值为20日
  16          unsigned char week             =5  ;    //周    ,初始值为周5
  17          unsigned char hour             =12 ;    //时    ,初始值为12
  18          unsigned char minute           =0  ;    //分    ,初始值为0
  19          unsigned char second           =2  ;    //秒    ,初始值为0
  20          unsigned char Timer_hour       =12 ;    //定时器的时变量
  21          unsigned char Timer_minute     =0  ;    //定时器的分变量
  22          unsigned char days                 ;    //用于存放每月的天数
  23          
  24          unsigned char Temperature_sin  =1            ;    //温度转换标志,为1,则启动温度转换并刷新
  25          bit Timer_sin=0                      ;    //定时器响应标志,为1表示定时已到,正在响应
  26          bit LeapYear_sin                   ;    //润年标志,1为润年,0为非润年 
  27          
  28          unsigned char DATA[3]              ;
  29          unsigned char Week_Str[4]          ;    //用于存放3个字符表示星期,如Mon表示星期一
  30          /***2000--2099年中的润年表**********************************************************/
  31          unsigned char Leap_YearTAB[24]={4 , 8,12, 6,20,24,28,32,36,40,44,48,
  32                                          52,56,60,64,68,72,76,80,84,88,92,96};
  33          /***计算润年************************************************************************/
  34          void Leap_Year(unsigned char Years)
  35          {
  36   1           unsigned char i;
  37   1               for(i=0;i<24;i++)
  38   1                  { if(Leap_YearTAB[i]==Years)    //用查表的方法确定是否为润年
  39   2                            LeapYear_sin=1;
  40   2                        else
  41   2                            LeapYear_sin=0;
  42   2                      }
  43   1      }
  44          /***计算每月的天数******************************************************************/
  45          unsigned char Momth_Days(unsigned char Months)
  46          {
  47   1           switch(Months)
  48   1                 { case 2  :{if(LeapYear_sin)     //二月份天数,润年为29天,非润年为28天
  49   3                                return 29;
  50   3                                         else
  51   3                                            return 28;
  52   3                                         };break;
  53   2                       case 4  :                          //四、六、九、十一月份为30天
  54   2                       case 6  :
  55   2                       case 9  :
C51 COMPILER V7.50   DATAANDTIME                                                           04/20/2007 12:49:12 PAGE 2   

  56   2                       case 11 :return 30;break;
  57   2                       default :return 31;            //其余月份为31天
  58   2                      }
  59   1      }                                           
  60          /***星期转换************************************************************************/
  61          void WeekToStr( char n)
  62          {
  63   1           switch(n)
  64   1             { case 1 :{Week_Str[0]='M' ;     //星期一,Mon
  65   3                            Week_Str[1]='o' ;
  66   3                                        Week_Str[2]='n' ;
  67   3                                        Week_Str[3]='\0';
  68   3                                        };break         ;
  69   2                   case 2 :{Week_Str[0]='T' ;     //星期二,Tue
  70   3                            Week_Str[1]='u' ;
  71   3                                        Week_Str[2]='e' ;
  72   3                                        Week_Str[3]='\0';
  73   3                                        };break         ;
  74   2                   case 3 :{Week_Str[0]='W' ;     //星期三,Wen
  75   3                            Week_Str[1]='e' ;
  76   3                                        Week_Str[2]='n' ;
  77   3                                        Week_Str[3]='\0';
  78   3                                        };break         ;
  79   2                   case 4 :{Week_Str[0]='T' ;     //星期四,Thu
  80   3                            Week_Str[1]='h' ;
  81   3                                        Week_Str[2]='u' ;
  82   3                                        Week_Str[3]='\0';
  83   3                                        };break         ;
  84   2                   case 5 :{Week_Str[0]='F' ;     //星期五,Fri
  85   3                            Week_Str[1]='r' ;
  86   3                                        Week_Str[2]='i' ;
  87   3                                        Week_Str[3]='\0';
  88   3                                        };break         ;
  89   2                   case 6 :{Week_Str[0]='S' ;     //星期六,Sat
  90   3                            Week_Str[1]='a' ;
  91   3                                        Week_Str[2]='t' ;
  92   3                                        Week_Str[3]='\0';
  93   3                                        };break         ;
  94   2                       case 7 :{Week_Str[0]='S' ;     //星期日,Sun
  95   3                            Week_Str[1]='u' ;
  96   3                                        Week_Str[2]='n' ;
  97   3                                        Week_Str[3]='\0';
  98   3                                        };break         ;
  99   2                 }
 100   1      } 
 101          /***类型转换(将字符型数据转换成相应的ASCII码****************************************/  
 102          void CharToStr(unsigned char t) 
 103          {
 104   1              DATA[0]=(unsigned char)(t/10)%10+'0';  //取十位,并转换成相应的ASCII码          
 105   1              DATA[1]=(unsigned char)(t/1)%10+'0' ;  //取个位,并转换成相应的ASCII码                                   
             -         
 106   1              DATA[2]='\0';                          //字符串结束符                                   
 107   1      } 
 108          /***延时程序************************************************************************/
 109          void Delay1ms(unsigned char n)          //延时时间≈(4*n+996*n)us=n ms
 110          {  
 111   1           unsigned char k=166;
 112   1               while(--n)
 113   1                  {  while(--k)
 114   2                         ;
 115   2                      }
 116   1      }
C51 COMPILER V7.50   DATAANDTIME                                                           04/20/2007 12:49:12 PAGE 3   

 117          /***键盘扫描程序********************************************************************/
 118            
 119          unsigned char Key_Scan(void)
 120          {  
 121   1               if((P1&0x0f)!=0x0f)                             //判断P1.0--P1.3是否有键按下
 122   1                  { Delay1ms(10)        ;                      //延时10ms,消抖动
 123   2                        if((P1&0x0f)!=0x0f)
 124   2                           { switch(P1&0x0f)
 125   3                                  {case 0x0e :{while((P1&0x0f)!=0x0f)  //等待按键释放 
 126   5                                                    ;
 127   5                                                    return 1;                          //P1.0上的键按下
 128   5                                                                };break;                  
 129   4                                       case 0x0d :{while((P1&0x0f)!=0x0f)  //等待按键释放 
 130   5                                                    ;
 131   5                                                    return 2;                          //P1.1上的键按下
 132   5                                                                };break;                  

⌨️ 快捷键说明

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