|
因?yàn)?1單片機(jī)晶振的原因,測(cè)頻的范圍有限制,這時(shí)就需要外置74LS160分頻器,進(jìn)行分頻。
本程序采用了定時(shí)器的方式2定時(shí),8位自動(dòng)重裝計(jì)數(shù)器,精準(zhǔn)定時(shí)。
電路原理圖如下:
單片機(jī)源程序:
- #include<reg52.h>
- #include<intrins.h>
- #define Duan P2
- #define Wei P1
- sbit mr = P3^0;
- unsigned char code smg_duan[] ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
- unsigned char code smg_wei[] ={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
- unsigned int Num;
- long int pin;
- long int count;
- void delay_ms(int i)
- {
- int j;
- for(i;i>0;i--)
- for(j=100;j>0;j--);
- }
- void display(long int num)
- {
- long num1[8],i;
- num1[7] = num/10000000;
- num1[6] = (num/1000000)%10;
- num1[5] = (num/100000)%10;
- num1[4] = (num/10000)%10;
- num1[3] = (num/1000)%10;
- num1[2] = (num/100)%10;
- num1[1] = (num/10)%10;
- num1[0] = num%10;
- for(i=0;i<8;i++){
- Wei = smg_wei[i];
- Duan = smg_duan[num1[i]];
- delay_ms(1);
- }
- }
- void main()
- {
- TMOD = 0x72;
- TH0 = 0x06;
- TL0 = 0x06;
- TH1 = 0x00;
- TL1 = 0x00;
- ET1 = 1;
- ET0 = 1;
- EA = 1;
- //PT1=1;
- TCON = 0x50;
- while(1)
- {
- display(pin);
- }
- }
- void timer0() interrupt 1 //定時(shí)器
- {
- unsigned char a;
- if(Num==3999)
- {
- TCON = 0x00;
- EA=0;
- Num = 0;
- a=P0&0x0f; //分頻器讀數(shù)
- pin = (256*count+TL1)*10+a; //溢出的次數(shù)*256+還未溢出的次數(shù)+分頻器的計(jì)數(shù)
- TH1 = 0x00;
- TL1 = 0x00;
- TL0 = 0x06;
- TH0 = 0x06;
- count = 0;
- mr=0;
- _nop_();
- EA=1;
- TCON = 0x50;
- mr=1;
- }
- else Num++;
- //display(pin);
- }
- void timer1() interrupt 3 //計(jì)數(shù)器
- {
- count++; 中斷溢出的次數(shù)
- }
復(fù)制代碼
|
評(píng)分
-
查看全部評(píng)分
|