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 + -
显示快捷键?