Hitech C ile 74hc595 e veri gonderme

Katılım
26 Ara 2010
Mesajlar
3
Puanları
1
Yaş
40
Merhaba arkadaslar,bu foruma yeni kayit oldum. Herkese selamlar..
Aslında yapmak istediğim satır taramalı bir kayan yazı ve aşağıda sadece sabit şu uygulama.
Yapmak istediğim temp isimli değişkenin içindeki tüm bitleri sırayla PORTA0 dan göndermek ama uygulama çalışmıyor. Ufaktan bir göz gezdirirseniz sevinirim.

Kod:
#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 */
    }
   }
}

Bu bir kayan yazının tek harfli versiyonu. Ekranda yazıyı yazdıramadım ki kaydırayım.
Yapmak istediğim temp isimli değişkenin içindeki tüm bitleri sırayla PORTA0 dan göndermek ama uygulama çalışmıyor.Ufaktan bir göz gezdirirseniz sevinirim.
 

Forum istatistikleri

Konular
127,956
Mesajlar
913,903
Kullanıcılar
449,606
Son üye
rasit.

Yeni konular

Çevrimiçi üyeler

Geri
Üst