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
(http://dosya.co/c5yfv65ud734/Kayan_Yaz%C4%B1.rar.html)
Bulabilrsem aksama benzer bir örneğini yüklerim. Fikir vermesi için iyi olur.
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.
Cevap verecek yok mu arkadaşlar yazıyı kaydırmam lazım
Sabit yazı ve kayan yazı şeklinde örnek bilim ve teknik'in sitesinden yanlış hatırlamıyorsam.
(http://i.hizliresim.com/rg037N.jpg) (http://hizliresim.com/rg037N)
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&°er<=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
CCS C de nasıl yapılıyor onu soruyorum.