Guruh talabasi Ostanaquov Muxammadmirzo Laboratoriya ishi №13. Yetti segmentli bitta raqamli k


Download 172.85 Kb.
Pdf ko'rish
bet3/6
Sana17.06.2023
Hajmi172.85 Kb.
#1547572
1   2   3   4   5   6
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] = { 
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" 
}; 
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<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<digitalWrite(ssdPins[j],HIGH); 
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<digitalWrite(ssdPins[j], HIGH); 
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], HIGH); 
else 
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); 


Download 172.85 Kb.

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




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