|
- /////////////////////////////////////////
- ///作者:改變 //
- ///名稱:電瓶車定時充電器,到時間斷開 //
- ///日期:2010.11.26 //
- /////////////////////////////////////////
- #include <reg52.h>
- #define uchar unsigned char
- #define uint unsigned int
- unsigned char rem[6]={0,7,3,0,0,0};
- unsigned code bcd[12]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0x7f};
- uint m0,j;
- bit DD_1,SMXS;
- sbit DD=P0^7;
- sbit DSKG=P3^1;
- sbit SB1=P1^0; //分時切換鍵
- sbit SB2=P1^1; //時減減
- sbit SB3=P1^2; //分減減
- //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- void yanshi()
- {uint kk;
- kk=100;
- while(kk--);
- }
- ////////////顯示分秒
- xianshim()
- {unsigned char i;
- for (i=2;i<6;i++)
- {
- P2=~(0x01<<(i-2));
- P0=bcd[rem[i]];
- if((i-2)==1)if(DD_1)DD=0;
- yanshi();
- P0=0xff;
- }
- }
- /////////////////////////////////
- ////////////顯示時分
- xianshis()
- {unsigned char i;
- for (i=0;i<4;i++)
- {
- P2=~(0x01<<i);
- P0=bcd[rem[i]];
- if(i==1)if(DD_1)DD=0;
- yanshi();
- P0=0xff;
- }
- }
- /////////////////////////////////
- jishi() interrupt 1
- {
- TH0=(65536-46080)/256;
- TL0=(65536-46080)%256;
- m0++;
- if(m0==9)DD_1=~DD_1;
- if(m0==20)/////////////////20次一秒
- {
- DD_1=~DD_1;
- m0=0;
- if(rem[5]==0)
- {
- if(rem[4]==0)
- {
- if(rem[3]==0)
- {
- if(rem[2]==0)
- {
- if(rem[1]==0)
- {
- if(rem[0]==0)
- {
- DSKG=1;////////////全零零時斷電
- TR0=0;
- rem[0]=rem[1]=rem[2]=rem[3]=rem[4]=rem[5]=0;
- }
- else
- {
- rem[0]--;
- rem[1]=rem[3]=rem[5]=9;
- rem[2]=rem[4]=5;
- }
- }
- else
- {
- rem[1]--;
- rem[2]=rem[4]=5;
- rem[3]=rem[5]=9;
- }
- }
- else
- {
- rem[2]--;
- rem[4]=5;
- rem[3]=rem[5]=9;
- }
- }
- else
- {
- rem[3]--;
- rem[4]=5;
- rem[5]=9;
- }
- }
- else
- {
- rem[4]--;
- rem[5]=9;
- }
- }
- else rem[5]--;
- }
- }
- /////////////////////////////////
- anjian()
- {
- P1=0xff;
- if(SB1==0)
- {
- yanshi();
- if(SB1==0)
- {
- while(SB1==0);
- SMXS=~SMXS;
- }
- }
- if(SB2==0)
- {
- yanshi();
- if(SB2==0)
- {
- while(SB2==0);
- if(rem[1]==0)
- {
- if(rem[0]==0)
- {
- rem[0]=rem[1]=1;
- }
- else
- {
- rem[0]--;
- rem[1]=9;
- }
- }
- else rem[1]--;
- }
- }
- if(SB3==0)
- {
- yanshi();
- if(SB3==0)
- {
- while(SB3==0);
- if(rem[3]==0)
- {
- if(rem[2]==0)
- {
- rem[2]=5;
- rem[3]=9;
- }
- else
- {
- rem[2]--;
- rem[3]=9;
- }
- }
- else rem[3]--;
- }
- }
- }
- //////////////////////////////////
- void main(void)
- {
- m0=0;
- TMOD=0x01;
- TH0=(65536-45833)/256;
- TL0=(65536-45833)%256;
- EA=1;
- ET0=1;
- TR0=1;
- DSKG=0;
- j=0;
- while(1)
- {
- if(SMXS)xianshis();//時顯示
- else xianshim();//秒顯示
- anjian();
- j++;
- if(j==5000)/////秒時標志定時切換
- {
- j=0;
- SMXS=~SMXS;
- }
- }
- }
復制代碼
|
|