Herkese iyi forumlar. "
16F877A’ nın Port B sine bağlanan 4 adet 7 segment display ile öğrenci numaranızı kayan yazı şeklinde yazdırınız." diye bir ödevim var.
Ekli dosyayı görüntüle 88452Bu şekilde devre şemasını internette buldum lakin kodlarını bulamadım. yardımcı olabilicek birisi çıkarsa çok mutlu olurum.
#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
int i; // i isminde 8 bitlik bir değişken tanıtılıyor.
// Ortak katot display için veri değerleri
const int digit[16]={0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7C, 0x07, 0x7F, 0x6F, 0x77, 0x7C, 0x39, 0x5E, 0x79, 0x71};
/********* ANA PROGRAM FONKSİYONU********/
void main ()
{
setup_psp(PSP_DISABLED); // PSP 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(0x00); // A portu tümüyle çıkış olarak yönlendiriliyor
set_tris_b(0x00); // B portu tümüyle çıkış olarak yönlendiriliyor
output_b(0x00); // B portu çıkışları sıfırlanıyor
output_a(0x02); // RA1 pini lojik-1 yapılıyor, diğer pinler lojik-0
while(1) // Sonsuz döngü oluşturuluyor
{
for(i=0;i<=15;i++)
{
output_b(digit
); // digit değerini B portuna gönder
delay_ms(500); // 500 msn bekle
}
}
}
Merhaba arkadaşım,verdiğim örnek sadece tek bir 7 segment için önce bunu ilgili bağlantılar yapıp çalıştırmanı tavsiye ederim,
Öğrenci numarasının kayan yazı sistemi biraz karışık fakat yapabilirsin,
1-Çalışma mantığı olarak örneğin 1234 öğrenci numarasını sağa yada sola kaydırmayı düşündüğünü varsayalım ;
1234 sayısını birler,onlar,yüzler,binler şeklinde parçalayıp herbir sayıyı verdiğim örnekteki gibi digit[rakam] rakam değerine göre önceden belirlenmiş diziden herbirini kayan yazı olacak şekilde 4 adet 7 segmente bağlayacaksın,
7 segmentlerin tüm data hatlarını b portuna bağladıktan sonra 7 segment leri besleyen ortak uçları da başka bir boş porttan kontrol edeceksin,
Örneğin;
1 sayısını 4. 7 segmente gönder ve ortak ucu aktif et,
Sonra 1 sayısını 3. 7 segmente gönder ve ortak ucu aktif et,kısa bir süre sonra 3. ortak ucu kesip 4. ortak ucu aktif edip 2 sayısını 4. 7 segment displaye gönder,
sonra 1 sayısını 2. 7 segmente gönder ve ortak ucu aktif et,kısa bir süre sonra 2. ortak ucu kesip 3. ortak ucu aktif edip 2 sayısını gönder ,kısa bir süre sonra 3. ortak ucu kesip 4. ortak ucu aktif edip 3 sayısını gönder ....
Bu işleme display tarama deniyor her ne kadar karmaşık gelse de digit[rakam1] ,digit[rakam2] ,digit[rakam3] ,digit[rakam4] değerlerini belirli zaman aralıkları ile ilgili 7 segment displaylere gönderebilmen bu işi çözmen anlamına geliyor,
Not: 7 Segment display ortak ucunun ortak anot yada katot olmasına dikkat ediniz