Display Uygulaması-3(Kesme Yöntemi Kullanarak 7448 Entegresi
Transkript
Display Uygulaması-3(Kesme Yöntemi Kullanarak 7448 Entegresi
Display Uygulaması-3(Kesme Yöntemi Kullanarak 7448 Entegresi ve Buton İle 0-9999 Yukarı/Aşağı Sayıcı) C1 CRYSTAL FREQ=4MHz R17 R18 R21 R22 10k 10k 10k 10k 10k 10k 8 9 10 RD0/PSP0 RD1/PSP1 RD2/PSP2 RD3/PSP3 RD4/PSP4 RD5/PSP5 RD6/PSP6 RD7/PSP7 15 16 17 18 23 24 25 26 Birler+ RA0/AN0 RA1/AN1 RA2/AN2/VREFRA3/AN3/VREF+ RA4/T0CKI RA5/AN4/SS RC0/T1OSO/T1CKI RC1/T1OSI/CCP2 RE0/AN5/RD RC2/CCP1 RE1/AN6/WR RC3/SCK/SCL RE2/AN7/CS RC4/SDI/SDA RC5/SDO RC6/TX/CK RC7/RX/DT 33 34 35 36 37 38 39 40 Birler- 2 3 4 5 6 7 RB0/INT RB1 RB2 RB3/PGM RB4 RB5 RB6/PGC RB7/PGD Onlar+ +5V OSC1/CLKIN OSC2/CLKOUT MCLR/Vpp/THV Onlar- 13 14 1 Yuzler+ U1 C2 +5V R15 10k R1 X1 22pF R13 Yuzler- 22pF RESET +5V R14 R16 R19 R20 R23 R24 220 220 220 220 220 220 19 20 21 22 27 28 29 30 PIC16F877 U2 7 1 2 6 4 5 3 A B C D BI/RBO RBI LT 7x220 Ohm QA QB QC QD QE QF QG 13 12 11 10 9 15 14 74LS48 +5V UYGULAMA 3 DEVRE BAĞLANTISI VE ĠSTENENLER 1. Birler+ (RB0/INT) butonu kesmeli çalışacak:butona basınca birler basamağı bir artacak ve 9 sayısına ulaşınca onlar basamağı bir artacak 2. Birler- (RB1) butonu normal çalışacak : butona basınca birler basamağı bir azalacak ve 0 sayısına ulaşınca onlar basamağı bir azalacak 3. Onlar+ (RB4) butonu kesmeli çalışacak : butona basınca onlar basamağı bir artacak ve 9 sayısına ulaşınca yüzler basamağı bir artacak 4. Onlar- (RB5) butonu kesmeli çalışacak : butona basınca onlar basamağı bir azalacak ve 0 sayısına ulaşınca yüzler basamağı bir azalacak 5. Yuzler+ (RB6) butonu kesmeli çalışacak : butona basınca yüzler basamağı bir artacak ve 9 sayısına ulaşınca binler basamağı bir artacak 6. Yuzler- (RB7) butonu kesmeli çalışacak : butona basınca yüzler basamağı bir azalacak ve 0 sayısına ulaşınca binler basamağı bir azalacak 7. Displeyler 74LS48 entegresi ile sürülecek 8. Uygulamanın bölümdeki deneysel sette çalışabilmesi için displey seçme girişleri(1234) aktif "0" olacak. yani seçmek istediğiniz dipleye "0" göndereceksiniz 9. Uygulamanın raporu, C kodu ,Proteus similasyon dosyası ve uygulama için hazır kodlanmış PIC inizi haftaya derse getirmeniz gerekiyor. /****************************************************** Uygulama Adı : Display Uygulaması-3(Kesme Yöntemi Kullanarak 7448 Entegresi ve Buton Ġle 0-9999 Yukarı/Aşağı Sayıcı) Ders: Microişlemcili Sistemler- (Bilecik Üniveristesi Bilgisayar Mühendisliği) *******************************************************/ #include <16f877A.h> // Kullanılacak denetleyicinin başlık dosyası tanıtılıyor. //***********Denetleyici konfigürasyon ayarları************ #fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD #use delay(clock=4000000) // Gecikme fonksiyonu için kullanılan osilatör frekansı belirtiliyor #use fast_io(a) // Port yönlendirme komutları a portu için geçerli #use fast_io(b) // Port yönlendirme komutları b portu için geçerli #use fast_io(d) #define #define #define #define #define #define arttir pin_b0 // arttir butonu pin_b0 ile eşleniyor azalt pin_b1 // azalt butonu pin_a1 ile eşleniyor arttiron pin_b4 // arttir butonu pin_b4 ile eşleniyor azalton pin_b5 // azalt butonu pin_b5 ile eşleniyor arttiryuz pin_b6 // arttir butonu pin_b6 ile eşleniyor azaltyuz pin_b7 // azalt butonu pin_b7 ile eşleniyor #define dspBirler 0b01110000 #define dspOnlar 0b10110000 #define dspYuzler 0b11010000 #define dspBinler 0b11100000 char birler=0, onlar=0,yuzler=0,binler=0; // int tipinde değişkenler tanımlanıyor unsigned int16 sayi=0; // Ortak katot display için veri değerleri const int digit[10]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09}; /********* KESME FONKSĠYONLARI ********/ #INT_EXT void Int_External() { sayi++; if (sayi>=10000) sayi=0; // sayi değeri 10000 ise değeri sıfırla birler=sayi%10; onlar=(sayi/10)%10; yuzler=(sayi/100)%10; binler=sayi/1000; } #INT_RB void Int_RBChange() { if (!input(arttiron)) // arttır butonuna basıldığında { if (sayi>=10000) sayi=0; // sayi değeri 10000 ise değeri sıfırla sayi+=10; // sayi değerini 10 arttır birler=sayi%10; onlar=(sayi/10)%10; yuzler=(sayi/100)%10; binler=sayi/1000; } if (!input(azalton)&&(sayi!=0)) // azalt butonuna basıldığında { if(sayi>=10)sayi-=10; // sayi değerini 10 azalt if (sayi<0) sayi=9999; birler=sayi%10; onlar=(sayi/10)%10; yuzler=(sayi/100)%10; binler=sayi/1000; } if (!input(arttiryuz)) // arttır butonuna basıldığında { if (sayi>=10000) sayi=0; // sayi değeri 10000 ise değeri sıfırla sayi+=100; // sayi değerini 100 arttır birler=sayi%10; onlar=(sayi/10)%10; yuzler=(sayi/100)%10; binler=sayi/1000; } if (!input(azaltyuz)&&(sayi!=0)) // azalt butonuna basıldığında { if(sayi>=100)sayi-=100; // sayi değerini 100 azalt if (sayi<0) sayi=9999; birler=sayi%10; onlar=(sayi/10)%10; yuzler=(sayi/100)%10; binler=sayi/1000; } } /********* ANA PROGRAM FONKSĠYONU********/ void main () { setup_psp(PSP_DISABLED); // PSP birimi devre dışı setup_spi(SPI_SS_DISABLED); // SPI birimi devre dışı setup_timer_1(T1_DISABLED); // T1 zamanlayıcısı devre dışı setup_timer_2(T2_DISABLED,0,1); // T2 zamanlayıcısı devre dışı setup_adc_ports(NO_ANALOGS); // ANALOG giriş yok setup_adc(ADC_OFF); // ADC birimi devre dışı setup_CCP1(CCP_OFF); // CCP1 birimi devre dışı setup_CCP2(CCP_OFF); // CCP2 birimi devre dışı set_tris_a(0xFF); // A portu tümüyle giriş olarak yönlendiriliyor set_tris_b(0xFF); // B portu tümüyle giriş olarak yönlendiriliyor set_tris_d(0x00); // D portu tümüyle çıkış olarak yönlendiriliyor output_d(0x00); ext_int_edge(H_TO_L); enable_interrupts(INT_EXT); enable_interrupts(INT_RB); enable_interrupts(GLOBAL); while(1) // Sonsuz döngü { birler=sayi%10; onlar=(sayi/10)%10; yuzler=(sayi/100)%10; binler=sayi/1000; output_b(digit[birler]|(dspBirler)); // 1.display aktif, diğer displeyler pasif ve birler basamağı gönderiliyor delay_ms(5); // Gecikme veriliyor output_b(digit[onlar]|(dspOnlar)); // 2.display aktif, diğer displeyler pasif ve onlar basamağı gönderiliyor delay_ms(5); // Gecikme veriliyor output_b(digit[Yuzler]|(dspYuzler)); // 3.display aktif, diğer displeyler pasif ve yuzler basamağı gönderiliyor delay_ms(5); // Gecikme veriliyor output_b(digit[Binler]|(dspBinler)); // 4.display aktif, diğer displeyler pasif ve binler basamağı gönderiliyor delay_ms(5); // Gecikme veriliyor if (!input(azalt)&&(sayi!=0)) // azalt butonuna basıldığında { if (sayi<0) sayi=9999; sayi--; // sayi değerini 1 azalt if (sayi<0) sayi=9999; //azaltfnc(*azalt); birler=sayi%10; onlar=(sayi/10)%10; yuzler=(sayi/100)%10; binler=sayi/1000; while(!input(azalt)) // azalt butonundan el çekilene kadar bekle { output_b(digit[birler]|(dspBirler)); // 1.display aktif, diğer displeyler pasif ve birler basamağı gönderiliyor delay_ms(5); // Gecikme veriliyor output_b(digit[onlar]|(dspOnlar)); // 2.display aktif, diğer displeyler pasif ve onlar basamağı gönderiliyor delay_ms(5); // Gecikme veriliyor output_b(digit[Yuzler]|(dspYuzler));// 3.display aktif, diğer displeyler pasif ve yuzler basamağı gönderiliyor delay_ms(5); // Gecikme veriliyor output_b(digit[Binler]|(dspBinler));// 4.display aktif, diğer displeyler pasif ve binler basamağı gönderiliyor delay_ms(5); // Gecikme veriliyor } } } }
Benzer belgeler
Adı Soyadı - Bilecik Şeyh Edebali Üniversitesi Bilgisayar Mühendisliği
OSC1/CLKIN
OSC2/CLKOUT
MCLR/Vpp/THV
UYGULAMA 4 DEVRE BAĞLANTISI VE ĠSTENENLER
RC0/T1OSO/T1CKI
RC1/T1OSI/CCP2
RE0/AN5/RD
RC2/CCP1
RE1/AN6/WR
RC3/SCK/SCL
RE2/AN7/CS
RC4/SDI/SDA
RC5/SDO
RC6/TX/CK
RC7/RX/DT
butonu kesmeli çalışacak:butona basınca birler basamağı
RE1/AN6/WR
RC3/SCK/SCL
RE2/AN7/CS
RC4/SDI/SDA
RC5/SDO
RC6/TX/CK
RC7/RX/DT