Guruh talabasi Ostanaquov Muxammadmirzo Laboratoriya ishi №13. Yetti segmentli bitta raqamli k
Download 172.85 Kb. Pdf ko'rish
|
Laboratoriya ishi № 17.
74HC595 smenali registr yordamida 4 bitli matritsani boshqarish. Laboratoriya ishining maqsadi: Loyihalarda 74HC595 smenali registr yordamida 4 bitli matritsani boshqarishni o‘rganing. Laboratoriyaning nazariy qismi. 4-raqamli 7 segmentli display 4 xonali yetti segmentli displey bitta qurilmada birlashtirilgan to‘rtta yetti segmentli displeydan iborat. Bu displeylar ba'zida "birgalikda ko‘paytirish" deb aytiladi, shuning uchun ularni boshqarish uchun multiplekslash texnologiyasidan foydalanish mumkin. Bu displeydan raqamlarni hamda ba'zi harflarni ko‘rsatish uchun foydalanish mumkin. Displeyni har ikki yo‘nalishda ham ishlatish mumkin. 0 dan 9999 gacha elektron soat yoki hisoblagich yasash uchun 4 ta belgidan foydalanish qulay. Quyidagi rasmda 4-raqamli, 7-segmentli displeyning ichki ulanish sxemasi ko‘rsatilgan. Har bir displey segmentida o‘ziga xos LED mavjud va uni alohida boshqarish mumkin. LEDlar displeyning bir qismi sifatida joylashtirilgan, ularning har biri faqat o‘z segmentini yoritadi (u tegishli). Yetti segmentli displey quyidagi rasmda ko‘rsatilgandek umumiy katod va umumiy anod bo‘lishi mumkin. Umumiy katodli (CC) yetti segmentli displeyda barcha LEDlarning manfiy terminallari bir -biriga bog‘lanib, umumiy asos hosil qiladi. Umumiy anod (OA) sxemasida, barcha LEDlarning musbat terminallari umumiy shahar kuchlanishining (VCC) umumiy terminalini hosil qilish uchun bir -biriga ulanadi. Bizning saytimizda yetti segmentli displey qurilmasi va ularning dasturlashi haqida juda batafsil maqolalar bor - ular AVR oilasining mikrokontrollerlari uchun yozilgan, lekin menimcha, Arduino bilan o‘xshashlik qilish siz uchun qiyin bo‘lmaydi: #include "Timer.h" Timer t; //Timer ob’yektini yaratish long number = 0; int first_digit = 0; int second_digit = 0; int third_digit = 0; int fourth_digit = 0; int timer_event = 0; int CA_1 = 12; int CA_2 = 11; int CA_3 = 10; int CA_4 = 9; int clk = 6; int latch = 5; int data = 4; int count = 0; int digits[4] ; int CAS[4] = {12, 11, 10, 9}; byte numbers[10] {B11111100, B01100000, B11011010, B11110010, B01100110, B10110110, B10111110, B11100000, B11111110, B11110110}; // 0 – 9 void setup() { Serial.begin(9600); //portni ochamiz pinMode(CA_1, OUTPUT); pinMode(CA_2, OUTPUT); pinMode(CA_3, OUTPUT); pinMode(CA_4, OUTPUT); pinMode(clk, OUTPUT); pinMode(latch, OUTPUT); pinMode(data, OUTPUT); digitalWrite(CA_1, HIGH); digitalWrite(CA_2, HIGH); digitalWrite(CA_3, HIGH); digitalWrite(CA_4, HIGH); Serial.println("0 dan 9999 gacha bo‘lgan qiymatni kiriting: "); } void loop() { t.update(); if (Serial.available()) { t.stop(timer_event); cathode_high(); String s = Serial.readString(); number = (long)s.toInt(); if (number > 9999) { Serial.println("Qiymati 0 dan 9999 gacha!"); } else { break_number(number); timer_event = t.every(1, display_number); } } } void break_number(long num) { // raqamlarga bo‘linish first_digit = num / 1000; digits[0] = first_digit; int first_left = num - (first_digit * 1000); second_digit = first_left / 100; digits[1] = second_digit; int second_left = first_left - (second_digit * 100); third_digit = second_left / 10; digits[2] = third_digit; fourth_digit = second_left - (third_digit * 10); digits[3] = fourth_digit; } void display_number() { cathode_high(); digitalWrite(latch, LOW); shiftOut(data, clk, LSBFIRST, numbers[digits[count]]); // ma'lumotlarni uzatamiz digitalWrite(CAS[count], LOW); digitalWrite(latch, HIGH); count++; if (count == 4) { count = 0; } } void cathode_high() { digitalWrite(CA_1, HIGH); digitalWrite(CA_2, HIGH); digitalWrite(CA_3, HIGH); digitalWrite(CA_4, HIGH); } Download 172.85 Kb. Do'stlaringiz bilan baham: |
Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling
ma'muriyatiga murojaat qiling