Sayıcı etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
Sayıcı etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

31 Ağustos 2019 Cumartesi

PIC16F877A Mikrodenetleyici ve 74HC595 Shift Register ile 7 Segment Displayli İleri Geri Sayıcı (Up Down) Uygulama Devresi ve Program Kodu


Yukarıdaki devrede PIC16F877A Mikrodenetleyici ve 74HC595 Shift Register kullanılarak yapılan 7 Segment Displayli Sayıcı Uygulama Devresi görülmektedir.

Bu devrede Up yazan butona basıldığında ileri yönlü sayma işlemi yapılırken, Down yazan butona basıldığında geri yönlü sayma işlemi yapılmaktadır.


PIC16F877A Mikrodenetleyici Program Kodu :

// 4-Digit 7-Segment display with 74HC595 interfacing with PIC16F877A CCS C code
// http://elektrikelektronikegitimi.blogspot.com/
#define data_pin PIN_B0
#define clock_pin PIN_B1
#define latch_pin PIN_B2

#include <16F877A.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock = 8000000)
#use fast_io(B)
#use fast_io(D)

short s; // Used to know buttons position
unsigned int j, digit ;
unsigned long i = 0;
unsigned int seg(unsigned int num) {
switch (num) {
case 0 : return 0x80;
case 1 : return 0xF2;
case 2 : return 0x48;
case 3 : return 0x60;
case 4 : return 0x32;
case 5 : return 0x24;
case 6 : return 0x04;
case 7 : return 0xF0;
case 8 : return 0;
case 9 : return 0x20;
}
}
void write_data(unsigned int number){
for(j = 0x80; j > 0; j = j >> 1) {
if(number & j)
output_high(data_pin);
else
output_low(data_pin);
output_high(clock_pin);
output_low(clock_pin);
}
output_high(latch_pin);
output_low(latch_pin);
}
void main(){
port_b_pullups(TRUE); // Enable PORTB pull-ups
output_b(0); // PORTB initial state
set_tris_b(0x18); // Configure RB3 & RB4 pins as inputs
output_d(0); // PORTD initial state
set_tris_d(0); // Configure PORTD pins as inputs
while(TRUE){
if(input(PIN_B3) && input(PIN_B4))
s = 1;
if(s == 1) {
if(input(PIN_B3) == 0) {
s = 0;
i++;
if(i > 9999)
i = 0;
}
if(input(PIN_B4) == 0) {
s = 0;
if(i < 1)
i = 1;
i--;
}
}
digit = seg(i % 10); // Prepare to display ones
output_d(0x0F); // Turn off all displays
write_data(digit);
output_d(0x07); // Turn on display for ones
delay_ms(1);
digit = seg((i / 10) % 10); // Prepare to display tens
output_d(0x0F); // Turn off all displays
write_data(digit);
output_d(0x0B); // Turn on display for tens
delay_ms(1);
digit = seg((i / 100) % 10); // Prepare to display hundreds
output_d(0x0F); // Turn off all displays
write_data(digit);
output_d(0x0D); // Turn on display for hundreds
delay_ms(1);
digit = seg((i / 1000) % 10); // Prepare to display thousands
output_d(0x0F); // Turn off all displays
write_data(digit);
output_d(0x0E); // Turn on display for thousands
delay_ms(1);
}
}

Arduino UNO ve 74HC595 Shift Register ile 7 Segment Displayli Sayıcı Uygulama Devresi ve Program Kodu



Yukarıdaki devrede Arduino UNO ve 74HC595 Shift Register ile 7 Segment Displayli Sayıcı Uygulama Devresi görülmektedir.

Bu devrede push butona basılarak 7 segment displayde ileri yönde sayma yapılmaktadır.

Kullanılan Malzemeler : 

Arduino UNO board
4 Digit ortak anotlu 7 segment display
74HC595 shift register
4 x PNP transistor (2SA1015, 2S9015, 2N3906 …)
8 x 100 ohm direnç
4 x 4.7k ohm direnç
Push buton
Breadboard

Devrenin board üzerinde kurulmuş görüntüsü

Arduino Kod :


/*
* 7-segment display with 74HC595 shift register
* 4-Digit counter example.
* Common anode 7-segment display is used.
* This is a free software with NO WARRANTY.
* http://elektrikelektronikegitimi.blogspot.com/
*/

// counter button definition
#define button A0

// shift register pin definitions
#define clockPin 7 // clock pin
#define dataPin 6 // data pin

// common pins of the four digits definitions
#define Dig1 5
#define Dig2 4
#define Dig3 3
#define Dig4 2

// variable declarations
byte current_digit;
int count = 0;
void disp(byte number, bool dec_point = 0);

void setup()
{
pinMode(button, INPUT_PULLUP);
pinMode(Dig1, OUTPUT);
pinMode(Dig2, OUTPUT);
pinMode(Dig3, OUTPUT);
pinMode(Dig4, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, OUTPUT);

disp_off(); // turn off the display

// Timer1 module overflow interrupt configuration
TCCR1A = 0;
TCCR1B = 1; // enable Timer1 with prescaler = 1 ( 16 ticks each 1 µs)
TCNT1 = 0; // set Timer1 preload value to 0 (reset)
TIMSK1 = 1; // enable Timer1 overflow interrupt
}

ISR(TIMER1_OVF_vect) // Timer1 interrupt service routine (ISR)
{
disp_off(); // turn off the display

switch (current_digit)
{
case 1:
disp(count / 1000); // prepare to display digit 1 (most left)
digitalWrite(Dig1, LOW); // turn on digit 1
break;

case 2:
disp( (count / 100) % 10 ); // prepare to display digit 2
digitalWrite(Dig2, LOW); // turn on digit 2
break;

case 3:
disp( (count / 10) % 10 ); // prepare to display digit 3
digitalWrite(Dig3, LOW); // turn on digit 3
break;

case 4:
disp(count % 10); // prepare to display digit 4 (most right)
digitalWrite(Dig4, LOW); // turn on digit 4
}

current_digit = (current_digit % 4) + 1;
}

// main loop
void loop()
{
if(digitalRead(button) == 0)
{
count++; // increment 'count' by 1
if(count > 9999)
count = 0;
delay(200); // wait 200 milliseconds
}
}

void disp(byte number, bool dec_point)
{
switch (number)
{
case 0: // print 0
shiftOut(dataPin, clockPin, MSBFIRST, 0x02 | !dec_point);
digitalWrite(clockPin, HIGH);
digitalWrite(clockPin, LOW);
break;

case 1: // print 1
shiftOut(dataPin, clockPin, MSBFIRST, 0x9E | !dec_point);
digitalWrite(clockPin, HIGH);
digitalWrite(clockPin, LOW);
break;

case 2: // print 2
shiftOut(dataPin, clockPin, MSBFIRST, 0x24 | !dec_point);
digitalWrite(clockPin, HIGH);
digitalWrite(clockPin, LOW);
break;

case 3: // print 3
shiftOut(dataPin, clockPin, MSBFIRST, 0x0C | !dec_point);
digitalWrite(clockPin, HIGH);
digitalWrite(clockPin, LOW);
break;

case 4: // print 4
shiftOut(dataPin, clockPin, MSBFIRST, 0x98 | !dec_point);
digitalWrite(clockPin, HIGH);
digitalWrite(clockPin, LOW);
break;

case 5: // print 5
shiftOut(dataPin, clockPin, MSBFIRST, 0x48 | !dec_point);
digitalWrite(clockPin, HIGH);
digitalWrite(clockPin, LOW);
break;

case 6: // print 6
shiftOut(dataPin, clockPin, MSBFIRST, 0x40 | !dec_point);
digitalWrite(clockPin, HIGH);
digitalWrite(clockPin, LOW);
break;

case 7: // print 7
shiftOut(dataPin, clockPin, MSBFIRST, 0x1E | !dec_point);
digitalWrite(clockPin, HIGH);
digitalWrite(clockPin, LOW);
break;

case 8: // print 8
shiftOut(dataPin, clockPin, MSBFIRST, !dec_point);
digitalWrite(clockPin, HIGH);
digitalWrite(clockPin, LOW);
break;

case 9: // print 9
shiftOut(dataPin, clockPin, MSBFIRST, 0x08 | !dec_point);
digitalWrite(clockPin, HIGH);
digitalWrite(clockPin, LOW);
}
}

void disp_off()
{
digitalWrite(Dig1, HIGH);
digitalWrite(Dig2, HIGH);
digitalWrite(Dig3, HIGH);
digitalWrite(Dig4, HIGH);
}

// end of code.

30 Ağustos 2019 Cuma

PIC16F84A Mikrodenetleyici ile Ortak Katotlu 7 Segment Display Sayıcı Uygulama Devresi ve Program Kodu


Yukarıdaki devrede PIC16F84A Mikrodenetleyici ile yapılmış 4 haneli 7 Segment Display Sayıcı Uygulama Devresi görülmektedir.

Devrede ortak katotlu 7 segment display kullanılmıştır.

Rb7'ye bağlı olan butona basıldığında görüntülenen sayı değeri 1 artar.

PIC16F84A Mikrodenetleyici devresi +5V gerilim ile çalışmaktadır.

4 basamaklı 7 Segment Display Sayıcı PIC16F84A Mikrodenetleyici CCS C kodu

1 // 4-Digit digital counter using PIC16F84A (common cathode type)
2 // Common cathode 7-segment display
3 // http://elektrikelektronikegitimi.blogspot.com
4
5 #include <16F84A.h>
6 #fuses HS,NOWDT,PUT,NOPROTECT
7 #use delay(crystal=8000000)
8
9 short s; // Used to know button position
10 unsigned int digit, digit1, digit10, digit100,digit1000;
11 unsigned long i;
12 unsigned int seg(unsigned int num) {
13 switch (num) {
14 case 0 : return 0x3F;
15 case 1 : return 0x06;
16 case 2 : return 0x5B;
17 case 3 : return 0x4F;
18 case 4 : return 0x66;
19 case 5 : return 0x6D;
20 case 6 : return 0x7D;
21 case 7 : return 0x07;
22 case 8 : return 0x7F;
23 case 9 : return 0x6F;
24 }
25 }
26 void main() {
27 while(TRUE) {
28 if(input(PIN_B7) == 1)
29 s = 1;
30 if(s == 1) {
31 if(input(PIN_B7) == 0) {
32 s = 0;
33 i++;
34 if(i > 9999)
35 i = 0;
36 }
37 }
38 digit = i % 10;
39 digit1 = seg(digit);
40 output_a(0); // Turn off all displays
41 output_b(digit1); // Send ones digit
42 output_a(8); // Turn on display for ones
43 delay_ms(5);
44 digit = (i / 10) % 10;
45 digit10 = seg(digit);
46 output_a(0); // Turn off all displays
47 output_b(digit10); // Send tens digit
48 output_a(4); // Turn on display for tens
49 delay_ms(5);
50 digit = (i / 100) % 10;
51 digit100 = seg(digit);
52 output_a(0); // Turn off all displays
53 output_b(digit100); // Send hundreds digit
54 output_a(2); // Turn on display for hundreds
55 delay_ms(5);
56 digit = (i / 1000) % 10;
57 digit1000 = seg(digit);
58 output_a(0); // Turn off all displays
59 output_b(digit1000); // Send thousands digit
60 output_a(1); // Turn on display for thousands
61 delay_ms(5);
62 }
63 }

PIC16F84A Mikrodenetleyici ile Ortak Anotlu 7 Segment Display Sayıcı Uygulama Devresi ve Program Kodu



Yukarıdaki devrede PIC16F84A Mikrodenetleyici ile yapılmış 4 haneli 7 Segment Display Sayıcı Uygulama Devresi görülmektedir.

Devrede ortak anotlu 7 segment display kullanılmıştır.

Rb7'ye bağlı olan butona basıldığında görüntülenen sayı değeri 1 artar.

PIC16F84A Mikrodenetleyici devresi +5V gerilim ile çalışmaktadır.
4 basamaklı 7 Segment Display Sayıcı PIC16F84A Mikrodenetleyici CCS C kodu

1   // 4-Digit digital counter using PIC16F84A (common anode type)
2  // http://elektrikelektronikegitimi.blogspot.com
3
4  #include <16F84A.h>
5  #fuses HS,NOWDT,PUT,NOPROTECT
6  #use delay(crystal=8000000)
7
8  short s; // Used to know button position
9  unsigned int digit, digit1, digit10, digit100,digit1000;
10  unsigned long i;
11  unsigned int seg(unsigned int num) {
12  switch (num) {
13  case 0 : return 0xC0;
14  case 1 : return 0xF9;
15 case 2 : return 0xA4;
16  case 3 : return 0xB0;
17  case 4 : return 0x99;
18  case 5 : return 0x92;
19  case 6 : return 0x82;
20  case 7 : return 0xF8;
21  case 8 : return 0x80;
22  case 9 : return 0x90;
23  }
24  }
25  void main() {
26  while(TRUE) {
27  if(input(PIN_B7) == 1)
28  s = 1;
29  if(s == 1) {
30  if(input(PIN_B7) == 0) {
31  s = 0;
32  i++;
33  if(i > 9999)
34  i = 0;
35  }
36  }
37  digit = i % 10;
38  digit1 = seg(digit);
39  output_a(0x0F); // Turn off all displays
40  output_b(digit1); // Send ones digit
41  output_a(0x07); // Turn on display for ones
42  delay_ms(5);
43  digit = (i / 10) % 10;
44  digit10 = seg(digit);
45  output_a(0x0F); // Turn off all displays
46  output_b(digit10); // Send tens digit
47  output_a(0x0B); // Turn on display for tens
48  delay_ms(5);
49  digit = (i / 100) % 10;
50  digit100 = seg(digit);
51  output_a(0x0F); // Turn off all displays
52  output_b(digit100); // Send hundreds digit
53  output_a(0x0D); // Turn on display for hundreds
54  delay_ms(5);
55  digit = (i / 1000) % 10;
56  digit1000 = seg(digit);
57  output_a(0x0F); // Turn off all displays
58  output_b(digit1000); // Send thousands digit
59  output_a(0x0E); // Turn on display for thousands
60  delay_ms(5);
61  }
62  }

Postayla Gelen Deniz Kabuğu (Behiç Ak) Kitabının Özeti, Konusu ve Kitap Hakkında Bilgi

Kitabın Adı: Postayla Gelen Deniz Kabuğu Kitabın Yazarı:  Behiç Ak Kitap Hakkında Bilgi: Dijital dünyanın labirentlerinden çıkış mümkün mü?...