|
电子时钟的主程序加原理图- if(s1num==8)
- {
- s1num=0;
- write_com(0x0c);
- TR0=1;
- }
- }
- if(s1num!=0)
- {
- if(s2==0)
- {
- delay(5);
- if(s2==0)
- while(!s2);
- if(s1num==1)
- {
- miao++;
- if(miao==60)
- miao=0;
- write_sfm(10,miao);
- write_com(0x80+0x40+10);
- }
- if(s1num==2)
- {
- fen++;
- if(fen==60)
- fen=0;
- write_sfm(7,fen);
- write_com(0x80+0x40+7);
- }
- if(s1num==3)
- {
- shi++;
- if(shi==24)
- shi=0;
- write_sfm(4,shi);
- write_com(0x80+0x40+4);
- }
- if(s1num==4)
- {
- xingqi++;
- if(xingqi==8)
- xingqi=1;
- write_com(0x80+14);
- write_sf(14,xingqi);
- }
- if(s1num==5)
- {
- tian++;
- if(tian==32)
- tian=1;
- write_sf(9,tian);
- write_com(0x80+9);
- }
- if(s1num==6)
- {
- yue++;
- if(yue==13)
- yue=1;
- write_sf(6,yue);
- write_com(0x80+6);
- }
- if(s1num==7)
- {
- nian++;
- if(nian==100)
- nian=00;
- write_sf(3,nian);
- write_com(0x80+3);
- }
-
- }
- }
- if(s3==0)
- {
- delay(5);
- if(s3==0)
- {
- while(!s3);
- if(s1num==1)
- {
- miao--;
- if(miao==-1)
- miao=59;
- write_sfm(10,miao);
- write_com(0x80+0x40+10);
- }
- if(s1num==2)
- {
- fen--;
- if(fen==-1)
- fen=59;
- write_sfm(7,fen);
- write_com(0x80+0x40+7);
- }
- if(s1num==3)
- {
- shi--;
- if(shi==-1)
- shi=23;
- write_sfm(4,shi);
- write_com(0x80+0x40+4);
- }
- if(s1num==4)
- {
- xingqi--;
- if(xingqi==0)
- xingqi=7;
- write_sf(14,xingqi);
- write_com(0x80+14);
- }
- if(s1num==5)
- {
- tian--;
- if(tian==0)
- tian=31;
- write_com(0x80+9);
- }
- if(s1num==6)
- {
- yue--;
- if(yue==0)
- yue=12;
- write_sf(6,yue);
- write_com(0x80+6);
- }
- if(s1num==7)
- {
- nian--;
- if(nian==0)
- nian=99;
- write_sf(3,nian);
- write_com(0x80+3);
- }
-
- }
- }
- }
- if(s4==0)
- {
- delay(5);
- if(s4==0)
- {
- s1num=0;
- TR0=1;
- }
- while(!s4);
- delay(5);
- }
- }
- void main()
- {
- init();
- while(1)
- {
- keyscan();
-
- if(fen==0)
- { s5=1;}
- else
- {s5=0;}
- }
- }
- uchar leap(uchar nian) //判断是否闰年并返回二月份的天数
- { //闰年返回29,平年返回28
- nian+=2000;
- if(nian%4==0)
- {if(nian%100==0)
- {if(nian%400==0)
- return 29;
- else return 28;
- }
- else return 29;
- }
- else return 28;
- }
- uchar mon(uchar yue) //计算并返回每个月的天数
- {
- switch(yue)
- {
- case 1:
- case 3:
- case 5:
- case 7:
- case 8:
- case 10:
- case 12:return 31;break; //1,3,5,7,8,10,12月每月31天
- case 4:
- case 6:
- case 9:
- case 11:return 30;break; //4,6,9,11月每月30天
- case 2: return leap(nian);break;//返回二月份的天数
- default:break;
- }
- }
- void time0() interrupt 1
- {
- TH0=(65536-46083)/256;
- TL0=(65536-46083)%256;
- count++;
- if(count==20)
- {
- count=0;
- miao++;
- if(miao==60)
- {
- miao=0;
- fen++;
- if(fen==60)
- {
- fen=0;
- shi++;
- if(shi==24)
- {
- shi=0;
- n=mon(yue);
- tian++;
- xingqi++;
- if(++tian>n)
- {
- tian=01;
- yue++;
- if(yue==13)
- {
- yue=0;
- nian++;
- }
- write_sf(3,nian);
- write_com(0x80+3);
- }
- write_sf(6,yue);
- write_com(0x80+6);
- }
- write_sf(14,xingqi);
- write_com(0x80+14);
- write_sf(9,tian);
- write_com(0x80+9);
- }
- write_sfm(4,shi);
- write_com(0x80+0x40+4);
- }
- write_sfm(7,fen);
- write_com(0x80+0x40+7);
- }
- write_sfm(10,miao);
- write_com(0x80+0x40+10);
- }
复制代码
|
|