Bilgisayar kontrollü kayan yazı sıcaklık nem tarih saat

| Mayıs 30, 2023 Tarihinde güncellendi
Bilgisayar kontrollü kayan yazı sıcaklık nem tarih saat

Hazırlayan: Atila ULUDAĞ – Bilgisayar kontrollü kayan yazı uygulaması PIC18F452 SHT11 DS1302 , MAX485 74HC595 (satır tarama) entegreleri üzerine kurulu kontrol için hazırlanmış bilgisayar yazılımı kaynak Visual Basic kodları ve c dili ile hazırlanmış PIC yazılımı var.

Kayan yazı devresi bilgisayar üzerinden yazı gönderebiliyor tarih, saat, sıcaklık, neb bilgisini gösteriyor

Uygulamanın çalışıp çalışmadığını bilmiyorum fakat kaynak kodların verilmiş olması farklı projelerde faydalı olabilir

İsis simülasyon şeması;

kayan-yazi-devresi-dijital-pano-led-tabela

C yazılımı;


////////////////////////////////////////////////////////////////////////////
////           BİLGİSAYAR KONTROLLÜ KAYAN YAZI UYGULAMASI               ////
////                    (SATIR TARAMA 74HC595)                          ////
////                 SICAKLIK , NEM , SAAT , TARİH                      ////
////                   SHT11 , DS1302 , MAX 485                         ////
////////////////////////////////////////////////////////////////////////////
////                   16 / 04 / 2008  ÇARŞAMBA                         ////
////////////////////////////////////////////////////////////////////////////
////                          ATİLA ULUDAG                              ////
////                                                                    ////
////                  ELEKTRİK-ELEKTRONİK MÜHENDİSİ                     ////
////////////////////////////////////////////////////////////////////////////

#include <18F452.h>
#include <string.h>
#FUSES NOWDT,WDT128,XT,NOPROTECT,NOOSCSEN,NOBROWNOUT,BORV20,NOPUT,STVREN,NODEBUG,NOLVP,NOWRT,NOWRTD,NOWRTB,NOWRTC,NOCPD,NOCPB,NOEBTR,NOEBTRB
#use delay(clock=40000000)
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)
#include <SHT75.c>
#include <DS1302.c>

#define clock      pin_a0  
#define latch      pin_a1  
#define ds1        pin_a2  

#use fast_io(a)
#use fast_io(b)
#use standard_io(c)
#use fast_io(d)
#use fast_io(e)


unsigned int16 adres_sec;
char mesaj_1[55],sutun_1[320]
    ,isi[17]="rH>%00.0 +00.0`C"
    ,saat[17]=" *  00:00:00  * "
    ,tarih[17]=" 00/00/2008 CUM ";
unsigned int yinele,data;
unsigned int karakter[]={0x3F,0x48,0x48,0x48,0x3F,0x00  //A
                        ,0x7f,0x49,0x49,0x49,0x36,0x00  //B
                        ,0x3e,0x41,0x41,0x41,0x22,0x00  //C
                        ,0x7f,0x41,0x41,0x41,0x3e,0x00  //D
                        ,0x7f,0x49,0x49,0x49,0x41,0x00  //E
                        ,0x7f,0x48,0x48,0x48,0x40,0x00  //F
                        ,0x3E,0x41,0x49,0x49,0x2E,0x00  //G
                        ,0x7F,0x08,0x08,0x08,0x7F,0x00  //H
                        ,0x41,0x7F,0x41,0x00            //I
                        ,0x11,0x5F,0x11,0x00            //İ
                        ,0x02,0x01,0x41,0x7e,0x40,0x00  //J
                        ,0x7f,0x08,0x14,0x22,0x41,0x00  //K
                        ,0x7f,0x01,0x01,0x01,0x01,0x00  //L
                        ,0x7f,0x20,0x18,0x20,0x7F,0x00  //M
                        ,0x7F,0x10,0x08,0x04,0x7F,0x00  //N
                        ,0x3E,0x41,0x41,0x41,0x3E,0x00  //O
                        ,0x7f,0x48,0x48,0x48,0x30,0x00  //P
                        ,0x3e,0x41,0x45,0x42,0x3d,0x00  //Q
                        ,0x7f,0x48,0x4C,0x4a,0x31,0x00  //R
                        ,0x32,0x49,0x49,0x49,0x26,0x00  //S
                        ,0x40,0x40,0x7F,0x40,0x40,0x00  //T
                        ,0x7E,0x01,0x01,0x01,0x7E,0x00  //U
                        ,0x1E,0x41,0x01,0x41,0x1E,0x00  //Ü
                        ,0x7C,0x02,0x01,0x02,0x7C,0x00  //V
                        ,0x7E,0x01,0x0E,0x01,0x7E,0x00  //W
                        ,0x63,0x14,0x08,0x14,0x63,0x00  //X
                        ,0x70,0x08,0x07,0x08,0x70,0x00  //Y
                        ,0x43,0x45,0x49,0x51,0x61,0x00  //Z
                        ,0x00,0x00,0x00,0x00,0x00,0x00  //Space
                        ,0x3E,0x45,0x49,0x51,0x3E,0x00  //0
                        ,0x21,0x7F,0x01,0x00            //1
                        ,0x21,0x43,0x45,0x49,0x31,0x00  //2    
                        ,0x42,0x41,0x51,0x69,0x46,0x00  //3
                        ,0x0c,0x14,0x24,0x7f,0x04,0x00  //4
                        ,0x72,0x51,0x51,0x51,0x4e,0x00  //5
                        ,0x1e,0x29,0x49,0x49,0x06,0x00  //6
                        ,0x40,0x47,0x48,0x50,0x60,0x00  //7
                        ,0x36,0x49,0x49,0x49,0x36,0x00  //8
                        ,0x30,0x49,0x49,0x4a,0x3c,0x00  //9
                        ,0x1E,0x61,0x21,0x61,0x1E,0x00  //Ö
                        ,0x03,0x03,0x00                 //.
                        ,0x1B,0x1B,0x00                 //:
                        ,0x60,0x90,0x90,0x60,0x00       //'
                        ,0x09,0x09,0x09,0x09,0x09,0X00  //=
                        ,0x08,0x08,0x08,0x08,0X08,0x00  //-
                        ,0x01,0x01,0x01,0x01,0X01,0x00  //_
                        ,0x04,0x04,0x1f,0x04,0x04,0x00  //+
                        ,0x60,0x92,0x94,0x68,0x16,0x29  //%
                        ,0x49,0x06,0x00                 //%
                        ,0x11,0x0f,0x11,0x10,0x08,0x00  //r
                        ,0x08,0x08,0x08,0x2a,0x1c,0x08,0x00  //>
                        ,0x1c,0x22,0x41,0x59,0x49,0x2a,0x1c,0x00//*
                        ,0x03,0x0c,0x30,0xc0,0x00};     ///

void data_sec()
   {
   switch (data)
   {
   case 'A':
   adres_sec=0 ; yinele=5 ; break ;
   case 'B':
   adres_sec=6 ; yinele=5 ; break;
   case 'C':
   adres_sec=12 ; yinele=5 ; break;
   case 'D':
   adres_sec=18 ; yinele=5 ; break;
   case 'E':
   adres_sec=24 ; yinele=5 ; break;
   case 'F':
   adres_sec=30 ; yinele=5 ; break;
   case 'G':
   adres_sec=36 ; yinele=5 ; break;
   case 'H':
   adres_sec=42 ; yinele=5 ; break;
   case 'I':
   adres_sec=48 ; yinele=3 ; break;
   case 'İ':
   adres_sec=52 ; yinele=3 ; break;
   case 'J':
   adres_sec=56 ; yinele=5 ; break;
   case 'K':
   adres_sec=62 ; yinele=5 ; break;
   case 'L':
   adres_sec=68 ; yinele=5 ; break;
   case 'M':
   adres_sec=74 ; yinele=5 ; break;
   case 'N':
   adres_sec=80 ; yinele=5 ; break;
   case 'O':
   adres_sec=86 ; yinele=5 ; break;
   case 'P':
   adres_sec=92 ; yinele=5 ; break;
   case 'Q':
   adres_sec=98 ; yinele=5 ; break;
   case 'R':
   adres_sec=104 ; yinele=5 ; break;
   case 'S':
   adres_sec=110 ; yinele=5 ; break;
   case 'T':
   adres_sec=116 ; yinele=5 ; break;
   case 'U':
   adres_sec=122 ; yinele=5 ; break;
   case 'Ü':
   adres_sec=128 ; yinele=5 ; break;
   case 'V':
   adres_sec=134 ; yinele=5 ; break;
   case 'W':
   adres_sec=140 ; yinele=5 ; break;
   case 'X':
   adres_sec=146 ; yinele=5 ; break;
   case 'Y':
   adres_sec=152 ; yinele=5 ; break;
   case 'Z':
   adres_sec=158 ; yinele=5 ; break;
   case ' ':
   adres_sec=164 ; yinele=5 ; break;
   case '0':
   adres_sec=170 ; yinele=5 ; break;
   case '1':
   adres_sec=176 ; yinele=3 ; break;
   case '2':
   adres_sec=180 ; yinele=5 ; break;
   case '3':
   adres_sec=186 ; yinele=5 ; break;
   case '4':
   adres_sec=192 ; yinele=5 ; break;
   case '5':
   adres_sec=198 ; yinele=5 ; break;
   case '6':
   adres_sec=204 ; yinele=5 ; break;
   case '7':
   adres_sec=210 ; yinele=5 ; break;
   case '8':
   adres_sec=216 ; yinele=5 ; break;
   case '9':
   adres_sec=222 ; yinele=5 ; break;
   case 'Ö':
   adres_sec=228 ; yinele=5 ; break;
   case '.':
   adres_sec=234 ; yinele=2 ; break;
   case ':':
   adres_sec=237 ; yinele=2 ; break;
   case '`':
   adres_sec=240 ; yinele=4 ; break;
   case '=':
   adres_sec=245 ; yinele=5 ; break;
   case '-':
   adres_sec=251 ; yinele=5 ; break;
   case '_':
   adres_sec=257 ; yinele=5 ; break;
   case '+':
   adres_sec=263 ; yinele=5 ; break;
   case '%':
   adres_sec=269 ; yinele=8 ; break;
   case 'r':
   adres_sec=278 ; yinele=5 ; break;
   case '>':
   adres_sec=284 ; yinele=6 ; break;
   case '*':
   adres_sec=291 ; yinele=7 ; break;
   case '/':
   adres_sec=299 ; yinele=4 ; break;
   default:
   adres_sec=164 ; yinele=5 ;
   break;
   }
   }
   
/**************SÜTUN BİLGİSİ**************/
void sutun_reg(char str[],int16 b)       //sutun_reg() alt programı. 
{
 unsigned int j=0,i=0;                   //
 unsigned int16 y=0,stn_index;           //
 for(i=0;i<strlen(str);i++)              // 
   {                                     // 
   data=str[i];                          // 
   data_sec();                           // 
   for(j=0;j<=yinele;j++,adres_sec++,y++)//     
      sutun_1[y]=karakter[adres_sec];    //  
   }                                     // 
 for(stn_index=y;stn_index<b;stn_index++)// 
    sutun_1[stn_index]=0;                // 
 y=0;                                    // 
}                                        // 

/**********MATRİSLERE KARAKTER GÖNDER*******/
void ekran_yaz(int tekrar)
{
 int s=0,i=0,j=0;
 for(j=0;j<tekrar;j++)
  {
  for(s=0;s<8;s++)
   {
   for(i=0;i<96;i++)
    {
     output_bit(ds1,bit_test(sutun_1[i],s));
     output_high(clock);
     delay_us(1);
     output_low(clock);
    }
    output_b(0x00); 
    output_high(latch);
    delay_us(1);
    output_low(latch);
    output_b(s+1);
   }
  }
}

/********YAZIYI KAYDIR*******/
void efekt_1(int16 kay , int mod)
{
 int reg_0=0;
 int16 n=0,k=0;
 for(n=0;n<kay;n++)
  {
   ekran_yaz(10);
   disable_interrupts(INT_RDA);
   switch (mod)
    {
    case 0:
      reg_0=sutun_1[0];
      for(k=0;k<(kay-1);k++)
         sutun_1[k]=sutun_1[k+1];
      sutun_1[kay-1]=reg_0;
      break;
    case 1:
      for(k=0;k<(kay-1);k++)
         sutun_1[k]=sutun_1[k+1];
      sutun_1[kay-1]=0;
      break;
    default:
      break;
    }
   enable_interrupts(INT_RDA);
  }
}

/********SICAKLIK-NEM HESABI************/
void isi_nem()
{
 signed int16 t=0;
 unsigned int16 rH=0;
 unsigned int t1;
 float temp=0,truehumid=0;
 
 sht_rd (temp, truehumid);
 t=temp*10 ; rH=truehumid*10;
 if(t<0){
  t=~t+1 ; isi[9]='-' ;}
 else
  isi[9]='+';
 
 if(t<100)
  {
  t1=t%10 ; isi[13]=48+t1;
  t/=10   ; isi[11]=48+t ;
  isi[10]=' ';
  }
 if((t>=100) & (t<1000))
  {
  t1=t%10 ; isi[13]=48+t1;
  t/=10 ; t1=t%10 ; isi[11]=48+t1;
  t/=10 ; isi[10]=48+t;
  }
  
 if(rH<100)
  {
  t1=rH%10 ; isi[7]=48+t1;
  rH/=10   ; isi[5]=48+rH ;
  isi[4]=' ';
  }
 if((rH>=100) & (rH<1000))
  {
  t1=rH%10 ; isi[7]=48+t1;
  rH/=10 ; t1=rH%10 ; isi[5]=48+t1;
  rH/=10 ; isi[4]=48+rH;
  } 
 sutun_reg(isi,96);

/*********İNTEGER TO STRING************/
void int_to_str(char term[] , int value , int str_pos1 , int str_pos2)
{
 int info=0;
 info=value%10 ; term[str_pos2]=48+info;
 value/=10  ; term[str_pos1]=48+value;
}


/*********SAAT-TARİH BİLGİSİ OKUMA***********/
void saat_()
{
 byte sn,dk,hr;
 rtc_get_time(hr,dk,sn);
 
 int_to_str(saat,hr,4,5);
 int_to_str(saat,dk,7,8);
 int_to_str(saat,sn,10,11);
 
 sutun_reg(saat,96);
}
void tarih_()
{
 byte gun,ay,yil,haftanin_gunu;
 rtc_get_date(gun,ay,yil,haftanin_gunu);
 switch(haftanin_gunu)
 {
   case 1: tarih[12]='P';tarih[13]='A';tarih[14]='Z';break;
   case 2: tarih[12]='P';tarih[13]='Z';tarih[14]='T';break;
   case 3: tarih[12]='S';tarih[13]='A';tarih[14]='L';break;
   case 4: tarih[12]='C';tarih[13]='R';tarih[14]='S';break;
   case 5: tarih[12]='P';tarih[13]='E';tarih[14]='R';break;
   case 6: tarih[12]='C';tarih[13]='U';tarih[14]='M';break;
   case 7: tarih[12]='C';tarih[13]='T';tarih[14]='S';break;  
 }
 int_to_str(tarih,gun,1,2);
 int_to_str(tarih,ay,4,5);
 int_to_str(tarih,yil,9,10);
 
 sutun_reg(tarih,96);

}

/*********KESME ALT PROGRAMI*************/
#int_RDA                        //rs232'den bilgi geliyor kesmesi.
void  RDA_isr(void)             // 
{
int msj_index=0;                //
disable_interrupts(INT_RDA);    //rs232 bilgi giriş kesmesi pasif. 
output_b(0x00);

/***********1'İNCİ SATIR BİLGİSİ*****************/
   gets(mesaj_1);               //klavyeden girilen string ifade mesaj_1[]  
   printf("%s"mesaj_1);
for(msj_index=strlen(mesaj_1);msj_index<55;msj_index++)//dizisine yerleştiriliyor. yeni ifadenin 
   mesaj_1[msj_index]=0;                      //haricindeki dizi elemanları temizleniyor. 
for(msj_index=0;msj_index<55;msj_index++)     //mesaj_1[]dizisi dahili eeproma 
   write_eeprom(msj_index,mesaj_1[msj_index]);//yazılıyor. 
/*----------------------------------------------------------------------------*/
//sutun_reg(mesaj_1,320);        //sutun_reg() alt programını çağır
enable_interrupts(INT_RDA);     //rs232 bilgi giriş kesmesi aktif 
}                               //



/*                               ANA PROGRAM                                  */
void main()
{
int i=0;

/*_____PORT GİRİŞ-ÇIKIŞ İŞLEMLERİ_______*/
set_tris_a(0x00) ; set_tris_b(0x00) ;//pin_c7(RX) giriş,giğer  
set_tris_d(0x00) ; set_tris_e(0x00) ;//pinler çıkış
output_a(0x00)   ; output_b(0x00)   ;//bütün çıkışları 
output_d(0x00)   ; output_e(0x00)   ;//temizle
/*----------------------------------------------------------------*/
setup_adc_ports(NO_ANALOGS);           //adc pinleri digital
setup_adc(ADC_OFF);                    //adc kapalı
setup_psp(PSP_DISABLED);               //psp kapalı
setup_spi(SPI_SS_DISABLED);            //spı kapalı
setup_wdt(WDT_OFF);                    //wdt kapalı
setup_timer_0(RTCC_INTERNAL);          //timer0 dahili kaynak
setup_timer_1(T1_DISABLED);            //timer1 kapalı
setup_timer_2(T2_DISABLED,0,1);        //timer2 kapalı
setup_timer_3(T3_DISABLED|T3_DIV_BY_1);//timer3 kapalı
/*------------------------------------------------------------------*/
enable_interrupts(INT_RDA);            //rs232 bilgi giriş kesmesi aktif
enable_interrupts(GLOBAL);             //tüm kesmelere izin ver
/*-------------------------------------------------------------------*/

rtc_init();
while(true)
{
/*********EEPROM'DAN SATIR BİLGİLERİNİ OKUMA VE SUTUN REGISTER'INA YAZMA*******/
 for(i=0;i<55;i++)             //dahili eepromdan 55 karakter oku
    mesaj_1[i]=read_eeprom(i); //mesaj_1[] dizisine kopyala
 sutun_reg(mesaj_1,320);       //sutun_reg() alt programını çağır
                             

/******MESAJ RUTİNİ********  **/
 ekran_yaz(100);
 efekt_1(320,1);
 

/********SICAKLIK RUTİNİ*******/
 isi_nem();
 ekran_yaz(255);
 //efekt_1(96,0);
 //ekran_yaz(255);

/********SAAT-TARİH RUTİNİ*****/
for(i=0;i<100;i++)
{
 saat_();
 ekran_yaz(10);
 //efekt_1(96,0);
 //ekran_yaz(255);
}
 tarih_();
 ekran_yaz(255);
 //efekt_1(96,0);
 //ekran_yaz(255);
}
}
/*____________SON_____________*/

Kodlar, proteus simülasyon, Visual Basic kodları;

bilgisayar-kontrollu-kayan-yazi-sicaklik-nem-tarih-saat

Şifre-Pass: 320volt.com

Yayım tarihi: 2010/02/23 Etiketler: , , , , , , , ,



11 Yorum “Bilgisayar kontrollü kayan yazı sıcaklık nem tarih saat

  1. ramazanramazan

    arkadaşım emeğine sağlık gerçekten çok güzel bir devre. uzun zamandan beri ardığım bi devre bu. çok kişinin işine yaracağına eminim!

    CEVAPLA
  2. EFKANEFKAN

    Arkadaşım proje çok güzel .üzerinde kullanılcak parçaları şemaya bakarak kendimiz çıkarcaz sanırım.

    Ama şunu söyleyim yeni başlayanlar için parça listesinin de verilmesini daha uygun görüyorum.

    CEVAPLA
  3. gevvgevv Yazar

    @efkan

    bende bir zamanlar yeni başlayanlardadım eğer şemadan malzeme listesi çıkartamasaydım elektroniği ilerletemez başka işlere bakardım

    yeni başlamak ile ilgisi yok biraz üşengeçlik galiba 🙂 anlıyorum ilk başlarda zor geliyor ama malzemelerin listesini çıkartırken ister istemez şemayı inceliyoruz işte bu bile farkında olmadan gelişimde büyük katkı sağlıyor

    ufak bir öneri; kafanız karışıyorsa yazdığınız malzemenin üzerine bir çizik atarsınız

    iyi çalışmalar dilerim

    CEVAPLA
  4. osmanbazosmanbaz

    Arkadaşlar ben 8×8 dor matrix displayin katot sütunlu mu yoksa anot sütunlu mu olduğunu soracaktım.
    bir diğer konuda mesaj panosu exe proğramı port hatası veriyor.

    Yardımcı olacak arkadaşlara şimdiden teşekkürler.
    devreyi çalıştıran arkadaşımız varmı ?

    CEVAPLA
  5. hüseyin05hüseyin05

    Arkadaşlar herkeze kolay gelsin bu projede ilk sorun osilatör ayarı ile ilgili’dir. XT osc yazılmış konfigürasyon ayarlarına, ama 40000000 değeri 40 mhz yapıyor bu değer 4000000 yani 4 mhz olarak ayarlanacak yani yeniden derlenmesi gerekli devreyi kurdum ama donanımsal olarak çalıştıramış’tım. İşi bilen kişiler el atarsa sorun düzelir. Bilgisayar ortamında çalışıyor ama gerçek donanımsal kurulumunda çalışmıyor.

    CEVAPLA
  6. ömerömer

    proje güzel ancak devre şeması ve elemanlar okunmuyor nasıl yapacağız.devre şemasını nereden leden eldeceğiz yardımcı olursanız memnun olurum. herkeze başarılar .

    CEVAPLA
  7. gökhangökhan

    arkadaşlar elinde bunu ares çizimi olan varsa rica üzerine paylaşa bilirmi çok lazımda

    CEVAPLA
  8. tamircihasantamircihasan

    eğer şemadan malzeme listesi çıkarmak zor geliyorsa şemanın çıktısını alın malzemeciye gidin aldığınız malzemenin üzerini çizin. eğer bunuda yapamıyorsanız bu yazımı okumaya devam edin: devrenin satırlar dolusu komutlarını adam yazmış buraya açık olarak koymuş sizde burda malzeme listesi çıkarmaktan acizsiniz. ayıp diye birşey var emeğe bari saygı gösterin…

    CEVAPLA
  9. rumpirumpi

    Bu konu ile ilgili en son yorum yapılmamış benim de projem ve bu konuda bir bilgi kirliliği var internette ama sanırım Atilla’nın paylaştığı çalışıyor . Pratikte deneyen kimse varsa lütfen benimle iletişime geçsin,şu anda yapmaya çalışıyorum devreyi
    Örneğin çalışma rutini nasıldır , tarih mi önce vs. gibi kodlardan zar zor anlayan yeniler için biraz yardım ederseniz sevinirim.

    CEVAPLA
  10. AyhanAyhan

    Selamlar Sn. yetkili, proje’yi proteus’da çalıştırdım, Sormak istedğim, PC ile haberleşmede, yazı değişimi için hangi program kullanılmalı, termina ve benzer olanlar mı (haberleşme hızına senkron olana kadar boud’u düşürürek) mi yapmalıyız yoksa başka bir program mı vardır.

    CEVAPLA
    1. gevvgevv Yazar

      Selam, devre için Visual Basic ile yazılan program var program üzerinden yazıyı değiştirebilirsiniz.

      CEVAPLA

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir