شمارنده
شمارنده در منطق دیجیتال و محاسبات، دستگاهی است که تعداد دفعاتی که یک رویداد یا فرایند خاص رخ داده است را ذخیره می‌کند (یا در برخی مواقع نمایش می‌دهد). که اغلب شمارنده در رابطه با سیگنال ساعت است.
در الکترونیک، شمارنده‌ها می‌توانند به راحتی با استفاده از مدارهای رجیستر مانند فلیپ فلاپ، و طیف گسترده‌ای از مدارهایی که وجود دارند پیاده‌سازی شوند:
شمارنده (موج دار شدن) آسنکرون - تغییر بیت‌های وضعیت به عنوان پالس ساعت برای تغییر حالت فلیپ فلاپ‌ها استفاده می‌شودشمارنده سنکرون (همزمان) - تمام بیت‌های وضعیت تحت کنترل یک پالس ساعت تغییر می‌کنند
شمارنده ده تایی-هر ده وضعیت در یک مرحله را شمارش می‌کند
شمارنده صعودی/نزولی- به هر دو صورت صعودی و نزولی تحت یک فرمان کنترل ورودی شمارش می‌کند
شمارنده حلقوی- توسط یک شیفت رجیستر با اتصال ابتدا به انتهای شیفت رجیستر ایجاد می‌گردد
شمارنده جانسون- یک شمارنده حلقوی دوتاییشمارنده آبشاریشمارنده مادوله هر کدام از شمارنده‌ها برای برنامه‌های مختلف مفید است. معمولاً، مدارهای شمارنده ذاتاً دیجیتال و دودویی هستند. بسیاری از انواع مدارهای شمارنده به شکل بلوک‌های ساختمان‌های دیجیتال در دسترس هستند، به عنوان مثال تعدادی از تراشه‌ها در سری ۴۰۰۰ شمارنده‌های متفاوتی را پیاده‌سازی کرده‌اند. گاهی مزایایی برای استفاده از یک شمارنده ترتیبی نسب به شماره بیتی معمولی وجود دارد- به عنوان نمونه شمارنده اعشاری کد باینری، شمارنده خطی معکوس شیفت رجیستر یا شمارنده کد گری
شمارنده آسنکرون (موجی) یک فلیپ فلاپ از نوع D، با ورودی(داده) J که از معکوس خروجی خود تغذیه می نماید می‌باشد . این چرخه می‌تواند بر روی یک بیت ذخیره گردد و از این رو می‌تواند از صفر تا رقمی قبل از سربار (overflows) شمارش نماید.این شمارنده با هر چرخه کلاک افزایش می یابد و دو چرخه کلاک تا رسیدن به سربار به طول می انجامد، بنابراین هر چرخه تناوب انتقال صفر به یک و از 1 به 0 می‌باشد . توجه کنید این باعث به وجود آمدن یک ساعت جدید با ظرفیت 50٪ در دقیقاً نیمی از فرکانس کلاک ورودی می‌شود. اگر این خروجی به عنوان سیگنال کلاک برای یک فلیپ فلاپ D مشابه استفاده شود (خاطر نشان میگردد که خروجی به صورت معکوس به ورودی منتقل می‌شود)، یکی از آنها، شمارنده تک بیتی دیگری خواهد بود که نیمی سریع تر می‌شمارد.قرار دادن این‌ها در کنار هم تشکیل یک شمارنده دو بیتی را میدهد :
میتوانید با افزایش فلیپ فلاپ‌ها ادامه دهید، همیشه خروجی معکوس را به ورودی خودش متصل نماید، و از خروجی فلیپ فلاپ فبلی به عنوان سیگنال کلاک استفاده نمایید. نتیجه آن شمارنده موجی نامیده می‌شود که می‌تواند تا بشمارد که n تعداد بیتها (مراحل فلیپ فلاپ) در شمارنده می‌باشد . شمارنده موجی دارای مشکل بی ثباتی خروجی به عنوان سربار موج از هر مرحله به مرحله دیگر می‌باشد. اما این شمارنده‌ها برنامه‌های متنوعی را به عنوان تقسیم‌کننده سیگنال‌های ساعت پیدا میکنند، که در آن شمارش فوری اهمیتی نداشته، اما تقسیم نسبی مجموع مهم می‌باشد (برای توضیح این مطلب، یک شمارنده تک بیتی دقیقاً برابر با تقسیم دو سیکل می‌باشد ، فرکانس خروجی دقیقاً نیمی از ورودی است که به وسیله یک دسته کلاک پالس‌های منظم تغذیه می‌شود) استفاده از خروجی فلیپ فلاپ به عنوان کلاک منجر به اختلال زمانی بین شمارش بیت‌ها داده می‌شود، ساخت این تکنیک موجی ناسازگار با طراحی مدار سنکرون می‌باشد .
در شمارنده‌های سنکرون، کلاک ورودی همه فلیپ فلاپ‌ها به هم متصل می‌باشند و به وسیله پالس ورودی شروع می‌شوند. بنابراین، همه فلیپ فلاپ‌ها به‌طور همزمان(به صورت موازی) تغییر حالت میدهند. چرخه زیر یک شمارنده 4 بیتی سنکرون می‌باشد . ورودی J و K از FF0 به HIGH متصل شده‌است. FF1 ورودی j و k خودش را دارد که به خروجی FF0 متصل است. و ورودی j و k FF2 به خروجی گیت AND که از خروجی FF0 و FF1 حاصل می‌شود متصل است . یک راه ساده برای پیاده‌سازی منطق هر بیت شمارنده صعودی (که در شکل سمت راست نشان داده شده‌است) تغییر وضعیت زمانی هر بیت در لحظه ای که همه بیت‌های کم اهمیت در حالت منطقی بالا قرار دارند می‌باشد . به عنوان مثال، بیت 1 در لحظه ای که بیت 0 در حالت منطقی بالا قرار دارد تغییر وضعیت میدهد، بیت 2 زمانی که هر دو بیت 0 و 1 در حالت منطقی بالا می‌باشد تغییر وضعیت میدهد، بیت 3 زمانی که بیت 2، بیت 1 و بیت 0 در حات منطقی بالا قرار دارند وضعیت می‌دهد و این رویه به همین صورت ادامه پیدا می‌کند. شمارنده سنکرون می‌تواند به وسیله سخت افزار ماشین متناهی(finite state machine)، که کمی پیچیده تر اما روان تر و پایدار تر است پیاده‌سازی شود. شمارنده‌های سخت افزاری از این نوع می‌باشد . شمارنده ده دهی شمارنده ای است که اعداد را در عوض باینری به صورت ده دهی می‌شمارد.