题目2_时钟11111.LST
资源名称:89s52_rtc.rar [点击查看]
上传用户:wzx8880901
上传日期:2009-04-09
资源大小:37k
文件大小:25k
源码类别:
嵌入式/单片机编程
开发平台:
C/C++
- C51 COMPILER V8.05a 题目2_时钟11111 11/26/2008 23:33:52 PAGE 1
- C51 COMPILER V8.05a, COMPILATION OF MODULE 题目2_时钟11111
- OBJECT MODULE PLACED IN 题目2_时钟11111.OBJ
- COMPILER INVOKED BY: C:KeilC51BINC51.EXE 题目2_时钟11111.c DEBUG OBJECTEXTEND
- line level source
- 1 #include <reg52.h>
- 2 #define uchar unsigned char
- 3 #define uint unsigned int
- 4 sbit duan=P2^0;
- 5 sbit wela1=P2^1;
- 6 sbit wela2=P2^2;
- 7 sbit p23=P2^3;
- 8 sbit p24=P2^4;
- 9 sbit p25=P2^5;
- 10 sbit p26=P2^6;
- 11 sbit p27=P2^7;
- 12 sbit p10=P1^0;
- 13 sbit p11=P1^1;
- 14 sbit p12=P1^2;
- 15 sbit p13=P1^3;
- 16 sbit p14=P1^4;
- 17 sbit p15=P1^5;
- 18 sbit p16=P1^6;
- 19 sbit p17=P1^7;
- 20 sbit p30=P3^0;
- 21 sbit p31=P3^1;
- 22 sbit p32=P3^2;
- 23 sbit p33=P3^3;
- 24 sbit p34=P3^4;
- 25 sbit p35=P3^5;
- 26 sbit p36=P3^6;
- 27 sbit p37=P3^7;
- 28 sbit awela1=P2^5;
- 29 sbit dula=P2^6;
- 30 sbit wela=P2^7;
- 31 sbit dula1=P2^4;
- 32 bit runnian,dayue,flag;
- 33 uchar code tabledu[]={
- 34 0x3f,0x06,0x5b,0x4f,
- 35 0x66,0x6d,0x7d,0x07,
- 36 0x7f,0x6f,0x00};
- 37 uchar code tablewe[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf};
- 38 uchar nian,yue,ri,shi,fen,miao,cont,day,days,s,tt;
- 39
- 40 void init();
- 41 void display1();
- 42 void display2();
- 43 void delay(uint z);
- 44 void time();
- 45 void year();
- 46 void key();
- 47 void jia();
- 48 void jian();
- 49 void display();
- 50 void dxyue();
- 51 void main()
- 52 {
- 53 1 init(); //初始化
- 54 1 while(1)
- 55 1 {
- C51 COMPILER V8.05a 题目2_时钟11111 11/26/2008 23:33:52 PAGE 2
- 56 2 time();
- 57 2 display();
- 58 2 key();
- 59 2 }
- 60 1 }
- 61
- 62 void display()
- 63 {
- 64 1 display1(); //显示子函数打包
- 65 1 display2();
- 66 1 }
- 67
- 68 void key()
- 69 {
- 70 1 if(p34==0) //选择更改位。
- 71 1 {
- 72 2 delay(20); //去抖
- 73 2 if(p34==0)
- 74 2 {
- 75 3 while(!p34)display(); //未松开按键时数码管依然能显示
- 76 3 s++;
- 77 3 cont=0; //保证按键按下时间过长时,松开后,能马上闪烁而不用等待.
- 78 3 if(s==7)
- 79 3 {
- 80 4 s=0;
- 81 4 }
- 82 3 }
- 83 2 }
- 84 1 if(p35==0) //加位
- 85 1 {
- 86 2 if(s==0) // 没有按p34的情况下,按P35或P36的无效。
- 87 2 {}
- 88 2 else
- 89 2 {
- 90 3 while(!p35)
- 91 3 display();
- 92 3 jia();
- 93 3 }
- 94 2 }
- 95 1 if(p36==0) //减位
- 96 1 {
- 97 2 if(s==0) // 没有按p34的情况下,按P35或P36的无效。
- 98 2 {}
- 99 2 else
- 100 2 {
- 101 3 while(p36==0)
- 102 3 {
- 103 4 display();
- 104 4 }
- 105 3 jian();
- 106 3 }
- 107 2 }
- 108 1 }
- 109 void jian() //减
- 110 {
- 111 1 if(s==1) //年
- 112 1 {
- 113 2 nian--;
- 114 2 if(nian==0xff) //2099年
- 115 2 {
- 116 3 nian=99;
- 117 3 }
- C51 COMPILER V8.05a 题目2_时钟11111 11/26/2008 23:33:52 PAGE 3
- 118 2 year();
- 119 2 }
- 120 1 if(s==2) //月
- 121 1 {
- 122 2 yue--;
- 123 2 if(yue==0)
- 124 2 {
- 125 3 yue=12;
- 126 3 }
- 127 2 dxyue();
- 128 2 }
- 129 1 if(s==3) //日
- 130 1 {
- 131 2 ri--;
- 132 2 if(ri==0)
- 133 2 {
- 134 3 if(yue==2)
- 135 3 {
- 136 4 if(runnian)
- 137 4 {
- 138 5 ri=29;
- 139 5 }
- 140 4 else
- 141 4 {
- 142 5 ri =28;
- 143 5 }
- 144 4 }
- 145 3 else
- 146 3 {
- 147 4 if(dayue)
- 148 4 {
- 149 5 ri=31;
- 150 5 }
- 151 4 else
- 152 4 {
- 153 5 ri=30;
- 154 5 }
- 155 4 }
- 156 3 }
- 157 2
- 158 2 }
- 159 1 if(s==4)
- 160 1 {
- 161 2 shi--;
- 162 2 if(shi==0xff)
- 163 2 {
- 164 3 shi=23;
- 165 3 }
- 166 2 }
- 167 1 if(s==5)
- 168 1 {
- 169 2 fen--;
- 170 2 if(fen==0xff)
- 171 2 {
- 172 3 fen=59;
- 173 3 }
- 174 2 }
- 175 1 if(s==6)
- 176 1 {
- 177 2 miao--;
- 178 2 if(miao==0xff)
- 179 2 {
- C51 COMPILER V8.05a 题目2_时钟11111 11/26/2008 23:33:52 PAGE 4
- 180 3 miao=59;
- 181 3 }
- 182 2 }
- 183 1 }
- 184
- 185 void jia()
- 186 {
- 187 1
- 188 1 if(s==1)
- 189 1 {
- 190 2 nian++;
- 191 2 year();
- 192 2 }
- 193 1 if(s==2)
- 194 1 {
- 195 2 yue++;
- 196 2 if(yue==13)
- 197 2 {
- 198 3 yue=1;
- 199 3 }
- 200 2 dxyue();
- 201 2 }
- 202 1 if(s==3)
- 203 1 {
- 204 2 ri++;
- 205 2
- 206 2 if(yue==2)
- 207 2 {
- 208 3
- 209 3 if(ri>=day)
- 210 3 {
- 211 4 ri=1;
- 212 4 }
- 213 3 }
- 214 2 else
- 215 2 {
- 216 3
- 217 3 if(ri>=days)
- 218 3 {
- 219 4 ri=1;
- 220 4 }
- 221 3 }
- 222 2 }
- 223 1 if(s==4)
- 224 1 {
- 225 2 shi++;
- 226 2 if(shi==24)
- 227 2 {
- 228 3 shi=0;
- 229 3 }
- 230 2 }
- 231 1 if(s==5)
- 232 1 {
- 233 2 fen++;
- 234 2 if(fen==60)
- 235 2 {
- 236 3 fen=0;
- 237 3 }
- 238 2 }
- 239 1 if(s==6)
- 240 1 {
- 241 2 miao++;
- C51 COMPILER V8.05a 题目2_时钟11111 11/26/2008 23:33:52 PAGE 5
- 242 2 if(miao==60)
- 243 2 {
- 244 3 miao=0;
- 245 3 }
- 246 2 }
- 247 1
- 248 1 }
- 249
- 250 void init()
- 251 {
- 252 1
- 253 1 flag=1;
- 254 1 TMOD=0x01;
- 255 1 TH0=0X4C;
- 256 1 TL0=0X00;
- 257 1 EA=1;
- 258 1 ET0=1;
- 259 1 TR0=1;
- 260 1 nian=8;
- 261 1 yue=11;
- 262 1 ri=25;
- 263 1 shi=20;
- 264 1 fen=30;
- 265 1 year();
- 266 1 s=0;
- 267 1
- 268 1 }
- 269 void display2() //时分秒
- 270 {
- 271 1 uchar x,y;
- 272 1 //----------------------------------
- 273 1 x=shi%100/10; //时十位
- 274 1 y=shi%10; //时个位
- 275 1 if(s==4) //校对时间时闪烁用。
- 276 1 {
- 277 2 if(cont==12)
- 278 2 {
- 279 3 cont=0;
- 280 3 flag=~flag;
- 281 3
- 282 3 }
- 283 2 if(flag)
- 284 2 {
- 285 3 x=0x0a;
- 286 3 y=0x0a;
- 287 3
- 288 3 }
- 289 2 }
- 290 1 P0=0;
- 291 1 dula1=1;
- 292 1 P0=tabledu[x];
- 293 1 dula1=0;
- 294 1 P0=0xff;
- 295 1 awela1=1;
- 296 1 P0=tablewe[0];
- 297 1 awela1=0;
- 298 1 delay(2);
- 299 1
- 300 1 P0=0; //时个
- 301 1 dula1=1;
- 302 1 P0=tabledu[y];
- 303 1 dula1=0; P0=0xff;
- C51 COMPILER V8.05a 题目2_时钟11111 11/26/2008 23:33:52 PAGE 6
- 304 1 awela1=1;
- 305 1 P0=tablewe[1];
- 306 1 awela1=0;
- 307 1 delay(2);
- 308 1 //----------------------------------
- 309 1 //----------------------------------
- 310 1 x=fen%100/10; //分十位
- 311 1 y=fen%10; //分个位
- 312 1 if(s==5)
- 313 1 {
- 314 2 if(cont==12)
- 315 2 {
- 316 3 cont=0;
- 317 3 flag=~flag;
- 318 3
- 319 3 }
- 320 2 if(flag)
- 321 2 {
- 322 3 x=0x0a;
- 323 3 y=0x0a;
- 324 3
- 325 3 }
- 326 2 }
- 327 1 P0=0;
- 328 1 dula1=1;
- 329 1 P0=tabledu[x];
- 330 1 dula1=0; P0=0xff;
- 331 1 awela1=1;
- 332 1 P0=tablewe[2];
- 333 1 awela1=0;
- 334 1 delay(2);
- 335 1
- 336 1 //分个位
- 337 1 P0=0;
- 338 1 dula1=1;
- 339 1 P0=tabledu[y];
- 340 1 dula1=0; P0=0xff;
- 341 1 awela1=1;
- 342 1 P0=tablewe[3];
- 343 1 awela1=0;
- 344 1 delay(2);
- 345 1 //----------------------------------
- 346 1 //----------------------------------
- 347 1 x=miao%100/10; //秒十位
- 348 1 y=miao%10;
- 349 1
- 350 1 //秒十位
- 351 1 if(s==6)
- 352 1 {
- 353 2 if(cont==12)
- 354 2 {
- 355 3 cont=0;
- 356 3 flag=~flag;
- 357 3
- 358 3 }
- 359 2 if(flag)
- 360 2 {
- 361 3 x=0x0a;
- 362 3 y=0x0a;
- 363 3
- 364 3 }
- 365 2 }
- C51 COMPILER V8.05a 题目2_时钟11111 11/26/2008 23:33:52 PAGE 7
- 366 1 P0=0;
- 367 1 dula1=1;
- 368 1 P0=tabledu[x];
- 369 1 dula1=0; P0=0xff;
- 370 1 awela1=1;
- 371 1 P0=tablewe[4];
- 372 1 awela1=0;
- 373 1 delay(2);
- 374 1
- 375 1 P0=0; //秒个位
- 376 1 dula1=1;
- 377 1 P0=tabledu[y];
- 378 1 dula1=0;
- 379 1 P0=0xff;
- 380 1 awela1=1;
- 381 1 P0=tablewe[5];
- 382 1 awela1=0;
- 383 1 delay(2);
- 384 1 }
- 385
- 386 void display1() //年月日
- 387 {
- 388 1 uchar x,y;
- 389 1 //----------------------------------
- 390 1 x=nian%100/10; //年十位
- 391 1 y=nian%10; //年个位
- 392 1 if(s==1) //校对时间时闪烁用。
- 393 1 {
- 394 2 if(cont==12)
- 395 2 {
- 396 3 cont=0;
- 397 3 flag=~flag;
- 398 3
- 399 3 }
- 400 2 if(flag)
- 401 2 {
- 402 3 x=0x0a;
- 403 3 y=0x0a;
- 404 3 }
- 405 2 }
- 406 1 P0=0;
- 407 1 dula=1;
- 408 1 P0=tabledu[x];
- 409 1 dula=0;
- 410 1
- 411 1 P0=0xff;
- 412 1 wela=1;
- 413 1 P0=tablewe[0];
- 414 1 wela=0;
- 415 1 delay(2);
- 416 1
- 417 1 P0=0; //年个
- 418 1 dula=1;
- 419 1 P0=tabledu[y];
- 420 1 dula=0; P0=0xff;
- 421 1 wela=1;
- 422 1 P0=tablewe[1];
- 423 1 wela=0;
- 424 1 delay(2);
- 425 1 //----------------------------------
- 426 1 //----------------------------------
- 427 1 x=yue%100/10; //月十位
- C51 COMPILER V8.05a 题目2_时钟11111 11/26/2008 23:33:52 PAGE 8
- 428 1 y=yue%10; //月个位
- 429 1 if(s==2)
- 430 1 {
- 431 2 if(cont==12)
- 432 2 {
- 433 3 cont=0;
- 434 3 flag=~flag;
- 435 3
- 436 3 }
- 437 2 if(flag)
- 438 2 {
- 439 3 x=0x0a;
- 440 3 y=0x0a;
- 441 3
- 442 3 }
- 443 2 }
- 444 1 P0=0;
- 445 1 dula=1;
- 446 1 P0=tabledu[x];
- 447 1 dula=0; P0=0xff;
- 448 1 wela=1;
- 449 1 P0=tablewe[2];
- 450 1 wela=0;
- 451 1 delay(2);
- 452 1
- 453 1 //月个位
- 454 1 P0=0;
- 455 1 dula=1;
- 456 1 P0=tabledu[y];
- 457 1 dula=0; P0=0xff;
- 458 1 wela=1;
- 459 1 P0=tablewe[3];
- 460 1 wela=0;
- 461 1 delay(2);
- 462 1 //----------------------------------
- 463 1 //----------------------------------
- 464 1 x=ri%100/10; //日十位
- 465 1 y=ri%10;
- 466 1
- 467 1 //日个位
- 468 1 if(s==3)
- 469 1 {
- 470 2 if(cont==12)
- 471 2 {
- 472 3 cont=0;
- 473 3 flag=~flag;
- 474 3
- 475 3 }
- 476 2 if(flag)
- 477 2 {
- 478 3 x=0x0a;
- 479 3 y=0x0a;
- 480 3
- 481 3 }
- 482 2 }
- 483 1 P0=0;
- 484 1 dula=1;
- 485 1 P0=tabledu[x];
- 486 1 dula=0; P0=0xff;
- 487 1 wela=1;
- 488 1 P0=tablewe[4];
- 489 1 wela=0;
- C51 COMPILER V8.05a 题目2_时钟11111 11/26/2008 23:33:52 PAGE 9
- 490 1 delay(2);
- 491 1
- 492 1 P0=0; //日个位
- 493 1 dula=1;
- 494 1 P0=tabledu[y];
- 495 1 dula=0;
- 496 1 P0=0xff;
- 497 1 wela=1;
- 498 1 P0=tablewe[5];
- 499 1 wela=0;
- 500 1 delay(2);
- 501 1 //----------------------------------
- 502 1 }
- 503
- 504
- 505
- 506
- 507
- 508 void year() //平润年
- 509 {
- 510 1 uint aaa;
- 511 1 aaa=2000+nian; //为了计算闰年。
- 512 1 if(((aaa%4 == 0)&&(aaa%100!=0)) || (aaa%400==0))
- 513 1 {
- 514 2 runnian=1;
- 515 2 day=30; //闰年
- 516 2 }
- 517 1 else
- 518 1 {
- 519 2 runnian=0;
- 520 2 day=29; //平年
- 521 2 }
- 522 1 }
- 523
- 524 void dxyue() //大小月
- 525 {
- 526 1
- 527 1 if(yue==1||yue==3||yue==5||yue==7||yue==8||yue==10||yue==12)
- 528 1 {
- 529 2 days=32; //31天
- 530 2 }
- 531 1 else
- 532 1 {
- 533 2 days=31; //30天
- 534 2 }
- 535 1 }
- 536 void time()
- 537 {
- 538 1 if(cont==20) //一秒钟加一。不是很精确。
- 539 1 {
- 540 2 cont=0;
- 541 2 miao++;
- 542 2 if(miao==60)
- 543 2 {
- 544 3 miao=0;
- 545 3 fen++;
- 546 3 if(fen==60)
- 547 3 {
- 548 4 fen=0;
- 549 4 shi++;
- 550 4 if(shi==24)
- 551 4 {
- C51 COMPILER V8.05a 题目2_时钟11111 11/26/2008 23:33:52 PAGE 10
- 552 5 shi=0;
- 553 5 ri++;
- 554 5 dxyue() ;
- 555 5 if(yue!=2)
- 556 5 {
- 557 6 if(ri==days)
- 558 6 {
- 559 7 ri=1;
- 560 7 yue++;
- 561 7 if(yue==13)
- 562 7 {
- 563 8 yue=1;
- 564 8 nian++;
- 565 8 year();
- 566 8 }
- 567 7 }
- 568 6 }
- 569 5 else
- 570 5 {
- 571 6 if(ri==day)
- 572 6 {
- 573 7 ri=1;
- 574 7 yue++;
- 575 7 }
- 576 6 }
- 577 5 }
- 578 4 }
- 579 3 }
- 580 2 }
- 581 1
- 582 1 }
- 583 void dingshi() interrupt 1
- 584 {
- 585 1 TH0=0x4C;
- 586 1 TL0=0x00;
- 587 1 cont++;
- 588 1 }
- 589
- 590
- 591
- 592 void delay(uint z)
- 593 {
- 594 1 uint x,y;
- 595 1 for(x=z;x>0;x--)
- 596 1 for(y=55;y>0;y--);
- 597 1 }
- MODULE INFORMATION: STATIC OVERLAYABLE
- CODE SIZE = 1213 ----
- CONSTANT SIZE = 17 ----
- XDATA SIZE = ---- ----
- PDATA SIZE = ---- ----
- DATA SIZE = 11 2
- IDATA SIZE = ---- ----
- BIT SIZE = 3 ----
- END OF MODULE INFORMATION.
- C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)