計時器573.rar
(39.5 KB, 下載次數: 12)
2017-6-19 13:12 上傳
點擊文件名下載附件
計時器 下載積分: 黑幣 -5
單片機代碼:
- #include<reg51.h>
- #include<intrins.h>
- #define uchar unsigned char
- #define uint unsigned int
- #define ucint unsigned long int
- uchar A1,A2,A3,A4,A5,A6;
- uchar B1,B2,B3,B4,B5,B6;
- uchar C1,C2,C3,C4,C5,C6;
- uchar D1,D2,D3,D4,D5,D6;
- uint DZ,num,choice,time1,time2,time3,time4,time5,time6,m,beepten,pause;
- uchar roll;
- sbit led1=P1^0;
- sbit led2=P1^1;
- sbit led3=P1^2;
- sbit led4=P1^3;
- sbit led5=P1^4;
- sbit dula=P2^6;
- sbit wela=P2^7;
- sbit beep=P2^3;
- sbit dian=P1^5;
- sbit key1=P3^4;
- sbit key2=P3^5;
- sbit key3=P3^6;
- sbit key4=P3^7;
- sbit key5=P3^2;
- uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x0f};//數字編碼
- uchar code led[]={0xdf,0xef,0xf7,0xfb,0xfd,0xfe};//位編碼
- void delay(unsigned char x)//延時子程序
- {
- unsigned char i,j;
- for(i=0;i<x;i++)
- for(j=0;j<x;j++);
- }
- void InitTimer0()
- {
- TMOD = 0x01;
- TH0 = 0x3C;
- TL0 = 0x0B0;
- EA = 1;
- ET0 = 1;
- TR0 = 1;
- }
- void display(uchar swan_c,uchar wan_c,uchar qian_c,uchar bai_c,uchar sh_c,uchar g_c) //顯示函數
- {
- wela=1;
- P0=led[0];
- wela=0;
- P0=0xff;//數碼管消隱1
- dula=1;
- P0=table[g_c];
- dula=0;
- delay(10);
- P0=0xff;//數碼管消隱2
- wela=1;
- P0=led[1];
- wela=0;
- P0=0xff;//數碼管消隱3
- dula=1;
- P0=table[sh_c];
- dula=0;
- delay(20);
- P0=0xff;//數碼管消隱4
- wela=1;
- P0=led[2];
- wela=0;
- P0=0xff;//數碼管消隱5
- dula=1;
- P0=table[bai_c];
- dula=0;
- delay(10);
- P0=0xff;//數碼管消隱6
- if(roll==0) //點位顯示
- {
- wela=1;
- P0=led[2];
- wela=0;
- P0=0xff;//數碼管消隱
- dula=1;
- P0=0x80;
- dula=0;
- delay(10);
- P0=0xff;//數碼管消隱
- }
- wela=1;
- P0=led[3];
- wela=0;
- P0=0xff;//數碼管消隱7
- dula=1;
- P0=table[qian_c];
- dula=0;
- delay(10);
- P0=0xff;//數碼管消隱8
- wela=1;
- P0=led[4];
- wela=0;
- P0=0xff;//數碼管消隱9
- dula=1;
- P0=table[wan_c];
- dula=0;
- delay(10);
- P0=0xff;//數碼管消隱10
- if(roll==0)//點位顯示
- {
- wela=1;
- P0=led[4];
- wela=0;
- P0=0xff;//數碼管消隱
- dula=1;
- P0=0x80;
- dula=0;
- delay(10);
- P0=0xff;//數碼管消隱
- }
- wela=1;
- P0=led[5];
- wela=0;
- P0=0xff;//數碼管消隱11
- dula=1;
- P0=table[swan_c];
- dula=0;
- delay(10);
- P0=0xff;//數碼管消隱12
- }
- void adjustjstime() //計時時間調整
- {
- if((m==0)&&(pause==0))
- {
- if(key2==0)
- {
- delay(50);
- EA=0;
- ET0=0;
- TR0=0;
- choice++;
- while(!key2)display(A1,A2,A3,A4,A5,A6);
- }
- EA=1;
- ET0=1;
- TR0=1;
- if(choice>3)choice=1;
- if(choice==1)
- {
- led1=0;
- led2=1;
- led3=1;
- if(key3==0)
- {
- delay(50);
- EA=0;
- ET0=0;
- TR0=0;
- A6++;
- if(A6>9)
- {
- A5++;
- A6=0;
- }
- if(A5>=6)A5=0;
- while(!key3)display(A1,A2,A3,A4,A5,A6);
- }
- EA=1;
- ET0=1;
- TR0=1;
- }
- if(choice==2)
- {
- led1=1;
- led2=0;
- led3=1;
- if(key3==0)
- {
- delay(50);
- EA=0;
- ET0=0;
- TR0=0;
- A4++;
- if(A4>9)
- {
- A3++;
- A4=0;
- }
- if(A3>=6)A3=0;
- while(!key3)display(A1,A2,A3,A4,A5,A6);
- }
- EA=1;
- ET0=1;
- TR0=1;
- }
- if(choice==3)
- {
- led1=1;
- led2=1;
- led3=0;
- if(key3==0)
- {
- delay(50);
- EA=0;
- ET0=0;
- TR0=0;
- A2++;
- if(A2>9)
- {
- A1++;
- A2=0;
- }
- if(A1>9)A1=0;
- while(!key3)display(A1,A2,A3,A4,A5,A6);
- }
- EA=1;
- ET0=1;
- TR0=1;
- }
- display(A1,A2,A3,A4,A5,A6);
- if(DZ==1)
- {
- led4=0;
- led5=1;
- }
- if(DZ==2)
- {
- led4=1;
- led5=0;
- }
- time1=A6+(A5*10);
- time2=A4+(A3*10);
- time3=A2+(A1*10);
- beep=1;
- time4=0;
- time5=0;
- time6=0;
- }
- if((m==0)&&(pause==1))
- {
- if(DZ==0)
- {
- choice=0;
- led1=0;
- led2=0;
- led3=0;
- led4=0;
- led5=0;
- display(A1,A2,A3,A4,A5,A6);
- }
- if(DZ==1)
- {
- choice=0;
- led1=1;
- led2=1;
- led3=1;
- led4=0;
- led5=1;
- B5=time4/10;
- B6=time4%10;
- B3=time5/10;
- B4=time5%10;
- B1=time6/10;
- B2=time6%10;
- display(B1,B2,B3,B4,B5,B6);
- }
- if(DZ==2)
- {
- choice=0;
- led1=1;
- led2=1;
- led3=1;
- led4=1;
- led5=0;
- C5=time1/10;
- C6=time1%10;
- C3=time2/10;
- C4=time2%10;
- C1=time3/10;
- C2=time3%10;
- display(C1,C2,C3,C4,C5,C6);
- }
- }
- }
- void Zstimedisplay()//正計時函數顯示函數
- {
- if(m==1)
- {
- if(DZ==1)
- {
- choice=0;
- led1=1;
- led2=1;
- led3=1;
- pause=1;
- B5=time4/10;
- B6=time4%10;
- B3=time5/10;
- B4=time5%10;
- B1=time6/10;
- B2=time6%10;
- display(B1,B2,B3,B4,B5,B6);
- }
- }
- }
- void Zstime() //正計時函數
- {
- if(m==1)
- {
- if(DZ==1)
- {
- ++time4;
- if(time4==60)
- {
- time4=0;
- time5++;
- if(time5==60)
- {
- time5=0;
- time6++;
- }
- }
- if((time1==time4)&&(time2==time5)&&(time3==time6))m=2;
- led4=!led4;
- }
- }
- }
- void Dstimedisplay() //倒計時顯示函數
- {
- if(m==1)
- {
- if(DZ==2)
- {
- choice=0;
- led1=1;
- led2=1;
- led3=1;
- pause=1;
- C5=time1/10;
- C6=time1%10;
- C3=time2/10;
- C4=time2%10;
- C1=time3/10;
- C2=time3%10;
- display(C1,C2,C3,C4,C5,C6);
- }
- }
- }
- void Dstime()//倒計時函數
- {
- if(m==1)
- {
- if(DZ==2)
- {
- if(time1==0)
- {
- time1=60;
- if(time2==0)
- {
- time2=60;
- time3--;
- }
- time2--;
- }
- --time1;
- if((time1||time2||time3)==0)m=2;
- led5=!led5;
- }
- }
- }
- void ZDdisplay()//函數計時結束顯示
- {
- if(m==2)
- {
- pause=0;
- if(DZ==1)
- {
- if(beepten==20)
- {
- m=0;
- beepten=0;
- }
- choice=0;
- B5=time4/10;
- B6=time4%10;
- B3=time5/10;
- B4=time5%10;
- B1=time6/10;
- B2=time6%10;
- display(B1,B2,B3,B4,B5,B6);
- }
- if(DZ==2)
- {
- if(beepten==20)
- {
- m=0;
- beepten=0;
- }
- choice=0;
- C5=time1/10;
- C6=time1%10;
- C3=time2/10;
- C4=time2%10;
- C1=time3/10;
- C2=time3%10;
- display(C1,C2,C3,C4,C5,C6);
- }
- }
- }
- void startpause()//開始暫停函數
- {
- if(DZ!=0)
- {
- if(key4==0)
- {
- delay(50);
- EA=0;
- ET0=0;
- TR0=0;
- m++;
- if(m>=2)
- {
- m=0;
- led1=1;
- led2=1;
- led3=1;
- }
- while(!key4)
- {
- if((m==0)&&(pause==0))display(A1,A2,A3,A4,A5,A6);
- if(DZ==1)display(B1,B2,B3,B4,B5,B6);
- if(DZ==2)display(C1,C2,C3,C4,C5,C6);
- }
- }
- EA=1;
- ET0=1;
- TR0=1;
- }
- }
- void ZDJ()//正倒計調整函數
- {
- if(m==0)
- {
- if(key1==0)
- {
- delay(50);
- EA=0;
- ET0=0;
- TR0=0;
- DZ++;
- if(DZ>=3)
- {
- DZ=0;
- led4=1;
- led5=1;
- }
- if(DZ==1)
- {
- led4=0;
- led5=1;
- }
- if(DZ==2)
- {
- led4=1;
- led5=0;
- }
- while(!key1)
- {
- if(DZ==0)display(A1,A2,A3,A4,A5,A6);
- if(DZ==1)display(B1,B2,B3,B4,B5,B6);
- if(DZ==2)display(C1,C2,C3,C4,C5,C6);
- }
- }
- EA=1;
- ET0=1;
- TR0=1;
- }
- }
- void adjustjd()//精度調整函數
- {
- if(num==20)
- {
- num=0;
- Zstime();
- Dstime();
- if(m==2)
- {
- beepten++;
- beep=!beep;
- led1=!led1;
- led2=!led2;
- led3=!led3;
- }
- roll=!roll;
- dian=!dian;
- }
- }
- void main() //主函數
- {
- InitTimer0();
- key5=0;
- while(1)
- {
- adjustjstime();
- Zstimedisplay();
- Dstimedisplay();
- startpause();
- adjustjd();
- ZDJ();
- ZDdisplay();
- }
- }
- void Timer0Interrupt() interrupt 1
- {
- TH0 = 0x3C;
- TL0 = 0x0B0;
- num++;
- }
復制代碼
|