🔢 مدار شمارنده با سونسگمنت (7-Segment Counter)
شمارهی نوبت بانک، تایمر مایکروویو، امتیاز مسابقه و شمارندهی نفرات ورودی همه یک قطعهی مشترک دارند: نمایشگر هفتقسمتی یا سونسگمنت (7-Segment Display). در این راهنما یک مدار شمارنده کامل با سونسگمنت میسازیم که با هر فشار دکمه یک عدد جلو میرود و بعد از ۹ به ۰ برمیگردد. قدمبهقدم میفهمیم کاتد مشترک و آند مشترک چه فرقی دارند، کدام سگمنت کدام حرف است (a تا g)، چرا هر سگمنت مقاومت خودش را میخواهد و چطور لرزش دکمه را مهار کنیم. بعد کد کامل آردوینو را با جدول رقمها و ضد لرزش مینویسیم، ایدهی آیسی رمزگشای 4511 را میبینیم و یاد میگیریم با «مالتیپلکس» دو رقم را با تعداد کمی پین نشان بدهیم.
سونسگمنت چیست؟
سونسگمنت در اصل هفت LED باریک است که بهشکل عدد ۸ کنار هم چیده شدهاند، بهعلاوهی یک نقطهی اعشار (DP). هر سگمنت یک حرف دارد و این نامگذاری در همهی دیتاشیتها یکی است: از بالا شروع میشود و در جهت عقربههای ساعت میچرخد و آخر از همه خط وسط است.
--a--
| |
f b
| |
--g--
| |
e c
| |
--d-- (dp)
با روشن و خاموش کردن این هفت سگمنت، همهی رقمهای ۰ تا ۹ و چند حرف (A، b، C، d، E، F، H، L، P) ساخته میشود. تعریف کوتاهش را در واژهنامه هم ببین.
کاتد مشترک یا آند مشترک؟ (Common Cathode vs Common Anode)
هفت LED هر کدام دو پایه دارند، ولی نمایشگر فقط ۱۰ پایه دارد. راز کار این است که یک سر همهی LEDها به یک پایهی مشترک (COM) وصل است:
| ویژگی | کاتد مشترک (CC) | آند مشترک (CA) |
|---|---|---|
| پایهی مشترک به | منفی (GND) | مثبت (5V) |
| سگمنت با چه چیزی روشن میشود | HIGH روی پایهی سگمنت | LOW روی پایهی سگمنت |
| کد رقم ۰ (بیتهای gfedcba) | 0x3F | 0x40 (برعکس همهی بیتها) |
| مدل رایج تکرقمی | 5161AS | 5161BS |
| رمزگشای رایج | CD4511 | 74LS47 |
نمایشگر مود آردوینوی شبیهساز کاتد مشترک است و پایهی مشترکش روی بدنه «GND» نوشته شده. در بیشتر نمایشگرهای تکرقمی ۱۰ پایه، ترتیب پایهها این است (از جلو، پایهی ۱ پایین چپ؛ با دیتاشیت مدل خودت چک کن):
| پایه | ۱ | ۲ | ۳ | ۴ | ۵ | ۶ | ۷ | ۸ | ۹ | ۱۰ |
|---|---|---|---|---|---|---|---|---|---|---|
| سگمنت | e | d | COM | c | dp | b | a | COM | f | g |
تست سریع: منفی دو باتری قلمی (۳ ولت) را به پایهی ۳ و مثبت را از راه یک مقاومت ۳۳۰ اهم به پایهی ۷ بزن. اگر سگمنت a روشن شد، نمایشگر کاتد مشترک است. اگر نه، قطبها را عوض کن؛ اگر حالا روشن شد، آند مشترک است. هیچوقت بدون مقاومت تست نکن.
جدول رقمها: کدام سگمنت برای کدام عدد؟
این جدول قلب هر شمارنده است. در ستون کد، بیت ۰ سگمنت a است و بیت ۶ سگمنت g؛ یعنی کد را از راست به چپ بخوان. برای تبدیل بین دودویی و هگز از مبدل دودویی کمک بگیر.
| رقم | a | b | c | d | e | f | g | کد کاتد مشترک | کد آند مشترک |
|---|---|---|---|---|---|---|---|---|---|
| ۰ | ۱ | ۱ | ۱ | ۱ | ۱ | ۱ | ۰ | 0x3F | 0x40 |
| ۱ | ۰ | ۱ | ۱ | ۰ | ۰ | ۰ | ۰ | 0x06 | 0x79 |
| ۲ | ۱ | ۱ | ۰ | ۱ | ۱ | ۰ | ۱ | 0x5B | 0x24 |
| ۳ | ۱ | ۱ | ۱ | ۱ | ۰ | ۰ | ۱ | 0x4F | 0x30 |
| ۴ | ۰ | ۱ | ۱ | ۰ | ۰ | ۱ | ۱ | 0x66 | 0x19 |
| ۵ | ۱ | ۰ | ۱ | ۱ | ۰ | ۱ | ۱ | 0x6D | 0x12 |
| ۶ | ۱ | ۰ | ۱ | ۱ | ۱ | ۱ | ۱ | 0x7D | 0x02 |
| ۷ | ۱ | ۱ | ۱ | ۰ | ۰ | ۰ | ۰ | 0x07 | 0x78 |
| ۸ | ۱ | ۱ | ۱ | ۱ | ۱ | ۱ | ۱ | 0x7F | 0x00 |
| ۹ | ۱ | ۱ | ۱ | ۱ | ۰ | ۱ | ۱ | 0x6F | 0x10 |
بعضیها رقم ۶ را بدون سگمنت a و رقم ۹ را بدون d مینویسند؛ این جدول شکل کاملتر و خواناتر را انتخاب کرده است.
قطعههای مدار شمارنده
| # | اسم فارسی | English | تعداد و مقدار | کارش در مدار |
|---|---|---|---|---|
| ۱ | نمایشگر هفتقسمتی | 7-Segment Display (CC) | ۱ عدد، کاتد مشترک | نمایش رقم |
| ۲ | مقاومت ۲۲۰ اهم | 220 Ω Resistor | ۷ عدد (۸ تا با DP) | محدود کردن جریان هر سگمنت |
| ۳ | کلید فشاری | Push Button | ۲ عدد | شمارش و صفر کردن |
| ۴ | آردوینو اونو | Arduino Uno | ۱ عدد | شمردن و تصمیمگیری |
| ۵ | بردبورد و سیم جامپر | Breadboard & Jumpers | ۱ بردبورد نیمه | سیمکشی بدون لحیم |
| ۶ | ترانزیستور NPN (برای دو رقم) | NPN Transistor | ۲ عدد | روشن و خاموش کردن پایهی مشترک هر رقم |
| ۷ | آیسی 4511 (اختیاری) | CD4511 BCD Decoder | ۱ عدد | کم کردن پینها از ۷ به ۴ |
چرا هر سگمنت مقاومت خودش را میخواهد؟
هر سگمنت یک LED است، پس همان فرمول مقاومت LED را دارد:
R = (Vpin − Vf) ÷ I
برای سونسگمنت قرمز با افت ولتاژ حدود ۲ ولت و جریان ۱۵ میلیآمپر روی پین ۵ ولتی: R = (5 − 2) ÷ 0.015 = 200 Ω. نزدیکترین مقدار استاندارد بالاتر، ۲۲۰ اهم است و جریان هر سگمنت 3 ÷ 220 ≈ 13.6 mA میشود؛ کمتر از ۲۰ میلیآمپر توصیهشدهی هر پین.
جریان کل: رقم ۸ هفت سگمنت روشن دارد، یعنی 7 × 13.6 ≈ 95 mA که همه از پایهی COM به GND برمیگردد. این عدد برای آردوینو اونو قابلتحمل است (سقف کل تراشه حدود ۲۰۰ میلیآمپر است)، ولی نشان میدهد چرا نباید مقاومت را کمتر از ۲۲۰ اهم بگذاری.
چرا یک مقاومت روی COM نه؟ وسوسهانگیز است: یک مقاومت بهجای هفت تا. ولی آن وقت جریان ثابت آن یک مقاومت بین سگمنتهای روشن تقسیم میشود: رقم ۱ با دو سگمنت پرنور است و رقم ۸ با هفت سگمنت کمنور، و چون LEDها کاملاً یکسان نیستند، بعضی سگمنتها از بقیه پرنورتر میشوند. در مود سادهی شبیهساز، نمایشگر هفتقسمتی فقط دو پایهی مثبت و منفی دارد و هر هفت سگمنت را با هم روشن میکند (رقم ۸)؛ پروژهی نمایشگر هفتقسمتی (7-segment display) همین را با یک باتری و یک مقاومت نشان میدهد. برای ساختن رقمهای مختلف، به مود آردوینو برو.
شمارندهی ۰ تا ۹ با دکمه و آردوینو
سیمکشی همان چیدمان درس شمارندهی دکمهای شبیهساز است: سگمنتهای a تا g روی پینهای ۳ تا ۹ و دکمه روی پین ۲. یک دکمهی دوم برای صفر کردن هم اضافه کردهایم.
| قطعه | پایه | وصل به |
|---|---|---|
| سگمنت a | از راه مقاومت ۲۲۰ اهم | پین ۳ |
| سگمنت b | از راه مقاومت ۲۲۰ اهم | پین ۴ |
| سگمنت c | از راه مقاومت ۲۲۰ اهم | پین ۵ |
| سگمنت d | از راه مقاومت ۲۲۰ اهم | پین ۶ |
| سگمنت e | از راه مقاومت ۲۲۰ اهم | پین ۷ |
| سگمنت f | از راه مقاومت ۲۲۰ اهم | پین ۸ |
| سگمنت g | از راه مقاومت ۲۲۰ اهم | پین ۹ |
| COM (کاتد مشترک) | — | GND |
| دکمهی شمارش | دو پایهی قطری | پین ۲ و GND |
| دکمهی صفر | دو پایهی قطری | پین ۱۱ و GND |
دکمهها مقاومت بیرونی ندارند، چون INPUT_PULLUP مقاومت بالاکش داخلی را روشن میکند: دکمهی رها HIGH و دکمهی فشرده LOW خوانده میشود. پینهای ۰ و ۱ را عمداً خالی گذاشتهایم چون مال سریال و آپلودند.
// مدار شمارنده با سونسگمنت (7-Segment Counter) — آردوینو اونو
// a تا g روی پینهای 3 تا 9، هر کدام با مقاومت 220 اهم؛ COM به GND
// دکمهی شمارش بین پین 2 و GND؛ دکمهی صفر بین پین 11 و GND
const int SEG_PINS[7] = {3, 4, 5, 6, 7, 8, 9}; // a b c d e f g
const int COUNT_BTN = 2;
const int RESET_BTN = 11;
const bool COMMON_ANODE = false; // نمایشگر آند مشترک: true و COM به 5V
// بیت 0 = a ... بیت 6 = g (کد کاتد مشترک)
const byte DIGITS[10] = {
0x3F, // 0
0x06, // 1
0x5B, // 2
0x4F, // 3
0x66, // 4
0x6D, // 5
0x7D, // 6
0x07, // 7
0x7F, // 8
0x6F // 9
};
const unsigned long DEBOUNCE_MS = 30;
int count = 0;
int lastReading = HIGH;
int stableState = HIGH;
unsigned long lastChange = 0;
void showDigit(int n) {
byte pattern = DIGITS[n];
for (int i = 0; i < 7; i++) {
bool on = (pattern >> i) & 1;
if (COMMON_ANODE) on = !on;
digitalWrite(SEG_PINS[i], on ? HIGH : LOW);
}
}
void setup() {
for (int i = 0; i < 7; i++) pinMode(SEG_PINS[i], OUTPUT);
pinMode(COUNT_BTN, INPUT_PULLUP);
pinMode(RESET_BTN, INPUT_PULLUP);
Serial.begin(9600);
showDigit(count);
}
void loop() {
int reading = digitalRead(COUNT_BTN);
if (reading != lastReading) { // لبه یا لرزش: زمان را ثبت کن
lastChange = millis();
lastReading = reading;
}
if (millis() - lastChange > DEBOUNCE_MS && reading != stableState) {
stableState = reading;
if (stableState == LOW) { // فقط لحظهی فشردن
count = (count + 1) % 10; // بعد از 9 برگرد به 0
showDigit(count);
Serial.print("shomare: ");
Serial.println(count);
}
}
if (digitalRead(RESET_BTN) == LOW && count != 0) {
count = 0; // دکمهی صفر
showDigit(count);
Serial.println("sefr shod");
}
}
کد چطور کار میکند؟
- جدول داده، جدا از منطق: آرایهی
DIGITSبرای هر رقم یک بایت دارد. تابعshowDigitبیتهای آن بایت را یکییکی با(pattern >> i) & 1بیرون میکشد و روی پین سگمنت مینویسد. برای نشان دادن حرف A کافی است یک بایت دیگر (0x77) به جدول اضافه کنی. - آند مشترک با یک کلمه: اگر نمایشگرت آند مشترک است، COM را به 5V ببند و
COMMON_ANODEراtrueکن؛ تابع همهی بیتها را برعکس میکند. - ضد لرزش (Debounce): دکمهی واقعی موقع فشار چند بار در چند میلیثانیه وصل و قطع میشود. کد هر تغییر را با
millisزمانگیری میکند و فقط وقتی وضعیت جدید را قبول میکند که ۳۰ میلیثانیه ثابت مانده باشد. توضیح کاملتر در دیبانس و خواندن دکمه با آردوینو آمده است. - تشخیص لبه (Edge Detection): شمارنده فقط لحظهی رفتن از «رها» به «فشرده» یکی اضافه میکند. اگر دکمه را نگه داری، عدد ثابت میماند.
- باقیمانده (Modulo): عبارت
(count + 1) % 10بعد از ۹ عدد را به ۰ برمیگرداند؛ بدون هیچ if اضافه.
ساخت شمارنده در شبیهساز تینکرکد فارسی
این بخش در مود «آردوینو» ساخته میشود که برای حدود ۱۰ سال به بالا مناسب است؛ آردوینو اونو و نمایشگر هفتقسمتی رایگاناند.
- اول یک رقم: درس رقم روی سونسگمنت جدول سگمنتها را میسازد. نمونهی آمادهی سونسگمنت (Seven-segment) رقمهای ۰ تا ۹ را خودکار میشمارد؛ در آن سگمنتهای a تا g روی پینهای ۲ تا ۸ و COM روی GND است و هر سگمنت مقاومت ۲۲۰ اهمی خودش را دارد.
- بعد دکمه: درس شمارندهی دکمهای از یک باگ واقعی شروع میکند (یک فشار، سه شماره!)، بعد تشخیص لبه و عملگر
%را یاد میدهد و در آخر چالش «دکمهی صفر کردن» را میدهد؛ همان چیزی که کد بالا حل کرده است. قدم اولش نمونهی شمارندهی دکمهای (Button counter) را بارگذاری میکند که عدد را فقط در سریال مانیتور نشان میدهد. - کد این مقاله: نمایشگر و هفت مقاومت را به آن نمونه اضافه کن، سیمها را طبق جدول بالا (a روی پین ۳) بکش، دکمهی دوم را روی پین ۱۱ بگذار و کد را جایگزین کن.
- خرابش کن: یکی از سیمهای سگمنت را به پین اشتباه ببر و ببین رقمها چه شکلی میشوند؛ بهترین راه برای یاد گرفتن عیبیابی سیمکشی سونسگمنت همین است.
ایدهی آیسی 4511: رمزگشای BCD به سونسگمنت
هفت پین برای یک رقم زیاد است. آیسی CD4511 یک «رمزگشا» (Decoder) است: عدد را بهصورت BCD، یعنی چهار بیت دودویی، میگیرد و خودش هفت سگمنت را روشن میکند. پس آردوینو فقط چهار پین میدهد. این آیسی در شبیهساز نیست؛ ایدهاش را برای ساخت روی بردبورد واقعی توضیح میدهیم.
| پایهی 4511 | اسم | کار | وصل به |
|---|---|---|---|
| ۷، ۱، ۲، ۶ | A، B، C، D | ورودی BCD (A کمارزشترین بیت) | چهار پین آردوینو |
| ۱۳، ۱۲، ۱۱، ۱۰، ۹، ۱۵، ۱۴ | a، b، c، d، e، f، g | خروجی سگمنتها | از راه مقاومت ۲۲۰ اهم به نمایشگر |
| ۳ | LT | تست لامپ (با LOW همه روشن) | مثبت |
| ۴ | BL | خاموش کردن نمایشگر (با LOW) | مثبت |
| ۵ | LE | قفل کردن عدد (با HIGH) | منفی |
| ۱۶ و ۸ | VDD و VSS | تغذیه | 5V و GND |
4511 فقط با نمایشگر کاتد مشترک کار میکند و برای ورودیهای بزرگتر از ۹ (۱۰۱۰ تا ۱۱۱۱) نمایشگر را خاموش میکند. خروجیهایش جریان را از سمت مثبت میدهند ولی محدودش نمیکنند، پس هفت مقاومت هنوز لازم است. کد آردوینو برای آن کوتاه است:
// شمارش 0 تا 9 روی سونسگمنت از راه آیسی CD4511
const int BCD_PINS[4] = {3, 4, 5, 6}; // A B C D روی پایههای 7، 1، 2، 6 آیسی
void showBCD(int n) {
for (int i = 0; i < 4; i++) {
digitalWrite(BCD_PINS[i], ((n >> i) & 1) ? HIGH : LOW);
}
}
void setup() {
for (int i = 0; i < 4; i++) pinMode(BCD_PINS[i], OUTPUT);
}
void loop() {
for (int n = 0; n < 10; n++) {
showBCD(n);
delay(1000);
}
}
همین ایده بدون آردوینو هم کار میکند: یک شمارندهی دهدهی (مثل CD4510 یا 74LS90) خروجی BCD میدهد و رمزگشا آن را نشان میدهد. آیسی CD4026 حتی شمارنده و رمزگشا را در یک تراشه دارد. پالس شمارش را هم یک ۵۵۵ تمیز میکند تا لرزش دکمه چند پالس نسازد؛ این نقش ۵۵۵ را در مدار تایمر ۵۵۵ ببین.
دو رقم با مالتیپلکس (Multiplexing)
برای شمردن ۰۰ تا ۹۹ دو نمایشگر لازم است. سیمکشی سادهلوحانه ۱۴ پین میخواهد. مالتیپلکس همین را با ۹ پین انجام میدهد و ایدهاش این است:
- سگمنتها مشترک: سگمنت a هر دو نمایشگر به هم وصل میشوند و از راه یک مقاومت به یک پین میروند؛ همینطور b تا g. یعنی هنوز ۷ پین.
- COMها جدا: پایهی مشترک هر رقم به کلکتور یک ترانزیستور NPN میرود که امیترش به GND است و بیسش با یک مقاومت ۱ کیلواهم به یک پین آردوینو. دو پین دیگر؛ جمعاً ۹ پین.
- نوبتی روشن کردن: برنامه هر دو رقم را خاموش میکند، الگوی رقم دهگان را روی سگمنتها میگذارد، رقم دهگان را حدود ۵ میلیثانیه روشن میکند، خاموشش میکند، الگوی یکان را میگذارد و رقم یکان را ۵ میلیثانیه روشن میکند و این را تکرار میکند. دهگان با
count / 10و یکان باcount % 10به دست میآید. - ماندگاری تصویر: هر رقم صد بار در ثانیه روشن میشود و چشم چشمکی نمیبیند؛ هر دو رقم را همزمان روشن میبیند.
نکتههای مهم مالتیپلکس: زمانبندی را با millis بنویس، نه delay، تا خواندن دکمه متوقف نشود. همیشه اول رقم را خاموش کن و بعد الگو را عوض کن؛ وگرنه سایهی کمرنگ رقم دیگر (Ghosting) دیده میشود. چون هر رقم نصف زمان روشن است، نورش کمتر میشود؛ میشود مقاومت را تا حدود ۱۵۰ اهم پایین آورد (جریان لحظهای هر سگمنت حدود ۲۰ میلیآمپر). ترانزیستور COM هم لازم است، چون جریان هفت سگمنت با هم از آن میگذرد که برای یک پین زیاد است.
اگر حوصلهی مالتیپلکس نداری، تراشههای آماده این کار را میکنند: شیفت رجیستر 74HC595 با سه پین (نمونهی ۸ LED با ۳ پین)، MAX7219 برای تا ۸ رقم، و ماژول ۴ رقمی TM1637 با فقط دو سیم داده. ماژول TM1637 در شبیهساز جزو قطعههای حرفهای اشتراک Plus است و نمونهاش کرنومتر با TM1637 است؛ سیمکشی و کتابخانهاش را در نمایشگر TM1637 با آردوینو هم توضیح دادهایم.
نسخهها و مدارهای مشابه
| # | اسم فارسی | English | تغییر لازم |
|---|---|---|---|
| ۱ | شمارندهی معکوس | Countdown Timer | از ۹ تا ۰ با (count + 9) % 10 و یک بوق در صفر |
| ۲ | شمارندهی بالا و پایین | Up/Down Counter | دکمهی دوم بهجای صفر، یکی کم میکند |
| ۳ | شمارندهی دو رقمی | Two-Digit Counter (00–99) | مالتیپلکس با دو ترانزیستور |
| ۴ | تاس الکترونیکی | Electronic Dice | random(1, 7) بهجای شمارش؛ بیشتر در تاس دیجیتال |
| ۵ | شمارندهی دودویی | Binary Counter | چهار LED بهجای سونسگمنت؛ نمونهی شمارنده باینری |
| ۶ | شمارندهی نفرات | People Counter | سنسور مادون قرمز یا اولتراسونیک بهجای دکمه |
| ۷ | شمارنده با وقفه | Interrupt Counter | شمردن پالسهای سریع با attachInterrupt |
| ۸ | شمارندهی بدون میکروکنترلر | CD4026 / 74LS90 Counter | شمارنده و رمزگشای سختافزاری با ۵۵۵ |
| ۹ | کرنومتر | Stopwatch | شمردن زمان با millis و دو دکمهی شروع و توقف |
| ۱۰ | شمارندهی ۴ رقمی | 4-Digit TM1637 Counter | ماژول TM1637 (اشتراک Plus در شبیهساز) |
اشتباههای رایج در مدار سونسگمنت
| اشتباه | نشانه | راهحل |
|---|---|---|
| آند مشترک با کد کاتد مشترک | رقمها برعکس (سگمنتهای خاموش روشناند) | COMMON_ANODE را true و COM را به 5V ببند |
| COM آند مشترک به GND | هیچ سگمنتی روشن نمیشود | نوع نمایشگر را با تست باتری پیدا کن |
| بدون مقاومت | سگمنتها خیلی پرنور، بعد خراب؛ پین داغ | ۲۲۰ اهم برای هر سگمنت |
| یک مقاومت مشترک | رقم ۱ پرنور و ۸ کمنور | یک مقاومت برای هر سگمنت |
| ترتیب سگمنتها اشتباه | رقمهای عجیب، مثلاً ۲ شبیه حرف دیگری | یک برنامهی تست که سگمنتها را یکییکی روشن کند |
| دکمه بدون INPUT_PULLUP | عدد خودبهخود عوض میشود | INPUT_PULLUP و دکمه بین پین و GND |
| بدون ضد لرزش | یک فشار، چند شماره | تشخیص لبه و millis |
| استفاده از پین ۰ و ۱ | آپلود خطا میدهد یا سریال بههم میریزد | از پین ۲ به بعد استفاده کن |
| مالتیپلکس با delay بلند | رقمها چشمک میزنند | هر رقم حدود ۵ میلیثانیه، با millis |
نکتههای ایمنی
- همهی این مدارها با ۵ ولت USB یا باتری کار میکنند و خطری ندارند؛ فقط به جریان پینها احترام بگذار: هر پین حداکثر حدود ۲۰ میلیآمپر و کل تراشه حدود ۲۰۰.
- قبل از جابهجا کردن سیمها، USB را جدا کن؛ اتصال کوتاه لحظهای بین 5V و GND روی بردبورد، آردوینو را ریست یا فیوز USB را قطع میکند.
- پایههای نمایشگر نازکاند؛ آن را صاف و با فشار یکنواخت در بردبورد فرو کن تا پایهای خم یا کوتاه نشود.
سؤالهای رایج
سون سگمنت کاتد مشترک را از آند مشترک چطور تشخیص بدهم؟
منفی دو باتری قلمی را به پایهی مشترک (در بیشتر مدلها پایهی ۳ یا ۸) و مثبت را از راه یک مقاومت ۳۳۰ اهم به یکی از پایههای دیگر بزن. اگر سگمنتی روشن شد، کاتد مشترک است. اگر نه، جای مثبت و منفی را عوض کن؛ اگر حالا روشن شد آند مشترک است. حالت دیود مولتیمتر هم همین کار را میکند.
چرا هر سگمنت مقاومت جدا میخواهد؟
اگر یک مقاومت روی پایهی مشترک بگذاری، جریان بین سگمنتهای روشن تقسیم میشود: رقم ۱ که دو سگمنت دارد پرنور و رقم ۸ که هفت سگمنت دارد کمنور دیده میشود. با یک مقاومت برای هر سگمنت، نور همهی رقمها یکسان میماند.
چرا شمارنده با یک بار فشار دکمه چند عدد جلو میرود؟
به خاطر لرزش کلید (Bounce): تیغههای دکمه در چند میلیثانیهی اول چند بار وصل و قطع میشوند. با تشخیص لبه، یعنی شمردن فقط لحظهی رفتن از رها به فشرده، و یک مکث کوتاه حدود ۳۰ میلیثانیه با millis این مشکل حل میشود.
برای ساخت شمارنده سون سگمنت حتماً آردوینو لازم است؟
نه. با آیسیهایی مثل CD4026 که شمارنده و رمزگشا را در یک تراشه دارد، یا ترکیب 74LS90 و 74LS47 و یک ۵۵۵ برای حذف لرزش، شمارندهی بدون کد هم ساخته میشود. آردوینو فقط کار را انعطافپذیرتر میکند: شمارش معکوس، صفر کردن و دو رقم با چند خط کد.
آی سی 4511 چه کار میکند؟
CD4511 یک رمزگشای BCD به سون سگمنت است: عدد ۰ تا ۹ را بهصورت چهار بیت میگیرد و هفت خروجی a تا g را برای نمایشگر کاتد مشترک روشن میکند. با آن بهجای ۷ پین فقط ۴ پین آردوینو لازم داری، ولی هنوز برای هر سگمنت یک مقاومت لازم است.