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

📄 dateandtime.lst

📁 本源程序是基于AT89C51单片机的
💻 LST
📖 第 1 页 / 共 3 页
字号:
C51 COMPILER V7.50   DATEANDTIME                                                           11/16/2008 10:58:45 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE DATEANDTIME
OBJECT MODULE PLACED IN DateAndTime.OBJ
COMPILER INVOKED BY: D:\电类软件\keil\C51\BIN\C51.EXE DateAndTime.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          sbit led   =P3^7                   ;    //LCD屏背光灯控制线
  13          sbit Play  =P3^0                   ;    //启到发音
  14          /***全局变量************************************************************************/
  15          unsigned char year             =7  ;    //年变量,初始值为2007年
  16          unsigned char month            =4  ;    //月娈量,初始值为4月
  17          unsigned char day              =20 ;    //日变量,初始值为20日
  18          unsigned char week             =5  ;    //周    ,初始值为周5
  19          unsigned char hour             =12 ;    //时    ,初始值为12
  20          unsigned char minute           =0  ;    //分    ,初始值为0
  21          unsigned char second           =0  ;    //秒    ,初始值为0
  22          unsigned char Timer_hour       =12 ;    //定时器的时变量
  23          unsigned char Timer_minute     =0  ;    //定时器的分变量
  24          unsigned char days             =30 ;    //用于存放每月的天数,初使值为30天
  25          unsigned char Timer_Ring       =1  ;    //定时器提示音编号
  26          unsigned char led_on           =15 ;    //LCD显示屏背光灯亮的时间
  27          unsigned char Number           =0  ;    //用于指定报第几个音
  28            
  29          bit Temperature_sin            =1  ;    //温度转换标志,为1,则启动温度转换并刷新
  30          bit LeapYear_sin               =0  ;    //润年标志,1为润年,0为非润年 
  31          bit Timer_sin =0                   ;    //定时器响应标志,为1表示定时已到,正在响应
  32          bit Timer_ON_OFF                   ;    //定时器开/关标志。1开;0为关
  33          bit Timer_Show_sin                 ;    //定时器显示标志。为1表示正处于定时器显示状态
  34          bit Speak_sin                      ;    //报时标志,为1表示正在报时
  35                                                 
  36          unsigned char DATA[3]              ;    //存放两位十进制数的ASCII码
  37          unsigned char Week_Str[4]          ;    //用于存放3个字符,表示星期,如Mon表示星期一
  38          unsigned char Voice[4]             ;    //存放两位十进数的语音地址
  39          unsigned char Speak[11]            ;    //存放将要报出的语音
  40          /***0-10语音地址表******************************************************************/
  41          unsigned char code VoiceTab[]={0x00,0x04,0x08,0x0c,0x10,0x14,0x18,0x1c,0x20,0x24};
  42          
  43          /***2000--2099年中的润年表**********************************************************/
  44          unsigned char code Leap_YearTAB[]={4 ,8 ,12,16,20,24,28,32,36,40,44,48,
  45                                             52,56,60,64,68,72,76,80,84,88,92,96};
  46          /***计算润年************************************************************************/
  47          void Leap_Year(unsigned char Years)
  48          {        
  49   1           unsigned char i;
  50   1               for(i=0;i<24;i++)
  51   1                  { 
  52   2                       if(Years==Leap_YearTAB[i])    //用查表的方法确定是否为润年
  53   2                            {LeapYear_sin=1;break;}
  54   2               else
  55   2                            LeapYear_sin=0;
C51 COMPILER V7.50   DATEANDTIME                                                           11/16/2008 10:58:45 PAGE 2   

  56   2                      }
  57   1      }
  58          /***计算每月的天数******************************************************************/
  59          unsigned char Momth_Days(unsigned char Months)
  60          {
  61   1           switch(Months)
  62   1                 { case 2  :{if(LeapYear_sin==1)  //二月份天数,润年为29天,非润年为28天
  63   3                                days=29;
  64   3                                         else
  65   3                                            days=28;
  66   3                                         };break;
  67   2                       case 4  :                          //四、六、九、十一月份为30天
  68   2                       case 6  :
  69   2                       case 9  :
  70   2                       case 11 :days=30  ;break;
  71   2                       default :days=31  ;            //其余月份为31天
  72   2                      }
  73   1              days=days+1        ;
  74   1              return(days);                       //返回值=某月的实际天数+1。
  75   1      }                                           
  76          /***星期转换************************************************************************/
  77          void WeekToStr( char n)
  78          {
  79   1           switch(n)
  80   1             { case 1 :{Week_Str[0]='M' ;     //星期一,Mon
  81   3                            Week_Str[1]='o' ;
  82   3                                        Week_Str[2]='n' ;
  83   3                                        Week_Str[3]='\0';
  84   3                                        };break         ;
  85   2                   case 2 :{Week_Str[0]='T' ;     //星期二,Tue
  86   3                            Week_Str[1]='u' ;
  87   3                                        Week_Str[2]='e' ;
  88   3                                        Week_Str[3]='\0';
  89   3                                        };break         ;
  90   2                   case 3 :{Week_Str[0]='W' ;     //星期三,Wen
  91   3                            Week_Str[1]='e' ;
  92   3                                        Week_Str[2]='n' ;
  93   3                                        Week_Str[3]='\0';
  94   3                                        };break         ;
  95   2                   case 4 :{Week_Str[0]='T' ;     //星期四,Thu
  96   3                            Week_Str[1]='h' ;
  97   3                                        Week_Str[2]='u' ;
  98   3                                        Week_Str[3]='\0';
  99   3                                        };break         ;
 100   2                   case 5 :{Week_Str[0]='F' ;     //星期五,Fri
 101   3                            Week_Str[1]='r' ;
 102   3                                        Week_Str[2]='i' ;
 103   3                                        Week_Str[3]='\0';
 104   3                                        };break         ;
 105   2                   case 6 :{Week_Str[0]='S' ;     //星期六,Sat
 106   3                            Week_Str[1]='a' ;
 107   3                                        Week_Str[2]='t' ;
 108   3                                        Week_Str[3]='\0';
 109   3                                        };break         ;
 110   2                       case 7 :{Week_Str[0]='S' ;     //星期日,Sun
 111   3                            Week_Str[1]='u' ;
 112   3                                        Week_Str[2]='n' ;
 113   3                                        Week_Str[3]='\0';
 114   3                                        };break         ;
 115   2                 }
 116   1      } 
 117          /***类型转换(将字符型数据转换成相应的ASCII码****************************************/  
C51 COMPILER V7.50   DATEANDTIME                                                           11/16/2008 10:58:45 PAGE 3   

 118          void CharToStr(unsigned char t) 
 119          {
 120   1              DATA[0]=(t/10)%10+'0'          ;  //取十位,并转换成相应的ASCII码               
 121   1              DATA[1]=t%10+'0'               ;  //取个位,并转换成相应的ASCII码                                       
 122   1              DATA[2]='\0'                   ;  //字符串结束符                                        
 123   1      } 
 124          /***延时程序************************************************************************/
 125          void Delay1ms(unsigned char n)        //延时时间≈(4*n+996*n)us=n ms
 126          {  
 127   1           unsigned char k=166;
 128   1               while(--n)
 129   1                  {  while(--k)
 130   2                         ;
 131   2                      }
 132   1      }
 133          /***键盘扫描程序********************************************************************/  
 134          unsigned char Key_Scan(void)
 135          {  
 136   1               if((P2&0x0f)!=0x0f)                             //判断P.4--P2.7是否有键按下
 137   1                  { Delay1ms(10)        ;                      //延时10ms,消抖动
 138   2                        if((P2&0x0f)!=0x0f)
 139   2                           { led_on=15      ;                      //LCD屏的背光灯亮的时间重新赋值
 140   3                                 led=1          ;                                              //只要有键按下,LCD屏的背光灯就亮
 141   3                                 Timer_sin=0    ;                      //只要有键按下,闹铃停止
 142   3                                 switch(P2&0x0f)
 143   3                                  {case 0x0e :{while((P2&0x0f)!=0x0f)  //等待按键释放 
 144   5                                                    ;
 145   5                                                    return 1;                          //P2.4上的键按下,1号键
 146   5                                                                };break;                  
 147   4                                       case 0x0d :{while((P2&0x0f)!=0x0f)  //等待按键释放 
 148   5                                                    ;
 149   5                                                    return 2;                          //P2.5上的键按下,2号键
 150   5                                                                };break;                  
 151   4                                       case 0x0b :{while((P2&0x0f)!=0x0f)  //等待按键释放 
 152   5                                                    ;
 153   5                                                    return 3;                          //P2.6上的键按下,3号键
 154   5                                                                };break;                  
 155   4                                       case 0x07 :{while((P2&0x0f)!=0x0f)  //等待按键释放 
 156   5                                                    ;
 157   5                                                    return 4;                          //P2.7上的键按下,4号键
 158   5                                                                };break;                  
 159   4                                       default   :return 0;
 160   4                                      }
 161   3                              }
 162   2                      }
 163   1              else
 164   1                  return 0;
 165   1      }
 166          /***数字——语音变换****************************************************************/
 167          void NumberToVoice(unsigned char number)//将数字转换成相应的读音。(0≤number<60)
 168          {
 169   1           unsigned char a,b;
 170   1               a=(number/10)%10        ;          //取十位值
 171   1               b=number%10     ;                  //取个位值
 172   1               if(a==0)                           //0≤number<10时的读音,(一个音)
 173   1                 { Voice[0]=VoiceTab[b];          //
 174   2                   Voice[1]=0xff       ;          //
 175   2                      }
 176   1               if(a!=0&&b==0)                     //number的个位为0,十位不为0时的读音
 177   1                {if(a==1)                         //10的读音
 178   2                  {Voice[0]=0x28       ;          //
 179   3                       Voice[1]=0xff       ;          //
C51 COMPILER V7.50   DATEANDTIME                                                           11/16/2008 10:58:45 PAGE 4   

 180   3                      }
 181   2                  Voice[0]=VoiceTab[a] ;          //个位为0,十位不为0和1时的读音
 182   2                      Voice[1]=0x28        ;          //
 183   2                      Voice[2]=0xff        ;          //
 184   2                }
 185   1               if(a==1&&b!=0)                     //10<number<20时的读音,(两个音)
 186   1                 {Voice[0]=0x28        ;          //
 187   2                  Voice[1]=VoiceTab[b] ;          //
 188   2                      Voice[2]=0xff        ;          //

⌨️ 快捷键说明

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