📄 time.lst
字号:
C51 COMPILER V8.02 TIME 08/16/2007 22:51:26 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE TIME
OBJECT MODULE PLACED IN time.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE time.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include"delay.h"
2 #include"PIO.h"
3 #include"led.h"
4 #include"key.h"
5 int n=0;
6 char time[4]={0,0,0,0};
7 unsigned int date[3]={1,5,2007};
8 uchar month[12]={31,28,31,30,31,30,31,31,30,31,30,31};
9 uchar day=1,work=1,datework=0,daywork=0;
10 void main()
11 {
12 1 unsigned int i=0;
13 1 PT2=1;//定时器2设为高优先级
14 1 IT0=1;//外部中断设为负跳变触发方式
15 1 EX0=1;//开启外部中断
16 1 RCAP2H=0x3c;//初始化定时器2
17 1 RCAP2L=0xb0;
18 1 TH2=0x3c;
19 1 TL2=0xb0;
20 1 TR2=1;//启动定时器2
21 1 ET2=1;//开启定时器2
22 1 EA=1;
23 1 while(1)
24 1 {
25 2 for(date[1]=1;date[1]<=12;date[1]++)//每12个月进1
26 2 {
27 3 for(date[0]=1;date[0]<=month[date[1]-1];date[0]++)//足一个月的天数进1
28 3 {
29 4 for(time[2]=0;time[2]<24;time[2]++)//每24小时进1
30 4 {
31 5 for(time[1]=0;time[1]<60;time[1]++)//每60分进1
32 5 {
33 6 for(time[0]=0;time[0]<60;)//每60秒进1
34 6 {
35 7 num2(2,time[2]);//显示时间
36 7 dot(4);
37 7 num2(3,time[1]);
38 7 dot(6);
39 7 num2(4,time[0]);
40 7 keyread();//键盘扫描
41 7 if(KEY==1&&P2==0xff)//若按下1号键,则显示日期
42 7 {
43 8 datework=1;//日期显示标记
44 8 KEY=0;
45 8 for(i=0;i<150;i++)
46 8 {
47 9 num4(1,date[2]);//显示日期
48 9 dot(4);
49 9 num2(3,date[1]);
50 9 dot(6);
51 9 num2(4,date[0]);
52 9 keyread();//键盘扫描
53 9 if(KEY==1&&P2==0xff)
54 9 {
55 10 daywork=1;//星期显示标记
C51 COMPILER V8.02 TIME 08/16/2007 22:51:26 PAGE 2
56 10 KEY=0;
57 10 for(i=0;i<100;i++)
58 10 {
59 11 w_p(8,day);//显示星期
60 11 delay(10);//使显示稳定
61 11 keyread();//键盘扫描
62 11 if(KEY==1&&P2==0xff)break;//若按下1键,则跳出星期显示循环,回到时间显示循环境保护
63 11 if(KEY==13&&P2==0xff){p32=0;p32=1;KEY=1;}
64 11 }
65 10 daywork=0;//清除星期显示标记
66 10 }
67 9 if(KEY==1)break;
68 9 if(KEY==13&&P2==0xff){p32=0;p32=1;}
69 9 }
70 8 KEY=0;
71 8 datework=0;//清除日期显示标记
72 8 }
73 7 if
74 7 (KEY==13&&P2==0xff){p32=0;p32=1;}
75 7 }
76 6 time[0]=0;
77 6 }
78 5 }
79 4 day++;
80 4 if(day==8)day=1;
81 4 }
82 3 }
83 2 date[2]++;
84 2 if((date[2]%4==0&&date[2]%100!=0)||date[2]%400==0)
85 2 month[1]=29;//如果是闰年,则2月变为29日,否则是28日
86 2 else
87 2 month[1]=28;
88 2 }
89 1 }
90
91 //计时函数每秒使time[0]加1
92 timer0() interrupt 5
93 {
94 1 static uchar t;
95 1 TF2=0;
96 1 t++;
97 1 if(t==20)
98 1 {
99 2 t=0;
100 2 time[0]++;
101 2 }
102 1 }
103
104 //时间设定函数
105 set_time() interrupt 0
106 {
107 1 KEY=0;
108 1 if(daywork)//修改星期
109 1 while(1)
110 1 {
111 2 w_p(8,day);
112 2 delay(10);
113 2 keyread();
114 2 if(KEY==16&&P2==0xff){KEY=0;break;}
115 2 if(KEY==14&&P2==0xff){KEY=0;day++;if(day==8)day=1;}
116 2 if(KEY==15&&P2==0xff){KEY=0;day--;if(day==0)day=7;}
117 2 }
C51 COMPILER V8.02 TIME 08/16/2007 22:51:26 PAGE 3
118 1 if(!datework)//修改时间
119 1 while(1)
120 1 {
121 2 while(1)
122 2 {
123 3 delay(10);
124 3 work=0;
125 3 if(time[0]==60){time[0]=0;time[1]++;}
126 3 num2(4,time[0]);
127 3 keyread();
128 3 if(KEY==16&&P2==0xff){KEY=0;break;}
129 3 if(KEY==13&&P2==0xff){KEY=0;work=1;}
130 3 if(KEY==14&&P2==0xff){KEY=0;time[0]++;if(time[0]==60)time[0]=0;}
131 3 if(KEY==15&&P2==0xff){KEY=0;time[0]--;if(time[0]<0)time[0]=59;}
132 3 if(work)break;
133 3 }
134 2
135 2 if(work)
136 2 while(1)
137 2 {
138 3 delay(10);
139 3 work=0;
140 3 num2(3,time[1]);
141 3 keyread();
142 3 if(KEY==16&&P2==0xff){KEY=0;break;}
143 3 if(KEY==13&&P2==0xff){KEY=0;work=1;}
144 3 if(KEY==14&&P2==0xff){KEY=0;time[1]++;if(time[1]==60)time[1]=0;}
145 3 if(KEY==15&&P2==0xff){KEY=0;time[1]--;if(time[1]<0)time[1]=59;}
146 3 if(work)break;
147 3 }
148 2
149 2 if(work)
150 2 while(1)
151 2 {
152 3 work=0;
153 3 delay(10);
154 3 num2(2,time[2]);
155 3 keyread();
156 3 if(KEY==16){KEY=0;break;}
157 3 if(KEY==13&&P2==0xff){KEY=0;work=1;break;}
158 3 if(KEY==14&&P2==0xff){KEY=0;time[2]++;if(time[2]==24)time[2]=0;}
159 3 if(KEY==15&&P2==0xff){KEY=0;time[2]--;if(time[2]<0)time[2]=23;}
160 3 if(work)break;
161 3 }
162 2 if(work==0)break;
163 2 }
164 1
165 1 else if(!daywork) //修改日期
166 1 while(1)
167 1 {
168 2 while(1)
169 2 {
170 3 delay(10);
171 3 work=0;
172 3 num2(4,date[0]);
173 3 keyread();
174 3 if(KEY==16&&P2==0xff){KEY=0;break;}
175 3 if(KEY==13&&P2==0xff){KEY=0;work=1;}
176 3 if(KEY==14&&P2==0xff){KEY=0;date[0]++;if(date[0]==32)date[0]=0;}
177 3 if(KEY==15&&P2==0xff){KEY=0;date[0]--;if(date[0]==0)date[0]=31;}
178 3 if(work)break;
179 3 }
C51 COMPILER V8.02 TIME 08/16/2007 22:51:26 PAGE 4
180 2
181 2 if(work)
182 2 while(1)
183 2 {
184 3 delay(10);
185 3 work=0;
186 3 num2(3,date[1]);
187 3 keyread();
188 3 if(KEY==16&&P2==0xff){KEY=0;break;}
189 3 if(KEY==13&&P2==0xff){KEY=0;work=1;}
190 3 if(KEY==14&&P2==0xff){KEY=0;date[1]++;if(date[1]==13)date[1]=0;}
191 3 if(KEY==15&&P2==0xff){KEY=0;date[1]--;if(date[1]==0)date[1]=12;}
192 3 if(work)break;
193 3 }
194 2
195 2 if(work)
196 2 while(1)
197 2 {
198 3 work=0;
199 3 delay(10);
200 3 num4(1,date[2]);
201 3 keyread();
202 3 if(KEY==16){KEY=0;break;}
203 3 if(KEY==13&&P2==0xff){KEY=0;work=1;break;}
204 3 if(KEY==14&&P2==0xff){KEY=0;date[2]++;}
205 3 if(KEY==15&&P2==0xff){KEY=0;date[2]--;if(date[2]<0)date[2]=2007;}
206 3 if((date[2]%4==0&&date[2]%100!=0)||date[2]%400==0)
207 3 month[1]=29;//如果是闰年,则2月变为29日,否则是28日
208 3 else
209 3 month[1]=28;
210 3 if(work)break;
211 3 }
212 2 if(work==0)break;
213 2 }
214 1
215 1 }
216
217
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1925 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 30 6
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 + -