
Bir çok havada yazı yazma uygulamasına göre daha üstün bir uygulama visual basic ile hazırlanan kontrol programı sayesinde istenilen yazı, belirlenen rekte yazdırılıyor.
Havada yazı yazma devresinde kullanılan mikrodenetleyici pic16f877 kod CCS C ile hazırlanmış 8 adet rgb led kullanılıyor.
Hazırlayan: Korhan USLU – Emeği geçen hazırlayan kişilere teşekkürler
Visual Basic code generator rgb programının kullanımı;

Yazı ve şekilleri oluşturmak için Visual Basic’de bir program yazdım. Program oluşturduğum şeklin oluşması için gereken kodları ve şeklin dizi halini C: de rgb.txt ve rgb1.txt dosyalarına oluşturuyor. ilk başta direk sıralı kodları kullanıyordum yazıyı oluşturmak için ama bu şekilde pic’in hafızası yetmiyordu, ben de şekli dizi halinde tanımlayıp döngüyle göstermeyi denedim ve çok daha az yer kapladı. tavsiyem rgb1.txt içine oluşan dizileri kullanın. rgb1.txt içinde fazladan oluşan 255 leri silin bi harfi 6 byte dan oluşturun sondaki bir 255 bir boşluk anlamında. harfleri birleştirip yazıyı oluşturun. ccs c kodlarına bakarsanız anlarsınız zaten. programda her oluşturduğunuz harf in dizisi rgb1.txt nin içine eklenecek. yani içindeki bilgiler silinmeyecek oraya dikkat edin.
RGB Ledler ile havada yazı yazdırma görüntüleri;
RGB LED’lerle havaya yazı yazma picproje2.c ccs c yazılım içeriği;
/*************************************************************** * Proje : RGB LED'lerle havaya yazı yazma * * Name : picproje2.c * * Author : [KORHAN USLU] * * Notice : Copyright (c) 2010 [KORHAN USLU] * * : All Rights Reserved * * Date : 30.12.2010 * * Version : 4.4 * * [email protected] * * www.facebook.com/korhanuslu * **************************************************************** */ #include <16f877.h> // Kullanılacak denetleyicinin başlık dosyası tanıtılıyor. #fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD // Denetleyici konfigürasyon ayarları #use delay (clock=4000000) // Gecikme fonksiyonu için kullanılacak osilatör frekansı belirtiliyor. #use fast_io(b) //Port yönlendirme komutları B portu için geçerli #use fast_io(c) //Port yönlendirme komutları C portu için geçerli #use fast_io(d) #use fast_io(a) //#HEXCOMMENT KORHAN USLU int1 a=1; unsigned int i=0; unsigned int16 k=1; unsigned int j=0; unsigned int w=0; unsigned int s=0; unsigned int z=255; unsigned int r1=(0b00111001); unsigned int g1=(0b11100001); unsigned int b1=(0b10001101); unsigned int r2=0; unsigned int g2=0; unsigned int b2=0; //_______________________ unsigned int32 kesme=0; // Tamsayı tipinde 16 bitlik değişken tanımlanıyor unsigned int b=45; unsigned int c=39; unsigned int d=33; unsigned int r_1[8]={0x00,0x00,0xff,0xff,0xff,0x00,0x00,0xff,}; unsigned int r_2[8]={0xff,0x00,0x00,0xff,0xff,0xff,0x00,0x00,}; unsigned int g_1[8]={0xff,0x00,0x00,0x00,0xff,0xff,0x00,0xff,}; unsigned int g_2[8]={0xff,0xff,0x00,0x00,0x00,0xff,0xff,0x00,}; unsigned int b_1[8]={0xff,0xff,0xff,0x00,0x00,0x00,0x00,0xff,}; unsigned int b_2[8]={0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,}; //------------------------------ unsigned int ayyildiz[21]={195, 129, 24, 60, 126, 189, 219, 255, 255, 119, 55, 131, 129, 192, 129, 131, 55, 119, 255, 255, 255,};//ay yıldız dizisi unsigned int korhan[36]={ 0, 231, 219, 60, 126, 255, //K [0]-[5] 129, 126, 126, 126, 129, 255, //O [6]-[11] 0, 230, 214, 185, 127, 255, //R [12]-[17] 0, 239, 239, 239, 0, 255, //H [18]-[23] 3, 237, 238, 237, 3, 255, //A [24]-[29] 0, 249, 231, 159, 0, 255, //N [30]-[35] }; unsigned int uslu[24]={ 128, 127, 127, 127, 128, 255, //U [0]-[5] 185, 118, 118, 110, 157, 255, //S [6]-[11] 0, 127, 127, 127, 127, 255, //L [12]-[17] 128, 127, 127, 127, 128, 255, //U [18]-[23] }; unsigned int kou[18]={ 0, 231, 219, 60, 126, 255, //K [0]-[5] 129, 126, 126, 126, 129, 255, //O [6]-[11] 131, 126, 127, 126, 131, 255, //Ü [12]-[17] }; unsigned int mekatronik[58]={0, 249, 231, 249, 0, 255, //M 0, 110, 110, 110, 110, 255, //E 0, 231, 219, 60, 126, 255, //K 3, 237, 238, 237, 3, 255, //A 254, 254, 0, 254, 254, 255, //T 0, 230, 214, 185, 127, 255, //R 129, 126, 126, 126, 129, 255, //O 0, 249, 231, 159, 0, 255, //N 123, 2, 123, 255, //İ 0, 231, 219, 60, 126, 255, //K }; unsigned int mekatronik1[58]={255,255,255,255,255,255,//geçici değişken 255,255,255,255,255,255, 255,255,255,255,255,255, 255,255,255,255,255,255, 255,255,255,255,255,255, 255,255,255,255,255,255, 255,255,255,255,255,255, 255,255,255,255,255,255, 255,255,255,255, 255,255,255,255,255,255,}; //sinüsoidal dalgalar unsigned int dalgakirmizi[15]={231, 219, 189, 126, 189, 219, 231, 231, 219, 189, 126, 126, 189, 219, 231,}; unsigned int dalgamor[15]={239, 223, 191, 127, 191, 223, 239, 247, 251, 253, 254, 254, 253, 251, 247,}; //****** Dış Kesme Fonksiyonu ***************** #int_ext // Dış (External) RB0/INT kesmesi void ext_kesmesi () { // Dış kesme fonksiyonu kesme=kesme+1;//her tur kesme 1 artar a=1; i=1; if (kesme>680){ // animasyonlar bittiğinde başa döner kesme=0; b=45; c=39; d=33; k=0; w=0; z=7; s=0; for(w=0;w<58;w++) { mekatronik1[w]=255; } } } /********* ANA PROGRAM FONKSİYONU********/ void goster(){ while(kesme<5){//pwm ile renk geçişleri output_a(0x01); output_b(0xff); output_d(0xff); output_c(0xff); for(w=0;w<8;w++){ for (k=1;k<1000;k++){ for(j=1;j<3;j++){ output_a(r_1[w]); output_b(r_1[w]); output_d(g_1[w]); output_c(b_1[w]); delay_us(k); output_a(r_2[w]); output_b(r_2[w]); output_d(g_2[w]); output_c(b_2[w]); delay_us(1000-k); if(kesme>5){ break; } } if(kesme>5){//motor dönmeye başlayınca 5 tur sonra döngüden çık break; } } if(kesme>5){//motor dönmeye başlayınca 5 tur sonra döngüden çık break; } k=1; } } while((kesme<120)&&(kesme>5)){//çiçek output_b(dalgakirmizi[w]);//kırmızı output_a(dalgakirmizi[w]);//kırmızı output_d(255);//yeşil output_c(dalgamor[w]);//mavi delay_ms(1); w=w+1; if ((w>15)||(a==1)){ a=0;//!!dalganın kaymasını düzelt!! w=0;//dalga döngüsü taşınca döngü başa alınır. //görüntüde kayma olmaması için kesme geldiğinde dalga döngüsü başa alınır. } } //------------------------------------- if(kesme>120){//şelale if(kesme<160){ w=w+1; if(w>4){ w=0; output_b(r1);//kırmızı output_a(r1);//kırmızı output_d(g1);//yeşil output_c(b1);//mavi r2=r1<<1;//bit dizisi sola kaydırlır g2=g1<<1;//bit dizisi sola kaydırlır b2=b1<<1;//bit dizisi sola kaydırlır if(bit_test(r1,7)){ r2=r2+1; } if(bit_test(g1,7)){ g2=g2+1; } if(bit_test(b1,7)){ b2=b2+1; } r1=r2; g1=g2; b1=b2; } } } //--------------------------- if(kesme>160){//kayan koü if(kesme<280){ w=0; delay_ms(b); for (w=0;w<6;w++){//kırmızı K kayarak başa gelir output_b(kou[w]);//kırmızı output_a(kou[w]);//kırmızı output_d(255);//yeşil-sönük output_c(255);//mavi-sönük delay_ms(1); } if(b<4){ w=5; delay_ms(c); for (w=5;w<12;w++){//yeşil O kayarak K'nın yanına gelir output_b(255);//kırmızı-sönük output_a(255);//kırmızı-sönük output_d(kou[w]);//yeşil output_c(255);//mavi-sönük delay_ms(1); } if(c<3){ delay_ms(d); w=11; for (w=11;w<18;w++){//mavi Ü kayarak O'nun yanına gelir output_b(255);//kırmızı output_a(1);//kırmızı output_d(255);//yeşil output_c(kou[w]);//mavi delay_ms(1); } if(d<3){ d=3; } c=3; d=d-1; } c=c-1; b=3; } b=b-1; } } //-------------------kırmızı kou if((kesme>280)&&(kesme<320)){ w=0; for (w=0;w<18;w++){ output_b(kou[w]); output_a(kou[w]); output_d(255); output_c(255); delay_ms(1); } } //--------------------yeşil kou if((kesme>320)&&(kesme<360)){ w=0; for (w=0;w<18;w++){ output_b(255); output_a(255); output_d(kou[w]); output_c(255); delay_ms(1); } } if((kesme>360)&&(kesme<440)){ s=s+1; if (kesme<362){ j=0; z=7; } if (kesme>362){ if (j<8){ if (s>9) s=0; for (w=0;w<58;w++){ mekatronik1[w]=mekatronik1[w]<<1; if((bit_test(mekatronik[w],z))==0){ bit_clear(mekatronik1[w],0);//mekatronik dizisi bitleri sondan } //mekatronik1in başına aktarılır else { bit_set(mekatronik1[w],0); } } j=j+1; z=z-1; } } for (w=0;w<58;w++){ output_b(255); output_a(255); output_d(mekatronik1[w]); output_c(255); delay_ms(1); } } //--------------mekatronik if((kesme>440)&&(kesme<480)){//mavi mekatronik w=0; for (w=0;w<58;w++){ output_b(255); output_a(255); output_d(255); output_c(mekatronik[w]); delay_ms(1); } } //------------------------- if((kesme>480)&&(kesme<520)){//kırmızı mekatronik w=0; for (w=0;w<58;w++){ output_b(mekatronik[w]); output_a(mekatronik[w]); output_d(255); output_c(255); delay_ms(1); } } //------------------------- if((kesme>520)&&(kesme<560)){//turkuaz mekatronik w=0; for (w=0;w<58;w++){ output_b(0); output_a(0); output_d(mekatronik[w]); output_c(mekatronik[w]); delay_ms(1); } } //----------------TÜRK BAYRAĞI if((kesme>560)&&(kesme<620)){ w=0; for (w=0;w<21;w++){ output_b(0); output_a(0); output_d(ayyildiz[w]); output_c(ayyildiz[w]); delay_ms(1); } } //-----------------korhan uslu if((kesme>620)&&(kesme<680)){ w=0; for (w=0;w<36;w++){ output_b(korhan[w]); output_a(korhan[w]); output_d(255); output_c(255); delay_ms(1); } w=0; for (w=0;w<24;w++){ output_b(uslu[w]); output_a(uslu[w]); output_d(uslu[w]); output_c(255); delay_ms(1); } } //------------------ } void main ( ) { setup_psp(PSP_DISABLED); // PSP birimi devre dışı setup_spi(SPI_SS_DISABLED); // SPI birimi devre dışı setup_timer_1(T1_DISABLED); // T1 zamanlayıcısı devre dışı setup_timer_2(T2_DISABLED,0,1); // T2 zamanlayıcısı devre dışı setup_adc_ports(NO_ANALOGS); // ANALOG giriş yok setup_adc(ADC_OFF); // ADC birimi devre dışı setup_CCP1(CCP_OFF); // CCP1 birimi devre dışı setup_CCP2(CCP_OFF); // CCP2 birimi devre dışı set_tris_b(0x01); //B0 pini giriş,diğer uçlar çıkış set_tris_c(0x00); //c portu çıkış set_tris_d(0x00); //d portu çıkış set_tris_a(0x00); //a portu çıkış output_b(0x00); // B portu çıkışı ilk anda sıfırlanıyor ext_int_edge(H_TO_L); // INT_EXT kesmesinin düşen kenarda aktif olacağını belirtir enable_interrupts(INT_EXT); // INT_EXT kesmesini aktif yapar enable_interrupts(GLOBAL); // Aktif edilen kesmelere izin ver b=45; c=39; d=33; r1=(0b00111001); g1=(0b11100001); b1=(0b10001101); output_b(254); output_d(255); output_c(255); output_a(1); basla: if(a==1){ //kesme gelince a=1 olur ve göster fonksiyonuna gidilir goster(); a=0;//fonksiyondan dönünca a=0 olur ve tekrar kesme gelmesi beklenir. i=0; } goto basla; }
RGB Led havada yazı projesine ait proteus simülasyon şema, visual basic led program ve ccs c kod dosyaları;



