چگونه از نمایشگر LED هفت قسمتی با آردوینو استفاده کنیم
نمایشگرهای LED هفتSegment در هر جا اطراف ما وجود دارند - از ساعتهای دیجیتال و وسایل آشپزخانه تا نشانگرهای طبقات آسانسور و تختههای امتیاز. آنها یکی از شهودیترین روشها برای نمایش اطلاعات عددی هستند، و یادگیری نحوه کنترل آنها با آردوینو یک مهارت اساسی برای هر علاقهمند به الکترونیک است. این آموزش شما را در ساخت یک درایور نمایشگر هفتSegment ساده اما چندمنظوره که میتواند شمارش را از ۰ تا ۹ انجام دهد، راهنمایی میکند و طراحی شده است تا با نمایشگرهای کاتد مشترک و آند مشترک کار کند. شما میتوانید از این پروژه به عنوان پایهای برای ساخت انواع دستگاههای کاربردی، مانند یک شمارنده دیجیتال برای کارگاه خود، یک خواندن دما برای ایستگاه هواشناسی، یک زمانسنج برای بازی تختهای، یا یک نگهدارنده امتیاز ساده برای شب بازی خانوادگی بعدی خود استفاده کنید.
اجزای سختافزاری
برای دنبال کردن این پروژه، به اجزای زیر نیاز دارید. سیمکشی ساده است و لیست اجزا حداقلی است، که این ساخت را برای مبتدیان کاملاً مناسب میکند.
- آردوینو Uno (یا هر برد سازگار دیگر)
- نمایشگر LED هفت Segment (کاتد مشترک یا آند مشترک)
- ۸ عدد مقاومت ۱ کیلو اهم (مقاومتهای ۵۶۰ اهم تا ۱ کیلو اهم به خوبی کار میکنند)
- سیمهای جامپر
- برد الکترونیکی
چگونه از نمایشگر LED هفتقسمتی با آردوینو استفاده کنیم
راهنمای سیمکشی
اتصالات این پروژه هر بخش از نمایشگر را به یک پایه دیجیتال روی آردوینوی متصل میکند، با یک مقاومتی که جریان را محدود میکند به صورت سری برای هر بخش. تفاوت کلیدی در سیمکشی بستگی به این دارد که آیا نمایشگر شما آند مشترک دارد یا کاتد مشترک. در یک نمایشگر آند مشترک، همه آندها (پایههای مثبت) دیودهای داخلی به هم متصل شده و باید به منبع ۵ ولت متصل شوند. در یک نمایشگر کاتد مشترک، همه کاتدها (پایههای منفی) به هم متصل شده و باید به زمین متصل شوند. شِفر (کود) بهصورت خودکار واژگونی منطقی مورد نیاز برای نوع خاص نمایشگر شما را مدیریت میکند، بنابراین شما فقط باید اطمینان حاصل کنید که سیمکشی فیزیکی صحیح است.

همانطور که در ویدیو نشان داده شده است، پایههای قطعه نمایشگر (A تا G و نقطه اعشاری) را به ترتیب به پایههای آردینو 2 تا 9 متصل کنید. هر پایه قطعه باید دارای یک مقاومت 1kΩ در سری باشد. پایه مشترک (آند یا کاتد، بسته به نمایشگر شما) باید به 5V یا GND به ترتیب متصل شود. مهم است که از مقاومتهای جداگانه برای هر قطعه استفاده کنید نه یک مقاومت مشترک. این کار باعث میشود که روشنایی در تمام قطعات به طور یکنواخت باشد، صرفنظر از اینکه چند عدد به طور همزمان روشن هستند. با یک مقاومت مشترک، جریان به طور نابرابر تقسیم میشود و سبب میشود برخی اعداد تاریکتر از بقیه به نظر برسند.
توضیح شِفر (کود)
شِفر (کود) این پروژه از ابتدا نوشته شده و به هیچ کتابخانه خارجی نیاز ندارد. این شِفر (کود) به گونهای طراحی شده است که ساده باشد تا بتوان آن را برای نمایش خاص شما پیکربندی و تطبیق داد. بخشهای اصلی قابل پیکربندی توسط کاربر در بالای فایل قرار دارند.
#define type 1 // 0 for common cathode and 1 for common anode
const int displayPins[7] = {2,3,4,5,6,7,8}; // define pins
const int dicimalPoint = 9;// decimal pointخط اول مهمترین تنظیم است. شما باید تنظیم کنید کهtypeمتغیر به1اگر از نمایشگر آند مشترک استفاده میکنید و0اگر از یک نمایشگر کاتد مشترک استفاده میکنید. این یک مقدار واحد به شِفر (کود) میگوید که آیا سیگنالهای منطقی را معکوس کند یا خیر، تا اطمینان حاصل شود که بخشهای صحیح روشن میشوند.
دو خط بعدی پایههای آردوینو متصل به نمایشگر را تعریف میکنند.displayPinsآرایه شماره پایهها را برای بخشهای A تا G نگه میدارد وdicimalPointپایه را برای نقطه اعشار تعریف میکند. اگر میخواهید از پایههای مختلف استفاده کنید، میتوانید این مقادیر را تغییر دهید، اما توصیه میشود که آنها را به ترتیب متوالی نگه دارید تا سادهتر باشد.
شِفر (کود) شامل یک تابع سفارشی است،writeDigit(int digit), که روش اصلی برای نمایش یک عدد است. شما میتوانید این تابع را از شِفر (کود) خود فراخوانی کنید تا هر رقمی از 0 تا 9 را نمایش دهید. به عنوان مثال، برای نمایش عدد 5، تنها کافی است فراخوانی کنیدwriteDigit(5);. این تابع وظیفه پیچیدهای را برای جستجوی الگوی صحیح بخش و تنظیم پایهها به طور متناسب انجام میدهد. تابع کمکی دیگری،convertHighLow(int v)، منطق تبدیل بین نمایشگرهای آند مشترک و کاتد مشترک را مدیریت میکند، بنابراین نیازی به نگرانی درباره منطق داخلی ندارید.
نمایش پروژه زنده
پس از اتمام سیمکشی و بارگذاری شِفر (کود)، آردوینو از ۰ تا ۹ شمارش را آغاز کرده و هر رقم را به مدت یک ثانیه روی نمایشگر هفتقسمتی نمایش میدهد. پس از رسیدن به ۹، نقطه اعشار به مدت سه ثانیه روشن میشود قبل از اینکه شمارش دوباره آغاز شود. همانطور که در ویدئو نشان داده شده است، استفاده از مقاومتهای جداگانه اطمینان حاصل میکند که میزان روشنایی ارقام یکنواخت باقی بماند، صرفنظر از اینکه یک بخش (مانند عدد ۱) نمایش داده شود یا همه هفت بخش (مانند عدد ۸). این یک پیشرفت قابل توجه نسبت به استفاده از یک مقاومت واحد است که باعث ایجاد تغییرات مشهود در روشنایی میشود.
فصلها
- [00:00] مقدمهای بر نمایشگر هفتsegment
- [۰۰:۲۲] درک نمایشگرهای هفتقسمتی
- [01:09] سیمکشی آند مشترک در مقابل کاتد مشترک
- [03:25] سیمکشی مرحله به مرحله با مقاومتها
- [06:07] ملاحظات نمایش و روشنایی
- [08:26] توضیح شِفر (کود) و پیکربندی
- :25 توابع راهاندازی و حلقه اصلی
- نتیجهگیری و کاربردها
/*
* Robojax Arduino Step-by-Step Course
* Lesson 21: Seven-Segment Display
* Display number on seven-segment display with Arduino
Please watch video instruction here: https://youtu.be/pxUjEsJQW2M
or watch this https://youtu.be/f3GqRMQ8jYs
* Written by Ahmad Shamshiri for Robojax (Robojax.com)
* on December 07, 2018 at 22:34 in Ajax, Ontario, Canada
*
* This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.
* This code has been downloaded from Robojax.com
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
#define type 1 // 0 for common cathode and 1 for common anode
const int displayPins[7] = {2,3,4,5,6,7,8}; // define pins
const int dicimalPoint = 9;// decimal point
// array for seven-segment LED values. Do not change.
//This is used for both common anode and common cathode
byte displayLEDs[10][7] = {
{ 0,0,0,0,0,0,1 }, // = 0
{ 1,0,0,1,1,1,1 }, // = 1
{ 0,0,1,0,0,1,0 }, // = 2
{ 0,0,0,0,1,1,0 }, // = 3
{ 1,0,0,1,1,0,0 }, // = 4
{ 0,1,0,0,1,0,0 }, // = 5
{ 0,1,0,0,0,0,0 }, // = 6
{ 0,0,0,1,1,1,1 }, // = 7
{ 0,0,0,0,0,0,0 }, // = 8
{ 0,0,0,0,1,0,0 } // = 9
};
/*
*
* @brief Writes digit to display
* @param digit (integer)
* @return no return value
* Written by Ahmad Shamshiri on Friday, December 7, 2018 for Robojax.com
*/
void writeDigit(int digit) {
// Robojax Seven-Segment Display for Arduino
Serial.print(digit);
Serial.print(" ");
int digitValue;
for (int i=0; i < 7; i++)
{
digitalWrite(displayPins[i], convertHighLow(displayLEDs[digit][i]));// write the HIGH or LOW (depending on the type) to output pin
Serial.print(convertHighLow(displayLEDs[digit][i]));// print the result to the Serial monitor
}// for i
}//writeDigit ends here
/*
*
* @brief Converts HIGH and LOW based on the "type" variable value
* if type is 1, converts the "V" to LOW, or returns it as it is if type is 0 (zero)
* @param v (integer)
* @return the convertedValue
* Written by Ahmad Shamshiri (Robojax.com) on Friday, December 8, 2018 for Robojax.com
*/
int convertHighLow(int v)
{
int convertedValue;
if(type ==0)
{
convertedValue = 1 - v;// if common anode, change the HIGH to LOW and LOW to HIGH
}else{
convertedValue = v;// if common cathode, keep it the same
}
return convertedValue;
}
void setup() {
// Robojax Seven-Segment Display for Arduino
//Robojax Arduino Step-by-Step Course http://robojax.com/L/?id=338
for(int d=0; d<8; d++)
{
pinMode(displayPins[d], OUTPUT);// set pin as output
}
pinMode(dicimalPoint,OUTPUT);// define a pin for decimal point
digitalWrite(dicimalPoint,HIGH);// turn decimal point OFF. Set to LOW if common Anode and HIGH for common cathode
Serial.begin(9600);// initialize serial monitor with 9600 baud
}// setup ends here
void loop() {
// Robojax Seven-Segment Display for Arduino
//Robojax Arduino Step-by-Step Course http://robojax.com/L/?id=338
for (int i=0; i<=9 ; i++) {
writeDigit(i);
Serial.println("=====");
delay(1000);
}
digitalWrite(dicimalPoint,LOW);// turn decimal point ON
delay(3000);
// writeDigit(4);
// delay(3000);
}// loop ends here
مواردی که ممکن است به آنها نیاز داشته باشید
-
آمازون
-
آمازون
-
علیاکسپرسPurchase seven segment display from AlixExpresss.click.aliexpress.com
منابع و مراجع
فایلها📁
سایر فایلها
-
نحوه استفاده از نمایشگر LED هفتمخزنی با آردوینو
robojax-ISD1890-SoundRecorder_manual.pdf0.29 MB