Elektrik elektronik eğitimi ile ilgili bilgiler, kitap özetleri, kitap sınav soruları ve eğitime dair her şey
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 }
Kaydol:
Kayıtlar (Atom)
İyi Geceler Bay Tom (Michelle Magorian) Kitap Sınavı Yazılı Soruları ve Cevap Anahtarı
Kitabın Adı: İyi Geceler Bay Tom Kitabın Yazarı: Michelle Magorian Kitap Sınavı Soruları ve Cevap Anahtarı 1. Will'in kollarındaki morlu...
-
Cep telefonu ve tablet şarj cihazlarında USB kablolarla sık sık karşılaşıyoruz ve kullanıyoruz. Aynı zamanda bu cihazlara ve bilgisayarl...
-
Kitabın Adı : Kiraz Ağacı ile Aramızdaki Mesafe Kitabın Yazarı : Paola Peretti Kitap Hakkında Bilgi : Yazarın kendi yaşam hikâyesinden esinl...