📄 1302.lst
字号:
204 1 }
205
206 void key(void)
207 {
208 1
209 1 if(k1==0)
210 1 {
211 2 display(); //延时去抖动
212 2 if(k1==0)
213 2 {
214 3 TR0=1; //启动定时器
215 3 bit_count++;
216 3 while(k1==0) display(); //等键释放
217 3 while(1)
218 3 {
219 4
220 4
221 4 if(k1==0) /*设定/移位*/
222 4 {
223 5 display(); //延时去抖动
224 5 if(k1==0)
225 5 {
226 6 bit_count++;
227 6 while(k1==0) display();
228 6 }
229 5 }
230 4
231 4
232 4 if(k2==0)/*调整(+)*/
233 4 {
234 5 display();
235 5 if(k2==0)
236 5 {
237 6 while(k2==0) display();
238 6 display_seg[bit_count-1]=display_seg[bit_count-1]+1;
239 6 /*实际数据调整位=位实际位闪烁位-1*/
240 6 /****************************月份***********************************/
C51 COMPILER V8.02 1302 05/19/2008 20:25:32 PAGE 5
241 6 if(bit_count-1==4) //月十位判别
242 6 {
243 7 if(display_seg[bit_count-1]==2) display_seg[bit_count-1]=0;
244 7 }
245 6 if(bit_count-1==5&&display_seg[4]==1) //月个位判别
246 6 { if(display_seg[bit_count-1]==3) display_seg[bit_count-1]=0;}
247 6 /****************************日期***********************************/
248 6 if(bit_count-1==6) //日期十位判别
249 6 {
250 7 if((display_seg[4]+display_seg[5])==2)
251 7 if(display_seg[bit_count-1]==3) display_seg[bit_count-1]=0;
252 7 if(display_seg[bit_count-1]==4) display_seg[bit_count-1]=0;
253 7 }
254 6 /****************************星周***********************************/
255 6 if(bit_count-1==8) if(display_seg[bit_count-1]==8) display_seg[bit_count-1]=1;
256 6 /****************************时分秒***********************************/
257 6 if(bit_count-1==9) if(display_seg[bit_count-1]==3) display_seg[bit_count-1]=0;//时十位
258 6 if(bit_count-1==10)//时个位
259 6 {
260 7 if(display_seg[9]==2) if(display_seg[bit_count-1]==4) display_seg[bit_count-1]=0;
261 7 else if(display_seg[bit_count-1]==10) display_seg[bit_count-1]=0;
262 7 }
263 6 if(bit_count-1==11||bit_count-1==13)//分十位/秒十位
264 6 if(display_seg[bit_count-1]==6) display_seg[bit_count-1]=0;
265 6 /*********************************************************************/
266 6 if(display_seg[bit_count-1]==10) display_seg[bit_count-1]=0;
267 6 }
268 5 }
269 4
270 4 if(k3==0)/*调整(-)*/
271 4 {
272 5 display();
273 5 if(k3==0)
274 5 {
275 6 while(k3==0) display();
276 6 display_seg[bit_count-1]=display_seg[bit_count-1]-1;
277 6 if(display_seg[bit_count-1]==0xff) display_seg[bit_count-1]=0;
278 6 if(bit_count-1==8) if(display_seg[bit_count-1]==0) display_seg[bit_count-1]=1;
279 6 }
280 5 }
281 4
282 4
283 4 if(bit_count==16)
284 4 {
285 5 TR0=0;
286 5 bit_count=0;
287 5 complex_data();
288 5 write_1302();
289 5 break ;
290 5 }
291 4 display();
292 4
293 4 }
294 3 }
295 2 }
296 1 if(k4==0)/*闹钟设定键*/
297 1 {
298 2 display();
299 2 if(k4==0)
300 2 {
301 3 while(k4==0) display(); //等键释放
302 3 TR0=1; //启动定时器
C51 COMPILER V8.02 1302 05/19/2008 20:25:32 PAGE 6
303 3 bit_count=10;
304 3 clock_write(); //显示闹钟时间(将闹钟数据写入显示缓冲区)
305 3 while(1)
306 3 {
307 4 display();
308 4 if(k4==0) /*设定/移位*/
309 4 {
310 5 display(); //延时去抖动
311 5 if(k4==0)
312 5 {
313 6 bit_count++;
314 6 while(k4==0) display(); //等键释放
315 6 }
316 5 }
317 4
318 4 if(k2==0)/*调整(+)*/
319 4 {
320 5 display();
321 5 if(k2==0);
322 5 {
323 6 while(k2==0) display(); //等键释放
324 6 display_seg[bit_count-1]=display_seg[bit_count-1]+1;
325 6
326 6 /****************************时分秒***********************************/
327 6 if(bit_count-1==9) if(display_seg[bit_count-1]==3) display_seg[bit_count-1]=0;//时十位
328 6 if(bit_count-1==10)//时个位
329 6 {
330 7 if(display_seg[9]==2) if(display_seg[bit_count-1]==4) display_seg[bit_count-1]=0;//
331 7 else if(display_seg[bit_count-1]==10) display_seg[bit_count-1]=0;
332 7 }
333 6 if(bit_count-1==11||bit_count-1==13)//分十位/秒十位
334 6 if(display_seg[bit_count-1]==6) display_seg[bit_count-1]=0;
335 6 /*********************************************************************/
336 6 if(display_seg[bit_count-1]==10) display_seg[bit_count-1]=0;
337 6 }
338 5 }
339 4
340 4 if(k3==0)/*调整(-)*/
341 4 {
342 5 display();
343 5 if(k3==0);
344 5 {
345 6 while(k3==0) display(); //等键释放
346 6 display_seg[bit_count-1]=display_seg[bit_count-1]-1;
347 6 if(display_seg[bit_count-1]==0xff) display_seg[bit_count-1]=0;
348 6
349 6 }
350 5 }
351 4
352 4
353 4 if(bit_count==14)
354 4 {
355 5 TR0=0;
356 5 bit_count=0;
357 5 clock_save();
358 5 break ;
359 5 }
360 4 }
361 3 }
362 2 }
363 1
364 1 if(k5==0) /*闹钟开关*/
C51 COMPILER V8.02 1302 05/19/2008 20:25:32 PAGE 7
365 1 {
366 2 display();
367 2 if(k5==0)
368 2 {
369 3 clock_flag=~clock_flag; //置标志位
370 3 clock_switch=~clock_switch;
371 3 while(k5==0) display();
372 3 }
373 2 }
374 1
375 1
376 1
377 1 }
378 /***************************************/
379 void main(void)
380 {
381 1 TMOD=0x01; //定时器初始化
382 1 TH0=0x3c; //定时100MS中断一次
383 1 TL0=0xb0;
384 1 //TR0=1;
385 1 ET0=1; //开定时器中断
386 1 EA=1; //开总中断
387 1
388 1 clock_flag=0; //闹钟功能开
389 1 clock_switch=1; //闹钟控制指示关
390 1 clock_bell=1; //闹铃关
391 1
392 1 write_1302();
393 1
394 1 while(1)
395 1 {
396 2 read_1302();
397 2 display();
398 2 key();
399 2 clock_compare();
400 2 }
401 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1020 ----
CONSTANT SIZE = 11 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 31 2
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 + -