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

UYGULAMA 4 DEVRE BAĞLANTISI VE ĠSTENENLER

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

Detaylı

butonu kesmeli çalışacak:butona basınca birler basamağı

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

Detaylı