آموزش راه اندازی سون سگمنت (Seven Segment) با بسکام (Bascom)

در این پست شما طریقه راه اندازی نمایشگرهای سون سگمنت ها توسط میکروکنترلرها به زبان بیسیک و با استفاده از نرم افزار محبوب Bascom، آموزش می بینید.

مقدمه

سون سگمنت چیست؟

نمایشگر هفت قسمتی برای نشان دادن اعداد در ساعتهای دیجیتالی، چراغ راهنما، ماشین حساب، ترازوی دیجیتالی و … از یک قطعه الکترونیکی به نام Seven-Segment یا هفت قسمتی استفاده می کنند؛ که اغلب به رنگ های سبز و قرمز هستند. ساختار این قطعه الکترونیکی از هفت LED (دیود نورانی) تشکیل شده است و با روشن یا خاموش کردن این LED‌ها می توان اعداد را به نمایش گذاشت.

تقسیم بندی و انواع سون سگمنت ها

سون سگمنت ها از پایه هایی تشکیل شده اند که یکی از این پایه ها مشترک هستند که این پایه مشترک سون سگمنت ها را به دو نوع تقسیم می کند: سون سگمنت آند مشترک و یا کاتد مشترک.

سون سگمنت آند مشترک

سون سگمنتی که پایه مشترک آن مثبت باشد، به آن آند مشترک گویند که این به این معنی است که پایه های مثبت LEDهای درون سون سگمنت به هم مشترک و یا اتصال داده شده اند و می توان با کنترل پایه های منفی این سون سگمنت ها که با حروف a, b, c, d, e, f, g نمایش داده شده اند، اعداد دلخواه را روی سون سگمنت ها نمایش دهیم. برای یادگیری و فهم بهتر تصویر زیر را مشاهده نمایید:

شکل (1)

سون سگمنت کاتد مشترک

سون سگمنتی که پایه مشترک آن منفی باشد، به آن کاتد مشترک گویند که این به این معنی است که پایه های منفی LEDهای درون سون سگمنت به هم مشترک و یا اتصال داده شده اند و می توان با کنترل پایه های مثبت این سون سگمنت ها، اعداد دلخواه را روی سون سگمنت ها نمایش دهیم. برای یادگیری و فهم بهتر تصویر زیر را مشاهده نمایید:

شکل (2)

نمایش اعداد بر روی سون سگمنت ها چگونه انجام می شود؟

گاهی می خواهیم تنها یک سون سگمنت را راه اندازی کنیم که این کاری بسیار ساده است و می توان پورت های سون سگمنت (a, b, c, d, e, f, g) را به راحتی به یک پورت از میکرو وصل کرد (شکل 3) ولی وقتی بیش از یک سون سگمنت را بخواهیم راه اندازی کنیم، به دلیل محدود بودن پایه های میکروکنترلر، نمی توانیم هر کدام از مجموعه پایه های نامشترک سون سگمنت را به پورت مجزایی از میکروکنترلر متصل کنیم. (شکل 4) راه حلی که برای رفع این مشکل می توان ارائه داد به این صورت است که ابتدا در یک بازه زمانی بسیار کوتاه، سون سگمنت مربوط به اولین عدد روشن شود و عدد مشخص شده خودش را نمایش دهد و بعد از این کار، این سون سگمنت خاموش شود و سپس سون سگمنت دوم روشن شود و عدد تعیین شده برای خودش را نمایش دهد و دوباره خاموش گردد و به همین ترتیب ادامه خواهد یافت.

شکل (3)
شکل (4)

لذا کاری که می توان انجام داد این است که پایه های نامشترک سون سگمنت ها را به هم وصل کنیم و همه این پایه ها را به یک پورت از میکروکنترلر اتصال دهیم. بر خلاف این امر، پایه های مشترک (Com) هر سون سگمنت را به یک پایه مجزا از میکروکنترلر متصل کنیم. (شکل 5) (توجه شود تمامی سون سگمنت ها از نوع آند مشترک هستند.)

شکل (5)

قسمت کدنویسی

1. بعد از تعیین میکروکنترلر مورد استفاده و فرکانس کریستال، پورت های خروجی را مشخص می کنیم که همان پورت هایی هستند که به سون سگمنت ها متصل می شوند. در اینجا پورت A برای کنترل قسمت های a – b – c – d – e – f – g، و پورت B برای کنترل پایه های آند سون سگمنت ها به کار می رود.

2. پایه های آند هر سون سگمنت را مشخص می کنیم و به آن ها یک نام می دهیم تا فرایند برنامه نویسی آسان شود.

3. متغیرهای موردنیاز در برنامه را تعریف می کنیم.

متغیرهای زیر از این جهت بازه بندی شده اند که در فرایند برنامه نویسی گیج نشده و کدنویسی ما منظم تر جلوه دهد. خط اول مربوط به اعدادی هستند که می خواهیم به هر سون سگمنت دهیم تا آن را نمایش دهد. خط دوم مربوط به متغیرهایی است که در فرایند برنامه نویسی از آن ها بطور موقت و کمکی استفاده می شود. (در محاسبات که در قسمت های پایینی توضیح داده می شود.)

4. پس از ایجاد حلقه Do – Loop، حال نوبت به محاسبات می رسد. برای اینکه یک عدد را به ارقام تشکیل دهنده اش تبدیل کنیم، بایستی از توابع باقی مانده (Mod)، تقسیم صحیح (\) و یا تقسیم معمولی (/) کمک بگیریم. این کار را برای یادگیری بهتر با ارائه یک مثال توضیح می دهیم.

برای مثال می خواهیم ارقام عدد 17 را محاسبه کنیم. برای محاسبه رقم یکان، باید باقی مانده تقسیم این عدد بر 10 را محاسبه کنیم که همان رقم یکان می شود. برای محاسبه رقم دهگان، عدد 17 را بر 10 تقسیم صحیح می کنیم. (تقسیم صحیح آن است که اگر بر عددی بخش پذیر نباشد، تنها قسمت صحیح خارج قسمت را در نظر می گیرد و از قسمت اعشاری آن صرف نظر می کند.) با این کار، عدد 1 بدست می آید که همان رقم دهگان این عدد است.

حال مثال را سخت تر میکنیم و عدد 2017 را در نظر می گیریم. برای اینکه این عدد بزرگ است، بایستی ابتدا رقم هزارگان این عدد را بدست آوریم و سپس ارقام بعدی را محاسبه کنیم. برای محاسبه رقم هزارگان، همانطور که در قسمت قبل گفته شد، عدد 2017 را بر 1000 تقسیم صحیح می کنیم، که عدد 2 حاصل می شود. حال باقی مانده تقسیم عدد 2017 را بر 1000 بدست می آوریم و درون یکی از متغیرهای موقتی (Temp) قرار می دهیم تا سه رقم سمت راست عدد 2017 بدست آید (017). همانطور که مشاهده می کنید ما عدد را مرحله به مرحله می شکنیم تا به رقم یکانش برسیم. حال برای محاسبه رقم صدگان این عدد (017)، حاصل تقسیم صحیح آن را بر 100 محاسبه میکنیم که عدد 0 بدست می آید. سپس دوباره باقی مانده تقسیم این عدد را بر 100 محاسبه می کنیم تا دو رقم اول عدد بدست آید (17). حال طبق توضیحات بالا و مثال قبل عمل می کنیم و رقم های دهگان و یکان این عدد را نیز محاسبه می کنیم. حال این ارقام را داخل متغیرهای اصلی (Digits) قرار می دهیم.

در برنامه اصلی مایلیم عدد 8 رقمی را بر روی 8 عدد سون سگمنت نمایش دهیم که در قطعه کد زیر آمده است.

5. حال نوبت به نمایش این اعداد بر روی سون سگمنت ها می رسد. برای اینکار باید در زمانی بسیار کوتاه (5 میلی ثانیه و یا کمتر) هر سون سگمنت به ترتیب روشن شود و عدد مربوط به خودش را نمایش دهد و سپس خاموش شود. پس ابتدا به این صورت عمل می کنیم که سون سگمنت اول را توسط دستور Seg1 = 1 و یا Set Seg1 روشن می کنیم؛ حال باید عدد مربوط به خودش را نمایش دهد. لذا بایستی پایه های پورت A را طوری روشن یا خاموش کنیم که این عدد نمایان شود. چون سون سگمنت های موردنظر ما از نوع آند مشترک هستند، لذا باید به پایه های a – b – c و … آن ها، ولتاژ منفی دهیم (همان GND). بدیهی است اگر سون سگمنت ها از نوع کاتد مشترک بودند، می بایست ولتاژ مثبت به این پایه ها می دادیم.

برای اینکه این پورت ها به طور صحیح روشن و یا خاموش شوند، می توانیم از یک سری داده که می توانند از نوع باینری و یا هگزادسیمال باشند، استفاده کنیم. لازم به ذکر است که ما می توانیم یک مقدار باینری (0 و 1) و یا هگزادسیمال را به یک پورت دهیم و این پورت با توجه به این مقدار، پورت های خود را تنظیم می کند. به مثال زیر توجه کنید:

PORTA = &B10100111

PORTA = &HA7

دو حرف اول مشکخص می کند مقدار باینری یا هگزادسیمال است. باید توجه داشته باشید که در مقادیر باینری، ترتیب بدین صورت است که مقدار اول، پایه آخر از پورت A را مشخص می کند و مقدار آخر، پایه اول آن را مشخص می کند. برای فهم بهتر، به جدول زیر توجه کنید:

PORTA = &B10100111
PORTA.7 PORTA.6 PORTA.5 PORTA.4 PORTA.3 PORTA.2 PORTA.1 PORTA.0 پایه های پورت A
1 = روشن 0 = خاموش 1 = روشن 0 = خاموش 0 = خاموش 1 = روشن 1 = روشن 1 = روشن مقدار و وضعیت

در جدول زیر وضعیت پورت ها و سگمنت ها به تفکیک نوع سون سگمنت (آند یا کاتد) آورده شده است.

عدد موردنظر برای نمایش وضعیت سگمنت ها در سون سگمنت کاتد مشترک
a b c d e f g DP کد باینری کد هگزادسیمال
0 ? ? ? ? ? ? &B00111111 &H3F
1 ? ? &B00000110 &H06
2 ? ? ? ? ? &B01011011 &H5B
3 ? ? ? ? ? &B01001111 &H4F
4 ? ? ? ? &B01100110 &H66
5 ? ? ? ? ? &B01101101 &H6D
6 ? ? ? ? ? ? &B01111101 &H7D
7 ? ? ? &B00000111 &H07
8 ? ? ? ? ? ? ? &B01111111 &H7F
9 ? ? ? ? ? &B01101111 &H6F
عدد موردنظر برای نمایش وضعیت سگمنت ها در سون سگمنت آند مشترک
a b c d e f g DP کد باینری کد هگزادسیمال
0 ? ? &B11000000 &HC0
1 ? ?  ? ? ? ? &B11111001 &HF9
2 ? ? ? &B10100100 &HA4
3 ? ? ? &B10110000 &HB0
4 ? ? ? ? &B10011001 &H99
5 ? ? ? &B10010010 &H92
6 ? ? &B10000010 &H82
7 ? ?  ?  ? ? &B11111000 &HF8
8 ? &B10000000 &H80
9 ? ? ? &B10010000 &H90

حال برای ساده تر شدن کار می توانیم این اطلاعات و Data ها را در پایین برنامه در یک برچسب یا اصطلاحا Label قرار دهیم که هر وقت به این مقادیر باینری و یا هگز احتیاج داشتیم، با دادن عدد موردنظر، مقادیر باینری و یا هگزادسیمال آن را دریافت کنیم و به پورت A دهیم. برای این منظور از تابع Lookup استفاده می کنیم. ساختار این تابع به صورت زیر است:

PORTA = Lookup(عدد موردنظر, Label)

لازم به ذکر است عدد موردنظر گفته شده، Index و یا ردیف را در Data ها مشخص می کند و مقدار آن Index را بر می گرداند.

برای مثال: کد مربوط به داده ها (مخصوص سون سگمنت های به ترتیب آند مشترک و کاتد مشترک)

قطعه کد برای نمایش اعداد در این قسمت از آموزش به صورت زیر خواهد بود:

و قطعه کد مربوط به داده های سون سگمنت به صورت زیر است:

همچنین ببینید: نرم افزار محاسبه و ایجاد کد برای سون سگمنت

بخش دانلود

بخش دانلودتوضیحات

شامل موارد زیر:

  • فایل های پروژه آموزشی
  • فایل مدار شبیه سازی شده Proteus
  • سورس کد به زبان بیسیک (Bascom)

توجه: برای تهیه این آموزش زحمت فراوانی کشیده شده است؛ لذا، کپی برداری ممنوع می باشد!

اشتراک در
اطلاع از
guest
13 دیدگاه
تازه‌ترین
قدیمی‌ترین بیشترین رأی
بازخورد (Feedback) های اینلاین
مشاهده همه دیدگاه ها
FAFA
FAFA(@fafa)
عضو
شنبه، ۱۴ اسفند ۱۴۰۰ ۱۴:۰۰:۰۳
امتیاز :
     

باسلام .اگر مدار كاتد مشترك را با يك DIPSWطراحي كنيم علاوه بر اينكه كد هگز ديتا تغيير ميكنه وDIPSW به زمين وصل ميشه ،POWER بايد به سگمنت اعمال كنيم يا ميكرو؟ ممنون ميشم اگر راهنمايي كنيد.

FAFA
FAFA(@fafa)
عضو
پاسخ به  فقط آموزش
دوشنبه، ۱۶ اسفند ۱۴۰۰ ۱۷:۳۶:۰۶

درواقع سگمنت کاتد مشترکی که مدنظرم بوده 8تایی.از طریق atmega8535وdipswقراره یه عدد توبازه 0 تا 255 رو به توان سه رسونده و با سگمنت نشونش بدیم.طبق توضیحات شما یعنی باید هر 8تا پایه رو به gnd وصل کنم ؟ مداری که پیوست شده مربوط به آند مشترکه .

Screenshot 2022-03-07 172733.png
FAFA
FAFA(@fafa)
عضو
پاسخ به  فقط آموزش
سه شنبه، ۱۷ اسفند ۱۴۰۰ ۱۸:۴۸:۲۶

بالاخره run شد((((:
خیلی ممنونم از توضیحاتتون و وقتی که گذاشتید.

GOLPASAND
GOLPASAND(@golpasand)
عضو
دوشنبه، ۸ شهریور ۱۴۰۰ ۰۱:۲۹:۰۵
امتیاز :
     

سلام من زیاد بسکام بلد نیستم اگه امکان داره خودتون زحمت نوشتن را بکشید با تشکر

GOLPASAND
GOLPASAND(@golpasand)
عضو
جمعه، ۵ شهریور ۱۴۰۰ ۱۵:۲۱:۰۰
امتیاز :
     

سلام مهندس امکان داره این برنامه را طوری تغییر بدید که با up بالا و باdown پایین بیاد و اعداد زیر صفر که منفی میشن مثل 1- تا 9999- را نشان بده

mostafa
mostafa
میهمان
جمعه، ۲۱ دی ۱۳۹۷ ۱۵:۱۶:۲۶
امتیاز :
     

سلام خسته نباشید
خیلی عالی
واقعا کمک کرد
ممنون

GOLPASAND
GOLPASAND(@golpasand)
عضو
یکشنبه، ۱۴ آبان ۱۳۹۶ ۱۴:۱۰:۳۷

سلام مهندس خسته نباشی
میتوانی بگی چطور میشود تعداد بیشتری 7 سگمنت مثلا 24 یا حتی بیشتر را به میکرو مگا32 وصل کرد اگر نمونه شبیه سازی با بسکام و پروتئوس باشه ممنون میشم

این وبسایت جهت تقویت در خدمات، از کوکی های مرورگر شما استفاده می کند. قبول کردن

2
0
افکار شما را دوست داریم، لطفا نظر دهید.x
()
x