main.lst
来自「51单片机项目集」· LST 代码 · 共 586 行 · 第 1/2 页
LST
586 行
273 void GUI_Init()
274 {
275 1 uint i,j;
276 1 ////////进入界面///////////
277 1 LCD12864_init();
278 1 ClearLCD();
279 1 LCD_ShowTemp(); //在显示图片之前启动温度转换
280 1 img12864_disp(uBmp); //显示图片
281 1
282 1 for(i=0;i<10;i++)
283 1 for(j=0;j<32767;j++);
284 1
285 1 ClearLCD();
286 1
287 1 /////////描绘框架//////////
288 1 Rect(0,0,127,63,1);
289 1 Line(62,0,62,62,1);
290 1 Line(0,48,127,48,1);
291 1 Line(0,15,127,15,1);
292 1 Line(24,15,24,48,1);
293 1
294 1 Line(63,32,128,32,1);
295 1 Line(97,0,97,15,1);
296 1 //Line(24,15,24,48,1);
297 1
298 1 ////////时间初始化//////////
299 1 SetTime(sys); //设置时间
C51 COMPILER V8.02 MAIN 11/03/2010 22:45:22 PAGE 6
300 1 GetTime(&sys); //获得时间
301 1
302 1 Show_YMD();
303 1
304 1 LCD_ShowTime(sys.cSec,6,111,Sec_Flag,UpLine,UnderLine);
305 1 en_disp(6,103,1,Asc,":",1,UpLine,UnderLine);
306 1 LCD_ShowTime(sys.cMin,6,87,Min_Flag,UpLine,UnderLine);
307 1 en_disp(6,79,1,Asc,":",1,UpLine,UnderLine);
308 1 LCD_ShowTime(sys.cHour,6,63,Hour_Flag,UpLine,UnderLine);
309 1
310 1 hz_disp(2,64,1,ucLunar[11],1,NoUpLine,NoUnderLine); //"农"
311 1 hz_disp(2,80,1,ucLunar[12],1,NoUpLine,NoUnderLine); //"历"
312 1 hz_disp(4,79,1,uMod[1],1,UpLine,NoUnderLine); //"月"
313 1 ////////显示初始化温度//////
314 1 en_disp(0,65,2,Asc,dispBuf,1,UpLine,UnderLine);
315 1 hz_disp(0,81,1,ucLunar[18],1,UpLine,UnderLine);
316 1 }
317
318
319 /***********************************************************
320 // 函数名: DecToBCD()
321 // 入口参数: void
322 // 出口参数: void
323 // 功能: 把时间由10进制转为BCD
324 // 说明: DS1302以BCD存储
325
326 ***********************************************************/
327 void DecToBCD()
328 {
329 1 sys.cHour=(((sys.cHour)/10)<<4)+((sys.cHour)%10);
330 1 sys.cMin=(((sys.cMin)/10)<<4)+((sys.cMin)%10);
331 1 sys.cSec=((sys.cSec/10)<<4)+((sys.cSec)%10);
332 1 sys.cYear=((sys.cYear/10)<<4)+((sys.cYear)%10);
333 1 sys.cMon=((sys.cMon/10)<<4)+((sys.cMon)%10);
334 1 sys.cDay=((sys.cDay/10)<<4)+((sys.cDay)%10);
335 1 }
336
337 /***********************************************************
338 // 函数名: Time_Set()
339 // 入口参数: void
340 // 出口参数: void
341 // 功能: 时间设置
342 // 说明: 具体的时间设置
343
344 ***********************************************************/
345 void Time_Set()
346 {
347 1
348 1 if(State_Flag) //设置键按下
349 1 {
350 2 State_Flag=FALSE;
351 2 State_Set++;
352 2 //State_Set%=7;
353 2 if(State_Set==8) State_Set=0;
354 2 }
355 1
356 1 Hour_Flag=TRUE;Min_Flag=TRUE;Sec_Flag=TRUE;
357 1 Year_Flag=TRUE;Mon_Flag=TRUE;Day_Flag=TRUE;
358 1
359 1 switch(State_Set) //设置类型
360 1 {
361 2 case 0: //无设置
C51 COMPILER V8.02 MAIN 11/03/2010 22:45:22 PAGE 7
362 2
363 2 break;
364 2
365 2 case 1: //设置时
366 2 Hour_Flag=FALSE;
367 2 break;
368 2
369 2 case 2: //设置分
370 2 Min_Flag=FALSE;
371 2 break;
372 2
373 2
374 2 case 3: //设置秒
375 2 Sec_Flag=FALSE;
376 2 break;
377 2
378 2 case 4: //设置天
379 2 Day_Flag=FALSE;
380 2 break;
381 2
382 2 case 5:
383 2 Mon_Flag=FALSE; //设置月
384 2 break;
385 2
386 2 case 6:
387 2 Year_Flag=FALSE; //设置年
388 2 break;
389 2
390 2 case 7: //无动作,设置此值为让"年"的反白消失。
391 2
392 2 break;
393 2 }
394 1
395 1 if(Inc_Flag) //加键被按下
396 1 {
397 2 Inc_Flag=FALSE;
398 2 switch(State_Set)
399 2 {
400 3 case 0:
401 3
402 3 break;
403 3
404 3 case 1: //小时加
405 3 sys.cHour++;
406 3 (sys.cHour)%=24;
407 3 break;
408 3
409 3 case 2: //分加
410 3 sys.cMin++;
411 3 sys.cMin%=60;
412 3 break;
413 3
414 3 case 3: //秒加
415 3 sys.cSec++;
416 3 sys.cSec%=60;
417 3 break;
418 3
419 3 case 4: //天加
420 3 (sys.cDay)=(sys.cDay%Mon2[YearFlag(sys.cYear)][sys.cMon])+1;
421 3 break;
422 3
423 3 case 5: //月加
C51 COMPILER V8.02 MAIN 11/03/2010 22:45:22 PAGE 8
424 3 sys.cMon=(sys.cMon%12)+1;
425 3 break;
426 3
427 3 case 6:
428 3 sys.cYear++; //年加
429 3 sys.cYear=sys.cYear%100;
430 3 break;
431 3 }
432 2 sys.cWeek=GetWeekDay(sys.cYear,sys.cMon,sys.cDay); //算出星期
433 2 DecToBCD(); //转为BCD
434 2 SetTime(sys); //存入DS1302
435 2 }
436 1
437 1 if(Dec_Flag) //减键按下
438 1 {
439 2 Dec_Flag=FALSE;
440 2 switch(State_Set)
441 2 {
442 3 case 0:
443 3
444 3 break;
445 3
446 3 case 1:
447 3 sys.cHour=(sys.cHour+23)%24; //时减
448 3 break;
449 3
450 3 case 2: //分减
451 3 sys.cMin=(sys.cMin+59)%60;
452 3 break;
453 3
454 3 case 3: //秒减
455 3 sys.cSec=(sys.cSec+59)%60;
456 3 break;
457 3
458 3 case 4: //天减
459 3 sys.cDay=((sys.cDay+Mon2[YearFlag(sys.cYear)][sys.cMon]-1)%Mon2[YearFlag(sys.cYear)][sys.cMon]);
460 3 if(sys.cDay==0) sys.cDay=Mon2[YearFlag(sys.cYear)][sys.cMon];
461 3 break;
462 3
463 3 case 5: //月减
464 3 sys.cMon=(sys.cMon+11)%12;
465 3 if(sys.cMon==0) sys.cMon=12;
466 3 break;
467 3
468 3 case 6: //年减
469 3 sys.cYear=(sys.cYear+99)%100;
470 3 break;
471 3 }
472 2 sys.cWeek=GetWeekDay(sys.cYear,sys.cMon,sys.cDay);
473 2 DecToBCD();
474 2 SetTime(sys);
475 2 }
476 1
477 1
478 1
479 1 }
480 void main()
481 {
482 1 SFR_Init();
483 1 CAL_Init();
484 1 GUI_Init();
485 1 TR0=1;
C51 COMPILER V8.02 MAIN 11/03/2010 22:45:22 PAGE 9
486 1 TR1=1;
487 1 while(1)
488 1 {
489 2 GetTime(&sys); //获得时间
490 2 LCD_ShowTemp(); //显示温度
491 2 LCD_ShowWNL(); //显示万年历
492 2 Time_Set(); //时间设置
493 2 }
494 1 }
495
496 void timer0() interrupt 1 //控制温度采集
497 {
498 1 TH0= (-50000)/256;
499 1 TL0= (-50000)%256;
500 1 T0_Count++;
501 1 if(T0_Count==20)
502 1 {
503 2 Tmp_Count++;
504 2 T0_Count=0;
505 2 }
506 1
507 1 if(Tmp_Count==33)
508 1 {
509 2 Tmp_Count=0;
510 2 Tmp_Flag=TRUE;
511 2 }
512 1 }
513
514
515 void timer1() interrupt 3 //按键扫描
516 {
517 1 TH1= (-10000)/256;
518 1 TL1= (-10000)%256;
519 1 keyinput(); // 设置
520 1 if (keyvalue&0x10)
521 1 {
522 2 State_Flag=TRUE;
523 2 keyvalue &= 0xef; //清键值,保证一直按下只执行一次按键动作。
524 2 }
525 1 //精度键检测 //080616
526 1
527 1 if (keyvalue&0x20 ) //加
528 1 {
529 2 Inc_Flag=TRUE;
530 2 keyvalue &= 0xdf; //清键值,保证一直按下只执行一次按键动作。
531 2 }
532 1
533 1 //蜂鸣器键检测 //080616
534 1 if (keyvalue&0x40) //减
535 1 {
536 2 Dec_Flag=TRUE;
537 2 keyvalue &= 0xbf; //清键值,保证一直按下只执行一次按键动作。
538 2 }
539 1
540 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 5280 ----
CONSTANT SIZE = 4276 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
C51 COMPILER V8.02 MAIN 11/03/2010 22:45:22 PAGE 10
DATA SIZE = 30 46
IDATA SIZE = ---- ----
BIT SIZE = 12 14
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 4 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?