Yetti segmentli bitta raqamli ko‘rsatkich
Download 1.18 Mb.
|
Tirkashev Xojiakbar
- Bu sahifa navigatsiya:
- Laboratoriyaning nazariy qismi.
- Laboratoriya ishi № 16.
Laboratoriya ishi № 15.7 -segmentli displeylardan tashkil topgan 4 -bitli matritsa. Laboratoriya ishining maqsadi: Yetti segmentli 4 bitli matritsa bilan tanishish va uni loyihalarda qo‘llash. Laboratoriyaning nazariy qismi.Arduino to‘rt raqamli yetti segmentli LED indikatori Arduinoda hisoblagichlar yoki taymerlarni yaratish uchun ishlatiladi, tayyor loyihalarda sensorlardan raqamli qiymatlarni chiqaradi. Keling, to‘rt belgili LED indikatorining pinoutini, modulni Arduino kartasiga qanday ulashni ko‘rib chiqaylik va dasturlarning batafsil tavsifi bilan indikatordan foydalanishning bir nechta misollarini ko‘rib chiqaylik. To‘rt belgidan iborat indikator segmentlarining pinouti Arduinoning bir belgili yetti segmentli ko‘rsatkichidan farq qilmaydi. Modul o‘rtasidagi farq raqamlar (belgilar) sonida - har bir raqam mos keladigan katoddan quvvat manbasini uzish orqali yoqiladi. Shunday qilib, raqamlardagi bitta segmentning barcha LEDlari (masalan, A-A-A-A) umumiy katodga parallel ravishda ulanadi. Segmentni yoqish juda oson. Keling, kichik bir misolni ko‘rib chiqaylik. Dastlab, barcha 4 ta raqam (D1, D2, D3, D4) quvvatlanadi. Ikkinchi belgidagi A segmentini yoqish uchun siz A oyog‘iga (anod) kuchlanish qo‘llashingiz kerak. Ammo segment D2 oyog‘idagi kuchlanishni o‘chirmagunimizcha yonmaydi. Shu tarzda siz 7 segmentli displey modulidagi har qanday LEDni yoqishingiz mumkin. Ko‘rsatkichni Arduino -ga ulash muammosi shundaki, bortdagi ko‘plab pinlar bir vaqtning o‘zida ishlatiladi. Bundan tashqari, indikatorda bir vaqtning o‘zida faqat bitta raqam ko‘rsatilishi mumkin. Shuning uchun, juda qisqa vaqt ichida har bir raqam bo‘yicha navbat bilan kerakli raqamni chiqarish kerak. Inson ko‘rish qobiliyatini o‘zgartirishga vaqt topolmaydi va sizga hamma tushirishlar bir vaqtning o‘zida yonayotganga o‘xshaydi. const int cathodePins[4] = {10,11,12,13}; const int ssdPins[7] = {3,4,5,6,7,8,9}; const int dotPin = 2; static int gCounter = 0; static int buttonPin = 2; bool state = true; byte numbers[10] = {
void setup(){ for (int i = 0 ; i < 4 ; ++i) pinMode(cathodePins[i],OUTPUT); for (int i = 0; i < 7; ++i) pinMode(ssdPins[i],OUTPUT); pinMode(dotPin,OUTPUT); TCCR1A = 0; TCCR1B = 0; TCNT1 = 0; OCR1A = 15624; TCCR1B |= (1< attachInterrupt(digitalPinToInterrupt(buttonPin),buttonTapped,RISING); }
{ int digitCounter = 0; while(counter > 0) { digits[digitCounter] = counter % 10; counter = counter / 10; digitCounter++; } } void displayNumber(int counter) { int digits[4] = {0}; findDigits(digits,counter); //D4 digitalWrite(cathodePins[0],LOW); digitalWrite(cathodePins[1],HIGH); digitalWrite(cathodePins[2],HIGH); digitalWrite(cathodePins[3],HIGH); for(int j = 0 ; j < 7; ++j) { if(numbers[digits[3]] & 1< } // delay(5); //D3 digitalWrite(cathodePins[0],HIGH); digitalWrite(cathodePins[1],LOW); digitalWrite(cathodePins[2],HIGH); digitalWrite(cathodePins[3],HIGH); for(int j = 0; j<7; ++j) { if(numbers[digits[2]]& 1< } // delay(5); //D2
for(int j = 0; j<7; ++j) { if(numbers[digits[1]]& 1< } // delay(5); //D1
for(int j = 0; j<7; ++j) { if(numbers[digits[0]]& 1< } // delay(5); } void loop(){ displayNumber(gCounter); } ISR(TIMER1_COMPA_vect){ if(state){ gCounter++; if(gCounter == 10000) gCounter = 0; } } void buttonTapped(){ state=!state; delay(10); } Laboratoriya ishi № 16.Download 1.18 Mb. Do'stlaringiz bilan baham: |
ma'muriyatiga murojaat qiling