#11 de yazdım.
Kod:
while(1)
{
PORTB = 0b11100000;
delay_ms(5);
PORTB = 0b11010001;
delay_ms(5);
}
gibi satırlardan oluşan kodlar olacak. For, while vs. yok.
Devreyi şu hale soktum ve bu kodu yazdım
/*
* File: okulNumara.c
* Author: MRUMTAL_ARGE
*
* Created on 08 Ocak 2025 Çarşamba, 22:07
*/
#include <16F877A.h>
// PIC16F877A Configuration Bit Settings
// CONFIGURATION BITS
#fuses HS // Harici kristal osilatör (4 MHz veya üzeri)
#fuses NOWDT // Watchdog Timer kapalı
#fuses PUT // Power-up Timer etkin
#fuses BROWNOUT // Düşük voltaj sıfırlama etkin
#fuses NOLVP // Low-Voltage Programming devre dışı
#fuses NOCPD // Data EEPROM kod koruması kapalı
#fuses NOWRT // Flash program belleği yazma koruması kapalı
#fuses NOPROTECT // Program belleği koruması kapalı
#use delay(clock=4000000) // 4 MHz işlemci hızı
// Gerekli diziler ve değişkenler
int i, t;
int sayilar[10] = {2, 3, 4, 1, 0, 9, 0, 3, 2}; // Gösterilecek numaralar: 234109032
int display[4] = {224, 208, 176, 112}; // 7 segment display'in seçim pinlerine uygun adresler
void main(void) {
// PORT ve TRIS ayarları
set_tris_b(0x00); // PORTB çıkış
output_b(0x00); // PORTB sıfırlandı
set_tris_a(0x00); // PORTA çıkış
output_a(0x01); // PORTA sıfırlandı (ilk basamak seçildi)
while (1) {
for (i = 0; i <= 6; i++) { // Sadece 4'er hanelik gösterimler (son rakam dahil)
for (t = 0; t < 50; t++) { // Her adım için yaklaşık 1 saniye bekleme
output_b(display[0] + sayilar
); // İlk basamak
delay_ms(5); // Gecikme
output_b(display[1] + sayilar[i + 1]); // İkinci basamak
delay_ms(5); // Gecikme
output_b(display[2] + sayilar[i + 2]); // Üçüncü basamak
delay_ms(5); // Gecikme
output_b(display[3] + sayilar[i + 3]); // Dördüncü basamak
delay_ms(5); // Gecikme
}
}
}
}
şuan program çalışıyor bir sorun yok fakat 234109032 yazdırmak yerine 2341090320 yazdırıyor ve en başta ekranda hiçbir şey olmaması gerekirken ekran full yazı ile başlıyor