Hi-Tech C ile 74595 kullanarak 0-9999 sayıcı yapımı (Çözüldü)

Başlatan gogge, 20 Ocak 2011, 20:19:13

gogge

Selam arkadaşlar;

16f628 kullanarak 3 pin ile 0-9999  sayıcı devresi tasarladım.

Programın mantığında bana göre bir sorun yok. Ama bir türlü sayıcıyı doğru olarak çalıştıramadım.

Tek 74595 ve tek display ile sorunsuz olarak bilgi gönderimi yapabiliyorum. Ama ikinci dsiplayi ve 74595'i ilave ettiğimde bilgiyi göremiyorum.

İnceleyebilirseniz sevinirim.

Program dosyaları : bit_bit_gonder.rar
[IMG]http://dc300.4shared.com/img/6X386AVN/0.13213055296066445/0-9999_74595.gif[/img]

#include <htc.h>
#include <stdio.h>
#include "delay.h"
#include "lcd.h"

#define clock RB0	//RB0 CLOCK ucu
#define load RB2	//RB2 LOAD ucu

unsigned char bilgi[]= {0XFC,0X60,0XDA,0XF2,0X66,0XB6,0X3E,0XE0,0XFE,0XE6};
		 //  0	    1	 2	 3	   4	5	 6	  7	   8 	9
unsigned char i,data,birler,onlar,binler,yuzler;

__CONFIG(0x3f18);

void yukle(unsigned char s)
{
	for(i=0;i<=7;i++) 
	{
		data=bilgi[s]&0x01;	//rakamı bit bit gönder
		RB1=data;			//
		clock=1;
		DelayUs(1);
		clock=0; 
		bilgi[s]=bilgi[s]>>1;	//bir sonraki biti göndermek için rakam bilgisini sağa kaydır		
	}
}

void
main(void) 
{
	unsigned char goster[8]="";
	CMCON=0x07;
	TRISA=0X00;
	TRISB=0x00;
	PORTB=0x00;
	PORTA=0X00;

	lcd_init(); 
	lcd_clear();

	for(binler=0;binler<=9;binler++)
	{
		for(yuzler=0;yuzler<=9;yuzler++)
		{
			for(onlar=0;onlar<=9;onlar++)
			{
				for(birler=0;birler<=9;birler++)
				{
					yukle(binler);
					yukle(yuzler);
					yukle(onlar);
					yukle(birler);

					load=1;
					DelayUs(1);
					load=0;
					
					sprintf(goster,"bin= %d",binler);
					lcd_goto(0x00);
					lcd_puts(goster);	
					
					sprintf(goster,"yuz= %d",yuzler);
					lcd_goto(0x08);
					lcd_puts(goster);	
				
					sprintf(goster,"on = %d",onlar);
					lcd_goto(0x40);
					lcd_puts(goster);	
					
					sprintf(goster,"bir= %d",birler);
					lcd_goto(0x48);
					lcd_puts(goster);	
				
	//				DelayMs(250);
	//				DelayMs(50);
				}//birler
			}//onlar
		}//yüzler
	}//binler
}//main


gogge

Sorun çözüldü arkadaşlar.

Bilginin alındığı değişkeni kaydırdığımda değişkenin de kalıcı olarak değiştiği dikkatimden kaçmış.

Ufak bir eklentiyle geçici bir değişken kullanılarak sorun çözüldü.

#include <htc.h>
#include <stdio.h>
#include "delay.h"
#include "lcd.h"

#define clock RB0	//RB0 CLOCK ucu
#define load RB2	//RB2 LOAD ucu

unsigned char bilgi[10]= {0XFC,0X60,0XDA,0XF2,0X66,0XB6,0X3E,0XE0,0XFE,0XE6};
					  //  0	    1	 2	 3	   4	5	 6	  7	   8 	9
unsigned char gecici[10];
unsigned char i,data,birler,onlar,binler,yuzler;

__CONFIG(0x3f18);

void yukle(unsigned char s)
{
	gecici[s]=bilgi[s];
	for(i=0;i<=7;i++) 
	{
		data=gecici[s]&0x01;	//rakamı bit bit gönder
		RB1=data;				//
		clock=1;
		DelayUs(1);
		clock=0; 
		gecici[s]=gecici[s]>>1;	//bir sonraki biti göndermek için rakam bilgisini sağa kaydır	
	}
}

void
main(void) 
{
	unsigned int goster[8];
	CMCON=0x07;
	TRISA=0X00;
	TRISB=0x00;
	PORTB=0x00;
	PORTA=0X00;

	lcd_init(); 
	lcd_clear();

	for(binler=0;binler<=9;binler++)
	{
		for(yuzler=0;yuzler<=9;yuzler++)
		{
			for(onlar=0;onlar<=9;onlar++)
			{
				for(birler=0;birler<=9;birler++)
				{
					yukle(binler);
					yukle(yuzler);
					yukle(onlar);
					yukle(birler);

					load=1;
					DelayUs(1);
					load=0;
					
					sprintf(goster,"bin= %d",binler);
					lcd_goto(0x00);
					lcd_puts(goster);	
					
					sprintf(goster,"yuz= %d",yuzler);
					lcd_goto(0x08);
					lcd_puts(goster);	
				
					sprintf(goster,"on = %d",onlar);
					lcd_goto(0x40);
					lcd_puts(goster);	
					
					sprintf(goster,"bir= %d",birler);
					lcd_goto(0x48);
					lcd_puts(goster);	
				
	//				DelayMs(250);
	//				DelayMs(250);
				}//birler
			}//onlar
		}//yüzler
	}//binler
}//main