Kayan Yazı

Başlatan ercanatnr, 28 Şubat 2015, 15:22:52

ercanatnr

Merhaba CCS C programında Shift Registerler ile aşagıdaki gibi bir kod yazdım. Kodlar ISIS te düzgün olarak çalışıyor 8*40 ekranda ERCAN yazıyor. ancak ben bu yazıyı kaydırmak istiyorum. Bunun için nasıl bir ekleme yapmam gerekir.
#include <16F628A.h>                                     ////
#FUSES NOMCLR                                           ////
#FUSES NOBROWNOUT                                      ////
#FUSES NOLVP                                          ////
#use delay(internal=4000000)                         ////
////////////////////////////////////////////////////////
#define SH_CP pin_a0                               ////
#define DS pin_a1                                 ////
#define ST_CP pin_a2                             ////
#define MR pin_a3                               ////
#define OE pin_a4                              ////
//////////////////////////////////////////////////
int i,j;                                     ////
int Led=0;                                  ////
int T_Hizi=3;                              ////
int16 SB=0;                               ////
/////////////////////////////////////////////
int E_YUK=8;                            ////
int E_GEN=40;                          ////
int Satir[8]={1,2,4,8,16,32,64,128};  ////
/////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//                          E                             R                               C                               A                                  N
int Dizi[]={255,255,3,127,127,3,255,255  ,  63,127,195,127,63,51,99,195  ,  60,126,227,3,3,227,126,60  ,  60,70,195,195,255,195,195,195  ,  195,195,199,203,211,227,195,195};

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

void Clock()
{
output_high(SH_CP);
output_low(SH_CP);
output_high(ST_CP);
output_low(ST_CP);
}

void main()
{
set_tris_a(0x00);
set_tris_b(0x00);

output_a(0x00);
output_b(0x00);

output_low(OE);
output_high(MR);

while(1)
{

for(i=0;i<=E_YUK-1;i++)
   {   
   Led=Satir[i];
      
      for(j=0;j<=E_GEN-1;j++)
      {
      SB=E_GEN-1;
      SB=SB-j;
      output_bit(DS,!(bit_test(Dizi[SB],i)));      
      Clock();
      }
  
   output_b(Led);
   delay_ms(T_Hizi);
   output_b(0);
   }
  }
}


ISIS Simülasyonu
http://dosya.co/c5yfv65ud734/Kayan_Yazı.rar.html

Recep METE

Bulabilrsem aksama benzer bir örneğini yüklerim. Fikir vermesi için iyi olur.
printf(lcd_putc,"\f  Ne kadar okursan oku, bilgine, yakışır şekilde davranmıyorsan cahilsin demektir.  \n   semfero");d

ercanatnr

Alıntı yapılan: Recep METE - 01 Mart 2015, 08:28:16
Bulabilrsem aksama benzer bir örneğini yüklerim. Fikir vermesi için iyi olur.
Teşekkürler.

ercanatnr

Cevap verecek yok mu arkadaşlar yazıyı kaydırmam lazım

ilker_32

Sabit yazı ve kayan yazı şeklinde örnek bilim ve teknik'in sitesinden yanlış hatırlamıyorsam.



Araba resmi:

#include <pic.h>
#include <delay.c>

main(void)
{
//Değişken tanımlamaları
unsigned int i;
unsigned const char araba[]={
0x60,0x70,0x70,0xf0,0xf8,0x74,0x72,0x7e,
0x72,0x72,0x72,0x7e,0xF2,0xf4,0x78,0x30};

//port ayarlama işlemleri
TRISB=0; // PortB'nin hepsi çıkış
TRISA=0; // PortA'nin hepsi çıkış
CMCON=0x07; // PORTA sayısal giriş/çıkış
PORTB=0x00; // Başlangıçta LED'ler sönük

//16 adet satır verisini sırayla PORT'a gönder
for(;;){
	for(i=0;i<=15;i++){
	PORTB=araba[i]; // Verileri PortB'ye gönder
	PORTA=i; // ilgili sütunu seç
	DelayMs(1); // 1ms bekle
}} 
}// Program sonu


Ok resmi:


#include <pic.h>
#include <delay.c>

main(void)
{
//Değişken tanımlamaları
unsigned int i;
unsigned const char oklar[]={
0x08,0x0c,0xfe,0xff,0xfe,0x0c,0x08,0x00,
0x00,0x10,0x30,0x7f,0xFF,0x7f,0x30,0x10};

//port ayarlama işlemleri
TRISB=0; // PortB'nin hepsi çıkış
TRISA=0; // PortA'nin hepsi çıkış
CMCON=0x07; // PORTA sayısal giriş/çıkış
PORTB=0x00; // Başlangıçta LED'ler sönük

//16 adet satır verisini sırayla PORT'a gönder
for(;;){
	for(i=0;i<=15;i++){
	PORTB=oklar[i]; // Verileri PortB'ye gönder
	PORTA=i; // ilgili sütunu seç
	DelayMs(1); // 1ms bekle
}} 
}// Program sonu


Kayan yazı:


#include <pic.h>
#include <delay.c>
main(void)
{
unsigned char gecici_dizi[16];
unsigned char i,a,toplam_sutun;
signed int kayma,deger;
unsigned const char metin[]={
0xFF,0x89,0x89,0x89,0x76,0x00, // B
0x84,0xFD,0x84,0x00, 	       // İ
0xFF,0x80,0x80,0x80,0x80,0x00, // L
0x84,0xFD,0x84,0x00, 	       // İ
0xFF,0x02,0x0C,0x02,0xFF,0x00, // M
0x00,0x00,0x00,0x00, 	       // Bosluk
0x38,0x40,0x80,0x40,0x38,0x00, // v
0x70,0xA8,0xA8,0xA8,0xB0,0x00, // e
0x00,0x00,0x00,0x00,	       // Bosluk
0x01,0x01,0xFF,0x01,0x01,0x00, // T
0xFF,0x89,0x89,0x89,0x81,0x00, // E
0xFF,0x18,0x24,0x42,0x81,0x00, // K
0xFF,0x04,0x08,0x10,0xFF,0x00, // N
0x84,0xFD,0x84,0x00, 	       // İ
0xFF,0x18,0x24,0x42,0x81,0x00};// K

//Metindeki sütunların sayısını hesapla
toplam_sutun=80; //10x6+5x4=60+20=80

//Port ayarlama işlemleri
TRISB=0; 
TRISA=0; 
CMCON=0x07; 
PORTB=0x00; 

for(;;){//Ana döngü
//Geçici diziyi sıfırla
for(i=0;i<=15;i++){
gecici_dizi[i]=0; //Dizi elemanları başlangıçta 0
}

//Kaydırma işlemleri	
for(kayma=-14;kayma<=toplam_sutun;kayma++){ 

//Metni 16 sütunluk parçalara böl
for(i=0;i<=15;i++){
deger=i+kayma;
if(deger<0)gecici_dizi[i]=0; //metin girişi
if(deger>=0&&deger<=toplam_sutun-1)
gecici_dizi[i]=metin[deger]; 
if(deger>toplam_sutun)gecici_dizi[i]=0; //metin çıkışı
}

//Tarama işlemleri
for(a=0;a<40;a++){ //Aynı görüntüyü 40 kez tekrarla
for(i=0;i<=15;i++){ //Geçici diziyi görüntüle
PORTB=gecici_dizi[i]; // Veriyi PortB'ye gönder
PORTA=i; // ilgili sütun'u seç
DelayUs(200); // 200 mikrosaniye bekle
}}}

}// işlemleri tekrarla
}// Program sonu




ercanatnr

CCS C de nasıl yapılıyor onu soruyorum.