很準,有分頻器NE555計數器芯片+74LS90與74LS08電路構成,然后信號送入單片機的T1腳進行檢測與數碼管顯示
頻率計仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
0.jpg (70.81 KB, 下載次數: 35)
下載附件
2018-4-17 04:41 上傳
0.png (10.27 KB, 下載次數: 38)
下載附件
2018-4-17 04:50 上傳
0.jpg (24.59 KB, 下載次數: 42)
下載附件
2018-4-17 04:41 上傳
單片機源程序如下:
- #include<reg52.h>
- #include<intrins.h>
- typedef unsigned char u8;
- typedef unsigned int u16;
- typedef unsigned long int u32;
- #define shumag P2
- #define gongy P1
- sbit RED_KHZ=P0^1;
- sbit Blue_HZ=P0^0;
- sbit fengmingqi=P0^7;
- unsigned char code dofly_DuanMa[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
- // 顯示段碼值0~9
- unsigned char TempData[4];//存儲顯示值的全局變量
- u8 second=0;
- u32 sert=0;
- u32 count=0;
- u16 j=0;
- u16 k=0;
- void delay(u16 i)
- {
- while(i--);
- }
- void display()
- {
- u8 i;
- for(i=0;i<3;i++)
- {
- gongy=i;
- shumag=TempData[i];
- delay(10);
- shumag=0x00;
-
- }
- }
- void Timer_init()
- {
- TMOD=TMOD|0X51;
- TH0=0X3c;
- TL0=0Xb0;
-
- EA=1;
- ET0=1;
- ET1=1;
- TR0=1;
- TR1=1;
-
- }
- void main()
- {
- Timer_init();
- while(1)
- {
-
- if(k==20)
- {
- count=count+TH1*256+TL1;
- TempData[0]= dofly_DuanMa[count/100];
- TempData[1]= dofly_DuanMa[count/10%10];
- TempData[2]=dofly_DuanMa[count%10];
- TH1=0;
- TL1=0;
- k=0;
- }
- if(count>=1000)
- fengmingqi=0;
- if(count<1000)
- fengmingqi=1;
- display();
-
- }
- }
- void menter0() interrupt 1
- {
-
- TH0=0X3c+TH0;
- TL0=0Xb0+TL0;
- j++;
- if(j==20)
- {
- k=j;
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
實驗3.rar
(75.39 KB, 下載次數: 63)
2018-4-13 22:29 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|