初學者參加比賽,需要設計一個數字頻率計測頻率和占空比,代碼已寫好一部分,請大神們修改一下漏洞(或者有更好的方法請指教),時間緊急,菜鳥謝謝各位大神
單片機源程序:
- #include <reg52.h>
- sbit LSA=P2^2;
- sbit LSB=P2^3;
- sbit LSC=P2^4;
- sbit K1=P3^1;
- sbit ky=P3^5;
- unsigned int i=0,n=0,m=0,x=0,y=0;
- unsigned long fred,zhan;
- unsigned char DisplayData[8]=0;
- unsigned char DisTable[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
- void Display();
- void delay(unsigned int i);
- void main()
- {
- TMOD=0x62;
- TH0=6;
- TL0=6;
- TH1=56;
- TL1=56;
- TR0=1;
- TR1=1;
- EA=1;
- ET1=1;
- ET0=1;
- while(1)
- {
- if(ky==1)
- {
- x++;
- }
- else
- {
- y++;
- }
- if(x+y==60000)
- {
- zhan=x/60;
- x=0;
- y=0;
- }
- if(K1==0)
- {
- DisplayData[0]=DisTable[0];
- DisplayData[1]=DisTable[0];
- DisplayData[2]=DisTable[zhan/1000];
- DisplayData[3]=DisTable[zhan%1000/100];
- DisplayData[4]=DisTable[zhan%100/10]|0x80;
- DisplayData[5]=DisTable[zhan%10];
- }
- Display();
- }
- }
- void time1_int() interrupt 3
- {
- TH1=56;
- TL1=56;
- TR1=1;
- n++;
- }
- void timer0_int() interrupt 1
- {
- i++;
- if(i==2000)
- {
- TR1=0;
- fred=n*200+TL1-56;
- DisplayData[0]=DisTable[fred*2/100000];
- DisplayData[1]=DisTable[fred*2%100000/10000];
- DisplayData[2]=DisTable[fred*2%10000/1000];
- DisplayData[3]=DisTable[fred*2%1000/100];
- DisplayData[4]=DisTable[fred*2%100/10];
- DisplayData[5]=DisTable[fred*2%10];
- n=0;
- i=0;
- TH1=56;
- TL1=56;
- TR1=1;
- }
- }
- void Display()
- {
- int i;
- for(i=0;i<6;i++)
- {
- switch(i)
- {
- case(0):
- LSA=0;LSB=0;LSC=0; break;//ÏÔê¾μú0λ
- case(1):
- LSA=1;LSB=0;LSC=0; break;//ÏÔê¾μú1λ
- case(2):
- LSA=0;LSB=1;LSC=0; break;//ÏÔê¾μú2λ
- case(3):
- LSA=1;LSB=1;LSC=0; break;//ÏÔê¾μú3λ
- case(4):
- LSA=0;LSB=0;LSC=1; break;//ÏÔê¾μú4λ
- case(5):
- LSA=1;LSB=0;LSC=1; break;//ÏÔê¾μú5λ
- }
- P0=DisplayData[5-i];
- delay(10);
- P0=0x00
- }
- }
- void delay(unsigned int i)
- {
- while(i--);
- }
復制代碼
|