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
Nasıl bir yazı olcak bu. tek tek harfmi yazdırcaksın yoksa kelime mi. Amaç ne olacak mesela
Butona basınca led yakabiliyor musunuz?
Lcd'ye herhangi bir yazı yazabiliyor musunuz?
Lcd ye yazı yapabiliyoruz. Çalışıyor. Led yapabiliyoruz. Lcd bağlandıgında Led de yanmıyor ve Lcd de yazı çıkmıyor
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.
/*-------------------------------------------------------------------
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.
}}}
Ö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.
kıyaslamada nerde hata oldugunu anlamadım.
if(!input(pin_a0)) komutu şeklinde yazdık hata nerede anlayamadım.
Basit bir program yazabilir misiniz. Merak ettim.
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.
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.
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ı?
{
.....
.....
}
}
}
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.
portlara ait tris ayarlarını göremedim. mainden sonra
void main()
{
set_tris_a(0x01);
set_tris_b(0x00);
while(1)
{
.
.
.
.
.
}
ekleyebilir misin?
Tamam
merhaba
Gerekli düzeltmeleri yaptıgım halde program çalışmadı.
#include<16f84A.h>
#fuses xt, nowdt, noprotect
#use delay(clock=4000000)
#use fast_io(a)
#use fast_io(b)
#define use_portb_lcd TRUE
#include <LCD420.C>
void main(){
set_tris_b(0x00);
set_tris_a(0x01);
lcd_init();
while(1)
{
if(input(pin_A0==0))
{
delay_ms(50); //debounce gecikmesi
if(input(pin_A0==0)) // ve bu gecikme sonrasında hala buton basılı mı?
{
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.
}
}
} }
devre şeması
Gerekli düzenlemeleri yapmamışsın çünkü hala. Devre şemanı da eklemeyi unutmuşsun bu arada.
Buradan (https://www.ccsinfo.com/downloads/ccs_c_manual.pdf) kullandığın input() fonksiyonu nasıl çalışıyor, ne değer döndürüyor bir oku. Sonra fonksiyonun döndürdüğü bu değere nasıl bakacaksın bir düşün.
vitruvius un dediği gibi input fonksiyonu input(Pin_A0)==x şeklinde olmalı, set_tris fonksiyonlarından sonra output_b(0x00); eklenebilir, ve Pin_A0 pull-up yapılabilir duruma göre.
merhaba
en sonunda lcd ekrana yazdırma işlemini başardım. yardım eden arkadaşlara teşekkür ederim.