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


Download 172.85 Kb.
Pdf ko'rish
bet5/6
Sana17.06.2023
Hajmi172.85 Kb.
#1547572
1   2   3   4   5   6
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:
1   2   3   4   5   6




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