CCS C Sayıcı devresi yardım

aslan517

Üye
Katılım
19 Kas 2010
Mesajlar
5
Puanları
1
16f877 ile yapılan sayıcı devresinde her 30saymada bir PIC in bir bacağından 5snlik çıkış (5snlik ledyanacak) verilmesini istiyorum fakat işin içinden çıkamadım yardımcı olabilirmisiniz? program ektedir. herkese teşekkürler
 

Ekli dosyalar

  • Yeni Metin Belgesi.txt
    3.6 KB · Görüntüleme: 20
/******************************************************
Uygulama Adı : Display Uygulaması-2 (Buton İle 0-99 Yukarı Sayıcı)
PIC PROG/DEKA : Port B jumper'ı 7-seg konumunda olmalı
*******************************************************/


#include <16f877.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


#define display_1 pin_a0 //display_1 ifadesi pin_a0 ifadesine eşleniyor
#define display_2 pin_a1 // display_2 ifadesi pin_a1 ifadesine eşleniyor
#define buton pin_a2 // buton ifadesi pin_a2 ifadesine eşitleniyor


char birler=0, onlar=0, sayi=0; // char tipinde değişkenler tanımlanıyor


// Ortak katot display için veri değerleri
const int digit[10]={0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7C, 0x07, 0x7F, 0x6F};


/********* 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(0xFC);
set_tris_b(0x00); // B portu tümüyle çıkış olarak yönlendiriliyor


output_high(display_1); // 1. display aktif durumda
output_high(display_2); // 2. display aktif durumda


while(1)
{
birler=sayi%10; // birler hanesi hesaplanıyor
onlar=sayi/10; // onlar hanesi hesaplanıyor


output_low(display_2); // 2. display aktif durumda
output_b(digit[birler]); // displaye bilgi gönderiliyor
delay_ms(5); // gecikme veriliyor
output_high(display_2); // 2. display pasif durumda
output_low(display_1); // 1. display aktif durumda
output_b(digit[onlar]); // displaye bilgi gönderiliyor
delay_ms(5); // gecikme veriliyor
output_high(display_1); // 1. display pasif durumda


if (input(buton)) // Arttır butonuna basıldı ise
{
delay_ms(10); // Buton arklarını önleme gecikmesi

sayi++;
// sayi değişkenini 1 arttır


//////////////////////////////////////////////////////


if (sayi=30 || sayi=60 || sayi=90 )
{
output_high(pin_bo);
delay_ms(5000);
output_high(pin_bo);
}
//////////////////////////////////////////////////////




if (sayi==100) // Eğer sayi değişkeni 100 oldu ise sıfırla
sayi=0;


birler=sayi%10; // birler hanesi hesaplanıyor
onlar=sayi/10; // onlar hanesi hesaplanıyor


while(input(buton)) // Buton bırakılana kadar döngüyü işle
{
output_low(display_2); // 2. display aktif durumda
output_b(digit[birler]); // displaye bilgi gönderiliyor
delay_ms(5); // gecikme veriliyor
output_high(display_2); // 2. display pasif durumda
output_low(display_1); // 1. display aktif durumda
output_b(digit[onlar]); // displaye bilgi gönderiliyor
delay_ms(5); // gecikme veriliyor
output_high(display_1); // 1. display pasif durumda
}
}
}
}
 

Forum istatistikleri

Konular
128,179
Mesajlar
915,658
Kullanıcılar
449,940
Son üye
yavuzturan

Yeni konular

Çevrimiçi üyeler

Geri
Üst