Frequency means number of cycles per second. So we have to count the number of cycles/second. Here the first step is to convert input waveform to pulse of amplitude of 5V so that it can be applied to a counter. Here one AND gate is used to pass the signal for exactly 1sec. Time base will manage this. The pulse from input processing reaches 3 digit counter(0-999). Then it is applied to the memory and displayed from memory.The limitations are
1. It is measurable upto 1MHz only
2. The accuracy is limited because 555 is not accurate.   

Input Processing:
it is basically a comparator which converts input waveform to pulses irrespective of the shape of the waveform. Here I am using LM324 You can also use IC741 by applying Vcc=5.12 and Vee=1.38.

3 Digit BCD Counter:
Here you can use any 3 digit BCD counter. The most commonly used IC's are 7490,74290,74390,4029,4518. Connect as shown in ckt diagram or you connect in such a way that it counts from 0-999.

Memory(12 bit):
IC74374 is used by me for implementing it. It is basically an octal flip flop which triggers on 0 to 1 transition. Here you can use any other -ve/+ve edge triggered flip flop or latch, only needed is to modify the connection made to TIME BASE.

Display:
You can use HEX display or 7-segment display. If you are using 7-segment display connect as shown in diagram.     

TIME BASE
This is the most important part of frequency counter. The tasks are in the following order,
1. first provide correct timing 1sec and 1msec(in case of high frequency)
(i.e, the ouput of it must be high for 1sec or 1msec)
2. Store the output of the counters to the memory when the output of the time base is low.(i.e is to apply strobe only when time base is low)
3. Reset the counters only after storing the value of the counters to memory.
4. Then make the output high and follow this cyclic operation.
Here the important parameters are:
1. accuracy of the time
2. refresh time should be small
Suppose if you want to measure a frequency of a waveform first put the time base to 1ms switch then not the reading. This reading will give the output in KHz. Then put the switch to 1s then the reading we get is in Hz.
    

from the figure T1= 1 sec or 1 msec
T2= Refresh time
T3= 1.1 RC for first monostable
T4= 1.1 RC for second monostable
NOT gate= transistor is used to perform this
Here the astable multivibrator generate
clk pulse in such a way that
tON= 1sec or 1 msec tOFF= refresh time
and remember that
tOFF > T3+T4

CALCULATIONS
For Astable Multivibrator:
tON= .693(R1+R2)C
tOFF=.693R2C
let c=1uF
then first take R2 = 100 ohm
tOFF=.0693 msec
then R1=1.44 Mohm
R1'=1.34 Kohm
For monostable multivibrator:
t=1.1RC
c=.01uF , R=100 ohm
t=1.1 uS
For second monostable:
t=1.1RC
C=.01uF , R=100 ohm
t=1.1 uS
If these are not working then try for any other combination obeying the following results
tOFF > T3+T4
tON= 1sec or 1 msec
Here the output of the astable is taken as output of time base and connected to the input of the gate. Output of the monostable multivibrator1 is used as strobe for the memory, so that when output of the astable of the goes from 1 to 0 the monostable triggers (i.e output of monostable1 will change from 0 to 1). So the counter values are entered into memory when output of astable is zero. Now the next monostable is used for resetting the counter We can use C1 output if the reset is active high and C for active low. Here transistor act as a NOT gate.
IMPORTANT NOTES
See the time of the Reset pulse and Stobe pulse of the chips you are using. Here i am setting both time as 1.1uS. If this is not working set the time according to the parameters of the IC
obeying the conditions. If you are using any other flipflop which is -ve edge triggered
then connect output A to the clk of the flipflops.