Ana sayfa | Hakkımda | İletişim | Sosyal platform | Bloğum
PIC CCS C & ASM / Uygulamalar
14 segment display ile kayan yazı

Bu uygulama 4x14 segment display ile kayan yazı uygulaması yaptık. Bu uygulamamızın bir farkı var ki o da sadece kesme bloğu kullanarak ana döngü dışında yapılmasıdır.

Bu uygulamayı buraya tıklayarak indirebilirsiniz. (Açık kaynak kod, simülasyon)

Arşiv parolası isterse: elektrocavus.com

NOT: İndirme bağlantısına tıkladıktan sonra tarayıcınızda beliren pop-up engeline izin veriniz. Yoksa indirme yapamazsınız.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
#include <16f877a.h>
#fuses HS, NOWDT, BROWNOUT
#use delay(clock=20M)

#use    fast_io(b)  

#define karakter_sayisi 15

 
#define sinyal  pin_b0
#define bilgi   pin_b1
#define cikis   pin_b2

unsigned int8 i=0,j=0, sayac=0, sayac2=0, diger_karakter=0;

unsigned int16 on_bellek=0;

unsigned int8 display_sec[4]={14,13,11,7};

unsigned int16 karakterlerim[karakter_sayisi]=
{
0b0010000000111001, //E
0b0000000000111000, //L
0b0010000000111001, //E
0b0010010100110000, //K
0b0000100010000001, //T
0b0010011000110011, //R
0b0000000000111111, //O
0,                  // BOŞLUK KARAKTERİ
0b0000000000111001, //C
0b0010001000110111, //A
0b0001000100110000, //V
0b0000000000111110, //U
0b0010001000101101, //S
0,                  // BOŞLUK KARAKTERİ
0                   // BOŞLUK KARAKTERİ
};

Void karakterleri_kaydir()
{
   on_bellek = karakterlerim[0];
   for(j=0;j1;j++)
   {
       karakterlerim[j] = karakterlerim[j+1];
   }
   karakterlerim[karakter_sayisi-1] = on_bellek; 
}

Void HC595_gonder(unsigned int8 i)
{
   //Karakter bilgisi gönderiliyor.
   for(j=0;j<15;j++)
   {
      if(bit_test(karakterlerim[i],j))
         output_high(bilgi);
      else
         output_low(bilgi);
      
      output_high(sinyal);
      output_low(sinyal);       
   }
   
   //Display seçme bilgisi gönderiliyor.
   for(j=0;j<4;j++)
   {
      if(bit_test(display_sec[i],j))
         output_high(bilgi);
      else
         output_low(bilgi);
      
      output_high(sinyal);
      output_low(sinyal);
   }
   
   //Shift register senkronlanıyor...(8 çıkış x 3 = 24 sinyal)
   output_low(bilgi);
   for(j=0;j<5;j++)
   {
      output_high(sinyal);
      output_low(sinyal);
   }
   
   //Shift register tamponundaki bilgiler çıkışlara aktarılıyor...
   output_high(cikis);
   output_low(cikis);
   
}

#int_timer1
Void t1_kesmesi()
{
   set_timer1(60535);
   sayac++;
   if(sayac==10)
   { 
      sayac=0;
      if(diger_karakter==4)
         diger_karakter=0;
         
      HC595_gonder(diger_karakter);
      diger_karakter++;
      
      
      sayac2++;
      if(sayac2==50) // 500ms sonra kaydirma işlemi için
      {
         sayac2=0;
         karakterleri_kaydir();
      } 
   }
   
}


Void main()
{
   set_tris_b(0);
   SETUP_TIMER_1(T1_INTERNAL | T1_DIV_BY_1);
   // 1ms'lik kesme oluşturalım.
   // 1/5M = 0,0000002 sn
   // 0.001 / 0,0000002 = 5000
   // 65535-5000=60535 
   set_timer1(60535);
   enable_interrupts(int_timer1);
   enable_interrupts(GLOBAL);
   while(1);
}
ELEKTRO ÇAVUŞ
Ana sayfa | Hakkımda | İletişim | Sosyal platform | Bloğum | Android market | Tişört market
ELEKTRO ÇAVUŞ2012 | elektrocavus.com