Haberler:

Forum kuralları güncellendi LÜTFEN  okuyunuz:  https://bit.ly/2IjR3ME

Ana Menü

Buton ile lcd ye yazı yazma

Başlatan bbs2006, 27 Mart 2017, 23:19:20

bbs2006

Merhaba
16f84 mikrodenetleyicisinin b portuna bağlı lcd var. butona bastığım zaman lcd de istedigim yazıyı görmek istiyorum. Bir türlü olmadı. nasıl bir yazılım yapmam lazım

erdogan_82

Nasıl bir yazı olcak bu. tek tek harfmi yazdırcaksın yoksa kelime mi. Amaç ne olacak mesela

vitruvius

#2
Butona basınca led yakabiliyor musunuz?

Lcd'ye herhangi bir yazı yazabiliyor musunuz?

bbs2006

Lcd ye yazı yapabiliyoruz. Çalışıyor. Led yapabiliyoruz. Lcd bağlandıgında Led de yanmıyor ve Lcd de yazı çıkmıyor

vitruvius

Devre şemanı ve kodunu görebilir miyiz?

Butona bastığın zaman led yakmak yerine LCD'ye yazı yazdıran fonksiyonunu çağıracaksın. Debounce olayına da dikkat etmek lazım tabi.

bbs2006

/*-------------------------------------------------------------------
 PIC16F84 İLE  LCD'ye YAZI YAZMA  UYGULAMASI
 --------------------------------------------------------------------
*/
#include <16F84.h>
#fuses XT,NOWDT,NOPROTECT
#use delay(clock=4000000)
#define use_portb_lcd TRUE  //Lcd B potuna bağlandığından dolayı kullanılır.
#include <LCD.C>            //Lcdlerle iletişim için kullanılan bir dosya. 
/*-------------------------------------------------------------------
 ANA PROGRAM BAŞLANGICI
 --------------------------------------------------------------------
*/
void main()
{ 
while(1){
       if(input(pin_A0==0)){
       lcd_init();              //LCD'yi hazır duruma getirir.
       lcd_putc("ENDUSTRiYEL"); //LCD'ye "Endüstriyel" kelimesi gönderiliyor.
       lcd_gotoxy(1,2);         //Otomasyon keimesini LCD'nin 2. satırın 
                                //1.sutunundan itibaren  yazar.
       delay_ms(100);           //100 msn'lik gecikme yapılıyor.
       lcd_putc("OTOMASYON");  //LCD'ye "Otomasyon" kelimesi gönderiliyor.
}}}

vitruvius

Öncelikle lcd'yi bir kere init etmek gerekli ve yeterlidir. Butona her basıldığında init etmeyin.

If sorgunuzda hata var. "pin_A0", "0"a mı eşit kıyası var. Eşittir işaretini yanlış yere koymuşsunuz yani.

Üçüncü olarak debounce nedir ve yazılımsal olarak CCS C'de debounce nasıl yapılır onu araştırın.

Ayrıca port giriş/çıkış tanımlamalarını da yapmamışsınız.

Varsa kullanılmayan fonksiyonları (ADC, CCP v.s.) de kapatın.

bbs2006

kıyaslamada nerde hata oldugunu anlamadım.
if(!input(pin_a0))   komutu şeklinde yazdık hata nerede anlayamadım.

bbs2006

Basit bir program yazabilir misiniz.  Merak ettim.

vitruvius

Eşitliğin bir soluna bir de sağına bak. Sen çağırdığın fonksiyonun sonucuna bakmak istiyorsun ama kodun o haliyle bakmıyorsun. Parantezleri takip et.

Bast bir program yazamam zira istediğin şey zaten basit bir şey. Bunun altından senin kalkman lazım yoksa böyle daha çok konu açarsın. Önemli olan bir şey öğrenmen. Zaten CCS C de kullanmıyorum.

dursuncemal

#10
hacam lcd_init fonksiyonunu sonsuz donguye girmeden once yaparsaniz daha iyi olur. if sorgusunu sormadan ekrana yazı yazabiliyor iseniz, a portunun statusunu giris olarak ayarlayıp , ilgili pin'i pull up yaparsaniz olur.
:=

mehmet

#11
A0 pini de pull-up yapılmalı...

while(1)
{
       if(input(pin_A0==0))
       {
            delay_ms(20);  //debounce gecikmesi
            if(input(pin_A0==0)) // ve bu gecikme sonrasında hala buton basılı mı?
            {
                   .....
                   .....
            }
       }
}

Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
---------------------------------------------
http://www.mehmetbilgi.net.tr

bbs2006

Cevaplar için teşekkür ederim.  Buton kontrolu olmadan zaten yazdırma işlemi yapıyorum. Ao pininde pull up yapıyorum. sadece gecikme ve tekrar basıllıp basılmadığını sorgulamamıştım.

tacettin

portlara ait tris ayarlarını göremedim. mainden sonra
void main()
{ 
set_tris_a(0x01);
set_tris_b(0x00);

while(1)
{
.
.
.
.
.


}


ekleyebilir misin?

bbs2006