#include <htc.h>
#include "delay.h"
unsigned char resetle(void)
{
RA3=0; /* MR=0 hc595 çıkışları sıfırlandı */
RA3=1; /*hc595 MR=1 */
}
unsigned char kaydir(void)
{
RA1=0; /*hc595 clock = 0 */
RA1=1; /*hc595 clock=1 */
RA1=0; /*hc595 clock =0 */
}
unsigned char yukle(void)
{
RA2=0; /*hc595 st_cp =0 */
RA2=1; /*hc595 st_cp =1 flipfloplardaki veri çıkışlara aktarıldı */
RA2=0; /*hc595 st_cp =0 */
}
void main(void)
{
TRISA=0x00;
TRISB=0x00;
PORTA=0x00;
PORTB=0x00;
RA3=1;
unsigned const char harf[]={0xfa,0x80,0x80,0xf8,0x80,0x80,0xfa};
unsigned const char satir[]={0b01000000,0b00100000,0b00010000,0b00001000,0b00000100,0b00000010,0b00000001};
unsigned int i,j,temp,aktarim;
while(1)
{
for(j=0;j<7;j++) /* bu dongu harf dizisinin elemanlarını secicek */
{
temp=harf[j]; /* secilen eleman temp isimli degiskene aktariliyor */
for(i=0;i<7;i++) /* her eleman 8 bit olduğu için her biti 0...7 ye kadar isleme tabi tutucaz */
{
aktarim=temp; /* temp degiskenini aktarim degiskenine yukluyoruz */
aktarim=aktarim & 0b00000001; /*aktarim isimli degiskeni 0x01 ile and yapiyoruz ve islem sonucunda aktarim isimli degiskenin 1.biti oldugu gibi kaliyor , geri kalan bitler sifir. */
aktarim=aktarim | 0b11111110; /*aktarim degiskenini 0b11111110 ile OR yapiyoruz ve aktarim degiskeni 0b1111111X oluyor, X bize lazım, değişmemesi gerek. */
PORTA=PORTA & aktarim; /*PORTA ile aktarim isimli degiskeni OR luyoruz böylelikle PORTA nin 0.biti dışında diğer tüm bitleri olduğu gibi kalıyor. */
kaydir(); /* bu kaydirma komutu ile RA0 (hc595in data pini ) a yüklemiş olduğumuz 1 bitlik verimizi clock=1 clock =0 yaparak hc595 in çıkışlarında beklemeye aldık */
temp=temp>>1; /* temp degiskenini 1 bit saga kaydirdik ki secilen elemanın(harf in ilk satırı ) bitlerini sırasıyla hc595 e aktarabilelim */
}
yukle(); /* bu komut ile hc595 in çıkışında beklemeye aldığımız veriyi çıkışlara aktarırız, bu komutu kullanmasaydık veri hc595 in hafızasında kalacaktı sadece ama çıkışa verilmeyecekti */
PORTB=satir[j]; /* seçtiğimiz elemanın tüm bitleri hc595 ile bir satıra yüklenince PORTB den ilgili satırı seçtik. j degiskeni hem eleman seçmeye ( hangi satırdaysa ) hem de o satırı seçmeye yarıyor */
DelayMs(1); /* ilgili harf in en alt satırı ekrana yazdırıldıktan sonra 1 mS bekliyoruz */
PORTB=0x00; /* satiri deaktif ediyoruz */
/* resetle(); */ /* hc595 in çıkışlarını sıfırlıyoruz */
}
}
}