Yetti segmentli bitta raqamli ko‘rsatkich


Download 0.97 Mb.
bet3/6
Sana18.06.2023
Hajmi0.97 Mb.
#1588601
1   2   3   4   5   6
Bog'liq
Mamataminov Afzalbek o\'ranatilgan tizimlar 3-dedline

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;



B00111111,

// 0

"0"

AAA

B00000110,

// 1

"1"

F B

B01011011,

// 2

"2"

F B

B01001111,

// 3

"3"

GGG

B01100110,

// 4

"4"

E C

B01101101,

// 5

"5"

E C

B01111101,

// 6

"6"

DDD

B00000111,

// 7

"7"




B01111111,

// 8

"8"




B01101111,

// 9

"9"




};












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<
TIMSK1 |= (1 << OCIE1A);
pinMode(buttonPin,INPUT); attachInterrupt(digitalPinToInterrupt(buttonPin),buttonTapped,RISING);

}
void findDigits(int digits[4],int counter)


{ 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<digitalWrite(ssdPins[j],HIGH); else
digitalWrite(ssdPins[j],LOW);
}
//
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<else
digitalWrite(ssdPins[j],LOW);
}
//
delay(5);

//D2 digitalWrite(cathodePins[0], HIGH); digitalWrite(cathodePins[1], HIGH); digitalWrite(cathodePins[2], LOW);


digitalWrite(cathodePins[3], HIGH);

for(int j = 0; j<7; ++j)


{
if(numbers[digits[1]]& 1<else
digitalWrite(ssdPins[j], LOW);
}
//
delay(5);

//D1 digitalWrite(cathodePins[0], HIGH); digitalWrite(cathodePins[1], HIGH); digitalWrite(cathodePins[2], HIGH);


digitalWrite(cathodePins[3], LOW);

for(int j = 0; j<7; ++j)


{
if(numbers[digits[0]]& 1<digitalWrite(ssdPins[j], LOW);
}
//
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 0.97 Mb.

Do'stlaringiz bilan baham:
1   2   3   4   5   6




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling