很准,有分频器NE555计数器芯片+74LS90与74LS08电路构成,然后信号送入单片机的T1脚进行检测与数码管显示
频率计仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
单片机源程序如下:
- #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)
|