Merhabalar! Projem yarimda kaldi c dili eksikligimden dolayi bitiremiyorum yardiminiza ihtiyacim var. Resimde goruldugu gibi keypadta girilen sayi PORTB birinci 7-segmente gonderiliyor.
Amacim ise ilk girilen sayi birinci 7-seg ikinci girilen sayi ikinci 7-segmente yazmak yani 99'a kadar istedigim sayi girmek.
(http://img197.imageshack.us/img197/2390/16f877.JPG)
C kod:
/******************************************************
PIC16F877 ile Tuþ Takýmý Uygulamasý-1
PIC PROG/DEKA : Port B jumper'ý LED konumunda olmalý
*******************************************************/
#include <16f877.h> // Kullanýlacak denetleyicinin baþlýk dosyasý tanýtýlýyor.
// Denetleyici konfigürasyon ayarlarý
#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD
#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(d) //Port yönlendirme komutlarý C portu için geçerli
#byte portb=0x06 // B portu "tus" ismine eþitleniyor.
#define sut1 pin_d0 // sut1 ifadesi pin_d0 ifadesine eþitleniyor
#define sut2 pin_d1 // sut2 ifadesi pin_d1 ifadesine eþitleniyor
#define sut3 pin_d2 // sut3 ifadesi pin_d2 ifadesine eþitleniyor
#define sut4 pin_d3 // sut3 ifadesi pin_d2 ifadesine eþitleniyor
#define sat1 pin_d4 // sat1 ifadesi pin_d4 ifadesine eþitleniyor
#define sat2 pin_d5 // sat2 ifadesi pin_d5 ifadesine eþitleniyor
#define sat3 pin_d6 // sat3 ifadesi pin_d6 ifadesine eþitleniyor
#define sat4 pin_d7 // sat4 ifadesi pin_d7 ifadesine eþitleniyor
char tus=0; // karakter tipinde deðiþken tanýmlanýyor
//*********** Keypad Tarama Fonksiyonu *********
char keypad_oku() // Fonksiyon ismi
{
output_d(0x00); // D portu çýkýþý sýfýrlanýyor
output_high(sat1); // 1. satýr lojik-1 yapýlýyor
if (input(sut1)) // 1. sütun okunuyor
{ delay_ms(20); tus=1; }
if (input(sut2)) // 2. sütun okunuyor
{ delay_ms(20); tus=2; }
if (input(sut3)) // 3. sütun okunuyor
{ delay_ms(20); tus=3; }
if (input(sut4)) // 4. sütun okunuyor
{ delay_ms(20); tus=0xA; }
output_low(sat1); // 1. satýr lojik-0 yapýlýyor
output_high(sat2); // 2. satýr lojik-1 yapýlýyor
if (input(sut1)) // 1. sütun okunuyor
{ delay_ms(20); tus=4; }
if (input(sut2)) // 2. sütun okunuyor
{ delay_ms(20); tus=5; }
if (input(sut3)) // 3. sütun okunuyor
{ delay_ms(20); tus=6; }
if (input(sut4)) // 4. sütun okunuyor
{ delay_ms(20); tus=0xB; }
output_low(sat2); // 2. satýr lojik-0 yapýlýyor
output_high(sat3); // 3. satýr lojik-1 yapýlýyor
if (input(sut1)) // 1. sütun okunuyor
{ delay_ms(20); tus=7; }
if (input(sut2)) // 2. sütun okunuyor
{ delay_ms(20); tus=8; }
if (input(sut3)) // 3. sütun okunuyor
{ delay_ms(20); tus=9; }
if (input(sut4)) // 4. sütun okunuyor
{delay_ms(20); tus=0x0C; }
output_low(sat3); // 3. satýr lojik-0 yapýlýyor
output_high(sat4); // 3. satýr lojik-1 yapýlýyor
if (input(sut1)) // 1. sütun okunuyor
{ delay_ms(20); tus=0xE; }
if (input(sut2)) // 2. sütun okunuyor
{ delay_ms(20); tus=0; }
if (input(sut3)) // 3. sütun okunuyor
{ delay_ms(20); tus=0xF; }
if (input(sut4)) // 4. sütun okunuyor
{delay_ms(20); tus=0xD; }
output_low(sat4); // 3. satýr lojik-0 yapýlýyor
return tus; // Fonksiyon "tus" deðeri ile geri döner
}
/********* ANA PROGRAM FONKSÝYONU********/
void main ( )
{
setup_psp(PSP_DISABLED); // PSP 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ýþý
set_tris_b(0x00); // B portu komple çýkýþ
set_tris_d(0x0F); // Yüksek deðerlikli 4 bit çýkýþ, düþük deðerlikli 4 bit giriþ
output_b(0x00); // Ýlk anda B portu çýkýþý sýfýrlanýyor
while(1) // Sonsuz döngü
{
portb=keypad_oku(); // Basýlan tuþ deðerini B portuna aktar
}
}
C dilinizde bir eksiklik yok. Bayağı yazmışsınız. Sadece programı devreye uyarlamak kalmış.
Program calisiyor fakat sadece PORTB calisiyor yani birinci 7-seg calisiyor.
PORTC devre disi duruyor bunu aktif hale nasil getirebilirim hangi komut eklemem lazim?
porgramda C portu için yönkendirme yapılmamış. Sadece B ve D portu için yönlendirme var. C'yi de eklerseniz sorunun altından kalkarsınız.
#use fast_io(b) //Port yönlendirme komutlarý B portu için geçerli
#use fast_io(d) //Port yönlendirme komutlarý C portu için geçerli
C portu için CCP modunu kapatmalısınız hata burası ... CCP modunu kapattığınızda sorununuz çözülecektir ...
İyi çalışmalar dilerim ..
Alıntı yapılan: subram - 07 Mayıs 2013, 14:53:44
porgramda C portu için yönkendirme yapılmamış. Sadece B ve D portu için yönlendirme var. C'yi de eklerseniz sorunun altından kalkarsınız.
Denedim ama olmadi, serhat1990'nin dedigi gibi bir sey daha var galiba yapilmasi gereken
Alıntı yapılan: serhat1990 - 07 Mayıs 2013, 15:00:30
C portu için CCP modunu kapatmalısınız hata burası ... CCP modunu kapattığınızda sorununuz çözülecektir ...
Tesekkur ederim hocam tam istedigim cevap aldim ama CCP'yi nasil kapatacagimi bilmiyorum nasil kapatayim onu
Alıntı yapılan: suleymanq - 07 Mayıs 2013, 15:20:57
Denedim ama olmadi, serhat1990'nin dedigi gibi bir sey daha var galiba yapilmasi gereken
Tesekkur ederim hocam tam istedigim cevap aldim ama CCP'yi nasil kapatacagimi bilmiyorum nasil kapatayim onu
use_fast_io komutu sorunu çözmez burada . CCP modülü devre dışı bırakılınca ve C portu çıkış yapılınca sorunlar düzelecektir ... Komut olarak aşağıdakileri deneyebilirsiniz .. CCS C ' de artık yazmıyorum unutmuş olabilirim ama aşağıdakiler işinizi çözer diye düşünüyorum ...
setup_CCP1(CCP_OFF);
setup_CCP2(CCP_OFF);
Ayrıca C portunun giriş çıkış durumunu ayarlamamışsın .
Onuda eklemen gerekiyor ...
set_tris_c=0x00;
Kodlarına yazdığım bölümleri ekle düzelecektir.
İyi çalışmalar dilerim .
Ekledim, bu sefer PORTC aktif fakat sayi cikmiyor ne yapayim:)
#include <16f877.h> // Kullanýlacak denetleyicinin baþlýk dosyasý tanýtýlýyor.
// Denetleyici konfigürasyon ayarlarý
#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD
#use delay (clock=4000000) // Gecikme fonksiyonu için kullanýlacak osilatör frekansý belirtiliyor.
#use fast_io(c) //Port yönlendirme komutlarý B portu için geçerli
#use fast_io(d) //Port yönlendirme komutlarý C portu için geçerli
#byte portc=0x06 // B portu "tus" ismine eþitleniyor.
#define sut1 pin_d0 // sut1 ifadesi pin_d0 ifadesine eþitleniyor
#define sut2 pin_d1 // sut2 ifadesi pin_d1 ifadesine eþitleniyor
#define sut3 pin_d2 // sut3 ifadesi pin_d2 ifadesine eþitleniyor
#define sut4 pin_d3 // sut3 ifadesi pin_d2 ifadesine eþitleniyor
#define sat1 pin_d4 // sat1 ifadesi pin_d4 ifadesine eþitleniyor
#define sat2 pin_d5 // sat2 ifadesi pin_d5 ifadesine eþitleniyor
#define sat3 pin_d6 // sat3 ifadesi pin_d6 ifadesine eþitleniyor
#define sat4 pin_d7 // sat4 ifadesi pin_d7 ifadesine eþitleniyor
char tus=0; // karakter tipinde deðiþken tanýmlanýyor
//*********** Keypad Tarama Fonksiyonu *********
char keypad_oku() // Fonksiyon ismi
{
output_d(0x00); // D portu çýkýþý sýfýrlanýyor
output_high(sat1); // 1. satýr lojik-1 yapýlýyor
if (input(sut1)) // 1. sütun okunuyor
{ delay_ms(20); tus=1; }
if (input(sut2)) // 2. sütun okunuyor
{ delay_ms(20); tus=2; }
if (input(sut3)) // 3. sütun okunuyor
{ delay_ms(20); tus=3; }
if (input(sut4)) // 4. sütun okunuyor
{ delay_ms(20); tus=0xA; }
output_low(sat1); // 1. satýr lojik-0 yapýlýyor
output_high(sat2); // 2. satýr lojik-1 yapýlýyor
if (input(sut1)) // 1. sütun okunuyor
{ delay_ms(20); tus=4; }
if (input(sut2)) // 2. sütun okunuyor
{ delay_ms(20); tus=5; }
if (input(sut3)) // 3. sütun okunuyor
{ delay_ms(20); tus=6; }
if (input(sut4)) // 4. sütun okunuyor
{ delay_ms(20); tus=0xB; }
output_low(sat2); // 2. satýr lojik-0 yapýlýyor
output_high(sat3); // 3. satýr lojik-1 yapýlýyor
if (input(sut1)) // 1. sütun okunuyor
{ delay_ms(20); tus=7; }
if (input(sut2)) // 2. sütun okunuyor
{ delay_ms(20); tus=8; }
if (input(sut3)) // 3. sütun okunuyor
{ delay_ms(20); tus=9; }
if (input(sut4)) // 4. sütun okunuyor
{delay_ms(20); tus=0x0C; }
output_low(sat3); // 3. satýr lojik-0 yapýlýyor
output_high(sat4); // 3. satýr lojik-1 yapýlýyor
if (input(sut1)) // 1. sütun okunuyor
{ delay_ms(20); tus=0xE; }
if (input(sut2)) // 2. sütun okunuyor
{ delay_ms(20); tus=0; }
if (input(sut3)) // 3. sütun okunuyor
{ delay_ms(20); tus=0xF; }
if (input(sut4)) // 4. sütun okunuyor
{delay_ms(20); tus=0xD; }
output_low(sat4); // 3. satýr lojik-0 yapýlýyor
return tus; // Fonksiyon "tus" deðeri ile geri döner
}
/********* ANA PROGRAM FONKSÝYONU********/
void main ( )
{
setup_psp(PSP_DISABLED); // PSP 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);
setup_CCP2(CCP_OFF);
set_tris_c(0x00); // B portu komple çýkýþ
set_tris_d(0x0F); // Yüksek deðerlikli 4 bit çýkýþ, düþük deðerlikli 4 bit giriþ
output_c(0x00); // Ýlk anda B portu çýkýþý sýfýrlanýyor
while(1) // Sonsuz döngü
{
portc=keypad_oku(); // Basýlan tuþ deðerini B portuna aktar
}
}
Porta değer atayınca istediğin çıkışı veriyor mu ? Kodlarına baktım şimdi birşey göremedim.
Hayir vermiyor. port aktif fakat deger cikmiyor
(http://img198.imageshack.us/img198/2290/111j.JPG)
#include <16f877.h> // Kullanýlacak denetleyicinin baþlýk dosyasý tanýtýlýyor.
// Denetleyici konfigürasyon ayarlarý
#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD
#use delay (clock=4000000) // Gecikme fonksiyonu için kullanýlacak osilatör frekansý belirtiliyor.
#use fast_io(c) //Port yönlendirme komutlarý B portu için geçerli
#use fast_io(d) //Port yönlendirme komutlarý C portu için geçerli
#byte portc=0x07 // C portu "tus" ismine eþitleniyor.
#define sut1 pin_d0 // sut1 ifadesi pin_d0 ifadesine eþitleniyor
#define sut2 pin_d1 // sut2 ifadesi pin_d1 ifadesine eþitleniyor
#define sut3 pin_d2 // sut3 ifadesi pin_d2 ifadesine eþitleniyor
#define sut4 pin_d3 // sut3 ifadesi pin_d2 ifadesine eþitleniyor
#define sat1 pin_d4 // sat1 ifadesi pin_d4 ifadesine eþitleniyor
#define sat2 pin_d5 // sat2 ifadesi pin_d5 ifadesine eþitleniyor
#define sat3 pin_d6 // sat3 ifadesi pin_d6 ifadesine eþitleniyor
#define sat4 pin_d7 // sat4 ifadesi pin_d7 ifadesine eþitleniyor
char tus=0; // karakter tipinde deðiþken tanýmlanýyor
//*********** Keypad Tarama Fonksiyonu *********
char keypad_oku() // Fonksiyon ismi
{
output_d(0x00); // D portu çýkýþý sýfýrlanýyor
output_high(sat1); // 1. satýr lojik-1 yapýlýyor
if (input(sut1)) // 1. sütun okunuyor
{ delay_ms(20); tus=1; }
if (input(sut2)) // 2. sütun okunuyor
{ delay_ms(20); tus=2; }
if (input(sut3)) // 3. sütun okunuyor
{ delay_ms(20); tus=3; }
if (input(sut4)) // 4. sütun okunuyor
{ delay_ms(20); tus=0xA; }
output_low(sat1); // 1. satýr lojik-0 yapýlýyor
output_high(sat2); // 2. satýr lojik-1 yapýlýyor
if (input(sut1)) // 1. sütun okunuyor
{ delay_ms(20); tus=4; }
if (input(sut2)) // 2. sütun okunuyor
{ delay_ms(20); tus=5; }
if (input(sut3)) // 3. sütun okunuyor
{ delay_ms(20); tus=6; }
if (input(sut4)) // 4. sütun okunuyor
{ delay_ms(20); tus=0xB; }
output_low(sat2); // 2. satýr lojik-0 yapýlýyor
output_high(sat3); // 3. satýr lojik-1 yapýlýyor
if (input(sut1)) // 1. sütun okunuyor
{ delay_ms(20); tus=7; }
if (input(sut2)) // 2. sütun okunuyor
{ delay_ms(20); tus=8; }
if (input(sut3)) // 3. sütun okunuyor
{ delay_ms(20); tus=9; }
if (input(sut4)) // 4. sütun okunuyor
{delay_ms(20); tus=0x0C; }
output_low(sat3); // 3. satýr lojik-0 yapýlýyor
output_high(sat4); // 3. satýr lojik-1 yapýlýyor
if (input(sut1)) // 1. sütun okunuyor
{ delay_ms(20); tus=0xE; }
if (input(sut2)) // 2. sütun okunuyor
{ delay_ms(20); tus=0; }
if (input(sut3)) // 3. sütun okunuyor
{ delay_ms(20); tus=0xF; }
if (input(sut4)) // 4. sütun okunuyor
{delay_ms(20); tus=0xD; }
output_low(sat4); // 3. satýr lojik-0 yapýlýyor
return tus; // Fonksiyon "tus" deðeri ile geri döner
}
/********* ANA PROGRAM FONKSÝYONU********/
void main ( )
{
setup_psp(PSP_DISABLED); // PSP 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);
setup_CCP2(CCP_OFF);
set_tris_c(0x00); // B portu komple çýkýþ
set_tris_d(0x0F); // Yüksek deðerlikli 4 bit çýkýþ, düþük deðerlikli 4 bit giriþ
output_c(0x00); // Ýlk anda B portu çýkýþý sýfýrlanýyor
while(1) // Sonsuz döngü
{
portc=keypad_oku(); // Basýlan tuþ deðerini B portuna aktar
}
}
Yukarıda yazdığımı denermisin ... B portu için ayarladığın bir yeri değiştirmeyi unutmuşsun ..
C portunun adresi 0x07H ;) kolay gelsin ...
İyi çalışmalar ...
Simdi oldu ya:) tesekkur ederim dostum
0x07 ne anlama geldigini bilmiyorum simdi ogrenecem
Alıntı yapılan: suleymanq - 07 Mayıs 2013, 16:54:04
Simdi oldu ya:) tesekkur ederim dostum
0x07 ne anlama geldigini bilmiyorum simdi ogrenecem
Ne demek iyi çalışmalar ...
Kod yazarken datasheet önünüzde kapalı olmasın tavsiyem :)
Datasheet'te "PIC16F876A/877A REGISTER FILE MAP" bölümünden anlayabilirsin.
Bu Yapılan değişikliklerle 1.mesajında istediğin şeyi yaptığına emin misin?
Alıntı yapılan: xoom - 07 Mayıs 2013, 18:05:34
Bu Yapılan değişikliklerle 1.mesajında istediğin şeyi yaptığına emin misin?
Hayir tam istedigimi yapamadim:) ama bir adim daha yaklastim. Simdi arada bir delay_ms() gecikme ile yada sirasiyla iki rakam girmek icin bir degisiklik kalmis bunu nasil yapabilirim mesela
#include <16f877.h> // Kullanýlacak denetleyicinin baþlýk dosyasý tanýtýlýyor.
// Denetleyici konfigürasyon ayarlarý
#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD
#use delay (clock=4000000) // Gecikme fonksiyonu için kullanýlacak osilatör frekansý belirtiliyor.
#use fast_io(b)
#use fast_io(c) //Port yönlendirme komutlarý B portu için geçerli
#use fast_io(d) //Port yönlendirme komutlarý C portu için geçerli
#byte portb=0x06
#byte portc=0x07 // C portu "tus" ismine eþitleniyor.
#define sut1 pin_d0 // sut1 ifadesi pin_d0 ifadesine eþitleniyor
#define sut2 pin_d1 // sut2 ifadesi pin_d1 ifadesine eþitleniyor
#define sut3 pin_d2 // sut3 ifadesi pin_d2 ifadesine eþitleniyor
#define sut4 pin_d3 // sut3 ifadesi pin_d2 ifadesine eþitleniyor
#define sat1 pin_d4 // sat1 ifadesi pin_d4 ifadesine eþitleniyor
#define sat2 pin_d5 // sat2 ifadesi pin_d5 ifadesine eþitleniyor
#define sat3 pin_d6 // sat3 ifadesi pin_d6 ifadesine eþitleniyor
#define sat4 pin_d7 // sat4 ifadesi pin_d7 ifadesine eþitleniyor
char tus=0; // karakter tipinde deðiþken tanýmlanýyor
char tus1=0;
//*********** Keypad Tarama Fonksiyonu *********
char keypad_oku() // Fonksiyon ismi
{
output_d(0x00); // D portu çýkýþý sýfýrlanýyor
output_high(sat1); // 1. satýr lojik-1 yapýlýyor
if (input(sut1)) // 1. sütun okunuyor
{ delay_ms(20); tus=1; }
if (input(sut2)) // 2. sütun okunuyor
{ delay_ms(20); tus=2; }
if (input(sut3)) // 3. sütun okunuyor
{ delay_ms(20); tus=3; }
if (input(sut4)) // 4. sütun okunuyor
{ delay_ms(20); tus=0xA; }
output_low(sat1); // 1. satýr lojik-0 yapýlýyor
output_high(sat2); // 2. satýr lojik-1 yapýlýyor
if (input(sut1)) // 1. sütun okunuyor
{ delay_ms(20); tus=4; }
if (input(sut2)) // 2. sütun okunuyor
{ delay_ms(20); tus=5; }
if (input(sut3)) // 3. sütun okunuyor
{ delay_ms(20); tus=6; }
if (input(sut4)) // 4. sütun okunuyor
{ delay_ms(20); tus=0xB; }
output_low(sat2); // 2. satýr lojik-0 yapýlýyor
output_high(sat3); // 3. satýr lojik-1 yapýlýyor
if (input(sut1)) // 1. sütun okunuyor
{ delay_ms(20); tus=7; }
if (input(sut2)) // 2. sütun okunuyor
{ delay_ms(20); tus=8; }
if (input(sut3)) // 3. sütun okunuyor
{ delay_ms(20); tus=9; }
if (input(sut4)) // 4. sütun okunuyor
{delay_ms(20); tus=0x0C; }
output_low(sat3); // 3. satýr lojik-0 yapýlýyor
output_high(sat4); // 3. satýr lojik-1 yapýlýyor
if (input(sut1)) // 1. sütun okunuyor
{ delay_ms(20); tus=0xE; }
if (input(sut2)) // 2. sütun okunuyor
{ delay_ms(20); tus=0; }
if (input(sut3)) // 3. sütun okunuyor
{ delay_ms(20); tus=0xF; }
if (input(sut4)) // 4. sütun okunuyor
{delay_ms(20); tus=0xD; }
output_low(sat4); // 3. satýr lojik-0 yapýlýyor
//return tus; // Fonksiyon "tus" deðeri ile geri döner
}
//////////////////////////////////////////////////////////////////
char keypad_oku1() // Fonksiyon ismi
{
output_d(0x00); // D portu çýkýþý sýfýrlanýyor
output_high(sat1); // 1. satýr lojik-1 yapýlýyor
if (input(sut1)) // 1. sütun okunuyor
{ delay_ms(20); tus1=1; }
if (input(sut2)) // 2. sütun okunuyor
{ delay_ms(20); tus1=2; }
if (input(sut3)) // 3. sütun okunuyor
{ delay_ms(20); tus1=3; }
if (input(sut4)) // 4. sütun okunuyor
{ delay_ms(20); tus1=0xA; }
output_low(sat1); // 1. satýr lojik-0 yapýlýyor
output_high(sat2); // 2. satýr lojik-1 yapýlýyor
if (input(sut1)) // 1. sütun okunuyor
{ delay_ms(20); tus1=4; }
if (input(sut2)) // 2. sütun okunuyor
{ delay_ms(20); tus1=5; }
if (input(sut3)) // 3. sütun okunuyor
{ delay_ms(20); tus1=6; }
if (input(sut4)) // 4. sütun okunuyor
{ delay_ms(20); tus1=0xB; }
output_low(sat2); // 2. satýr lojik-0 yapýlýyor
output_high(sat3); // 3. satýr lojik-1 yapýlýyor
if (input(sut1)) // 1. sütun okunuyor
{ delay_ms(20); tus1=7; }
if (input(sut2)) // 2. sütun okunuyor
{ delay_ms(20); tus1=8; }
if (input(sut3)) // 3. sütun okunuyor
{ delay_ms(20); tus1=9; }
if (input(sut4)) // 4. sütun okunuyor
{delay_ms(20); tus1=0x0C; }
output_low(sat3); // 3. satýr lojik-0 yapýlýyor
output_high(sat4); // 3. satýr lojik-1 yapýlýyor
if (input(sut1)) // 1. sütun okunuyor
{ delay_ms(20); tus1=0xE; }
if (input(sut2)) // 2. sütun okunuyor
{ delay_ms(20); tus1=0; }
if (input(sut3)) // 3. sütun okunuyor
{ delay_ms(20); tus1=0xF; }
if (input(sut4)) // 4. sütun okunuyor
{delay_ms(20); tus1=0xD; }
output_low(sat4); // 3. satýr lojik-0 yapýlýyor
//return tus; // Fonksiyon "tus" deðeri ile geri döner
}
/********* ANA PROGRAM FONKSÝYONU********/
void main ( )
{
setup_psp(PSP_DISABLED); // PSP 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);
setup_CCP2(CCP_OFF);
set_tris_b(0x00);
set_tris_c(0x00); // B portu komple çýkýþ
set_tris_d(0x0F); // Yüksek deðerlikli 4 bit çýkýþ, düþük deðerlikli 4 bit giriþ
output_b(0x00);
output_c(0x00); // Ýlk anda B portu çýkýþý sýfýrlanýyor
while(1) // Sonsuz döngü
{
portb=keypad_oku();
portc=keypad_oku1(); // Basýlan tuþ deðerini B portuna aktar
}
}
İlk girilen sayıyı 1.segmentte , 2.girilen sayıyı ikinci segmentte göstermek için yapman gereken şey çok basit ... Keypad'den ilk numara girildiğinde yazılımsal olarak oluşturduğun bir sayacı 1 arttır . Bir daha numara girildiğinde yazılımsal olarak ayarladığın sayacı 1 azalt . Sonra bu sayacın 0 veya 1 olmasına göre portlara atama işlemini yap bu kadar basit ...
İyi çalışmalar ...
if for sayi=0 butun bildiklerimi denedim yapamadim :( size zahmet o dediginiz yazilimsal sayiciyi yazabilir misiniz
#include <16f877.h>
#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD
#use delay (clock=4000000)
#use fast_io(b)
#use fast_io(c)
#use fast_io(d)
#byte portb=0x06
#byte portc=0x07
#define sut1 pin_d0
#define sut2 pin_d1
#define sut3 pin_d2
#define sut4 pin_d3
#define sat1 pin_d4
#define sat2 pin_d5
#define sat3 pin_d6
#define sat4 pin_d7
char tus=0;
//*********** Keypad Tarama Fonksiyonu *********
char keypad_oku()
{
output_d(0x00);
output_high(sat1);
if (input(sut1)) // 1. sütun okunuyor
{ delay_ms(20); tus=1; }
if (input(sut2)) // 2. sütun okunuyor
{ delay_ms(20); tus=2; }
if (input(sut3)) // 3. sütun okunuyor
{ delay_ms(20); tus=3; }
if (input(sut4)) // 4. sütun okunuyor
{ delay_ms(20); tus=0xA; }
output_low(sat1); // 1. satýr lojik-0 yapýlýyor
output_high(sat2); // 2. satýr lojik-1 yapýlýyor
if (input(sut1)) // 1. sütun okunuyor
{ delay_ms(20); tus=4; }
if (input(sut2)) // 2. sütun okunuyor
{ delay_ms(20); tus=5; }
if (input(sut3)) // 3. sütun okunuyor
{ delay_ms(20); tus=6; }
if (input(sut4)) // 4. sütun okunuyor
{ delay_ms(20); tus=0xB; }
output_low(sat2); // 2. satýr lojik-0 yapýlýyor
output_high(sat3); // 3. satýr lojik-1 yapýlýyor
if (input(sut1)) // 1. sütun okunuyor
{ delay_ms(20); tus=7; }
if (input(sut2)) // 2. sütun okunuyor
{ delay_ms(20); tus=8; }
if (input(sut3)) // 3. sütun okunuyor
{ delay_ms(20); tus=9; }
if (input(sut4)) // 4. sütun okunuyor
{delay_ms(20); tus=0x0C; }
output_low(sat3); // 3. satýr lojik-0 yapýlýyor
output_high(sat4); // 3. satýr lojik-1 yapýlýyor
if (input(sut1)) // 1. sütun okunuyor
{ delay_ms(20); tus=0xE; }
if (input(sut2)) // 2. sütun okunuyor
{ delay_ms(20); tus=0; }
if (input(sut3)) // 3. sütun okunuyor
{ delay_ms(20); tus=0xF; }
if (input(sut4)) // 4. sütun okunuyor
{delay_ms(20); tus=0xD; }
output_low(sat4); // 3. satýr lojik-0 yapýlýyor
return tus;
}
/********* ANA PROGRAM FONKSÝYONU********/
void main ( )
{
setup_psp(PSP_DISABLED);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
setup_CCP1(CCP_OFF);
setup_CCP2(CCP_OFF);
set_tris_b(0x00);
set_tris_c(0x00);
set_tris_d(0x0F);
output_b(0x00);
output_c(0x00);
while(1)
{
portc=keypad_oku();
}
}
beyler yardim edin ya:)
programın esik kalan yeri neresi simdi
portc=tuş oku demişsin altınada portb=tuş oku dersen bu iş olmaz iki displayde aynı gösterir
Aynen oyle, nasil ayirabilirim arada nasil bir kod yazabilirim yardimci olurmusunuz
Alıntı yapılan: suleymanq - 09 Mayıs 2013, 23:41:50
Aynen oyle, nasil ayirabilirim arada nasil bir kod yazabilirim yardimci olurmusunuz
Söylediğim gibi bir kod yazabilirsin ... Şuan pek vaktim yok yazamadım . Dediğim adımları sırasıyla yazarsan çok rahat yapabilirsin ..
Alıntı yapılan: serhat1990 - 10 Mayıs 2013, 08:51:17
Söylediğim gibi bir kod yazabilirsin ... Şuan pek vaktim yok yazamadım . Dediğim adımları sırasıyla yazarsan çok rahat yapabilirsin ..
bu kadarini yazabildim ancak >:(
int1 i;
for (i=1;i<2;i++)
if(i=1;portb=keypad_oku());
if(i=0:portc=keypad_oku());
if(keypad_oku())
{
k++;
if(k==1){portc=tus;}
if(k==2){portb=tus;k=0;}
}
Olmadi, ayni sayi her iki 7-segmente cikiyor. baska ne yapilabilir?
#include <16f877.h>
#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD
#use delay (clock=4000000)
#use fast_io(b)
#use fast_io(c)
#use fast_io(d)
#byte portb=0x06
#byte portc=0x07
#define sut1 pin_d0
#define sut2 pin_d1
#define sut3 pin_d2
#define sut4 pin_d3
#define sat1 pin_d4
#define sat2 pin_d5
#define sat3 pin_d6
#define sat4 pin_d7
char tus=0;
//*********** Keypad Tarama Fonksiyonu *********
char keypad_oku()
{
output_d(0x00);
output_high(sat1);
if (input(sut1)) // 1. sütun okunuyor
{ delay_ms(20); tus=1; }
if (input(sut2)) // 2. sütun okunuyor
{ delay_ms(20); tus=2; }
if (input(sut3)) // 3. sütun okunuyor
{ delay_ms(20); tus=3; }
if (input(sut4)) // 4. sütun okunuyor
{ delay_ms(20); tus=0xA; }
output_low(sat1); // 1. satýr lojik-0 yapýlýyor
output_high(sat2); // 2. satýr lojik-1 yapýlýyor
if (input(sut1)) // 1. sütun okunuyor
{ delay_ms(20); tus=4; }
if (input(sut2)) // 2. sütun okunuyor
{ delay_ms(20); tus=5; }
if (input(sut3)) // 3. sütun okunuyor
{ delay_ms(20); tus=6; }
if (input(sut4)) // 4. sütun okunuyor
{ delay_ms(20); tus=0xB; }
output_low(sat2); // 2. satýr lojik-0 yapýlýyor
output_high(sat3); // 3. satýr lojik-1 yapýlýyor
if (input(sut1)) // 1. sütun okunuyor
{ delay_ms(20); tus=7; }
if (input(sut2)) // 2. sütun okunuyor
{ delay_ms(20); tus=8; }
if (input(sut3)) // 3. sütun okunuyor
{ delay_ms(20); tus=9; }
if (input(sut4)) // 4. sütun okunuyor
{delay_ms(20); tus=0x0C; }
output_low(sat3); // 3. satýr lojik-0 yapýlýyor
output_high(sat4); // 3. satýr lojik-1 yapýlýyor
if (input(sut1)) // 1. sütun okunuyor
{ delay_ms(20); tus=0xE; }
if (input(sut2)) // 2. sütun okunuyor
{ delay_ms(20); tus=0; }
if (input(sut3)) // 3. sütun okunuyor
{ delay_ms(20); tus=0xF; }
if (input(sut4)) // 4. sütun okunuyor
{delay_ms(20); tus=0xD; }
output_low(sat4); // 3. satýr lojik-0 yapýlýyor
return tus;
}
/********* ANA PROGRAM FONKSÝYONU********/
void main ( )
{
setup_psp(PSP_DISABLED);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
setup_CCP1(CCP_OFF);
setup_CCP2(CCP_OFF);
set_tris_b(0x00);
set_tris_c(0x00);
set_tris_d(0x0F);
output_b(0x00);
output_c(0x00);
int k;
while(1)
{
if(keypad_oku())
{
k++;
if(k==1){portc=tus;}
if(k==2){portb=tus;k=0;}
}
}
}
Yazılan Program 4x4 keypad için fakat siz 3x4 keypad kullanıyorsunuz.Copy paste kod yerine kendiniz mantığını kavrayıp yazın..
Alıntı yapılan: Fkarizmatik - 13 Mayıs 2013, 23:18:22
Yazılan Program 4x4 keypad için fakat siz 3x4 keypad kullanıyorsunuz.Copy paste kod yerine kendiniz mantığını kavrayıp yazın..
inanin mantigini oyle bir kavradim ki ruyamda goruyorum keypad tarama kodlarini... en son bir hamle kaldi b ve c port ayrimi yardimci olursaniz cok sevinirim
Projenin son halini ekliyorum yardımcı olan bütün arkadaşlara çok teşekkür ediyorum
(http://img442.imageshack.us/img442/1705/s9c2.jpg)
#include <16f877.h>
#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD
#use delay (clock=2000000)
#use fast_io(b)
#use fast_io(c)
#use fast_io(d)
#byte portb=0x06
#byte portc=0x07
#define sut1 pin_d0
#define sut2 pin_d1
#define sut3 pin_d2
#define sut4 pin_d3
#define sat1 pin_d4
#define sat2 pin_d5
#define sat3 pin_d6
#define sat4 pin_d7
char tus=0,ptus,ekran;
char keypad()
{
output_d(0x00);
tus=0;
output_high(sat1);
if (input(sut1))
{ delay_ms(20); tus=1; }
if (input(sut2))
{ delay_ms(20); tus=2; }
if (input(sut3))
{ delay_ms(20); tus=3; }
output_low(sat1);
output_high(sat2);
if (input(sut1))
{ delay_ms(20); tus=4; }
if (input(sut2))
{ delay_ms(20); tus=5; }
if (input(sut3))
{ delay_ms(20); tus=6; }
output_low(sat2);
output_high(sat3);
if (input(sut1))
{ delay_ms(20); tus=7; }
if (input(sut2))
{ delay_ms(20); tus=8; }
if (input(sut3))
{ delay_ms(20); tus=9; }
output_low(sat3);
output_high(sat4);
if (input(sut1))
{ delay_ms(20); tus=0xE; }
if (input(sut2))
{ delay_ms(20); tus=0; }
if (input(sut3))
{ delay_ms(20); tus=0xF; }
output_low(sat4);
return tus;
}
void goster_b()
{
ekran=tus;
if(ekran==255){ekran=0;}output_b(tus);
}
void goster_c()
{
ekran=tus;
if(ekran==255){ekran=0;}output_c(tus);
}
void main ( )
{
setup_psp(PSP_DISABLED);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
setup_CCP1(CCP_OFF);
setup_CCP2(CCP_OFF);
set_tris_b(0x00);
set_tris_c(0x00);
set_tris_d(0x0F);
output_b(0x00);
output_c(0x00);
int k;
while(1)
{
keypad();
if(tus>0)
{
k++;
if(k==1){
goster_b();
ptus=tus;
do{delay_ms(10);keypad();}while(tus==ptus);
}
if(k==2){
goster_c();
ptus=tus; k=0;
do{delay_ms(10);keypad();}while(tus==ptus);
}
}
}
}
(http://img850.imageshack.us/img850/694/ube6.jpg)
(http://img844.imageshack.us/img844/9656/qjz.png)
Devrenin sağ tarafındaki 10x10 matris çıkışına 90 adet röle bağlanabilir.
Merhaba arkadaşlar!
Projede biraz değişiklikler yaptım, son halini ekliyorum
#include <16f877.h>
#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD
#use delay (clock=4000000)
#use fast_io(b)
#use fast_io(c)
#use fast_io(d)
#byte portb=0x06
#byte portc=0x07
char tus,ptus,ekran;
int digit[16]={63,6,91,79,102,109,125,7,127,111,119,56,57,94,121,113};
// [0 ,1,2 ,3 , 4 , 5 , 6 ,7, 8 , 9 , a , L ,c ,d , e , f ]
int k;
char keypad_oku()
{
output_d(0x00);
tus=input_d();
if(tus==11){k=0;reset_cpu();}
return tus;
}
void goster_b()
{
ekran=tus;
if(ekran==255){ekran=0;}output_b(digit[ekran]);
}
void goster_c()
{
ekran=tus;
if(ekran==255){ekran=0;}output_c(digit[ekran]);
}
void main ( )
{
setup_psp(PSP_DISABLED);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
setup_CCP1(CCP_OFF);
setup_CCP2(CCP_OFF);
set_tris_b(0x00);
set_tris_c(0x00);
set_tris_d(0x0F);
output_b(digit[0]);
output_c(digit[0]);
while(1)
{
keypad_oku();
if(tus>0)
{
k++;
if(k==1){
goster_b();
ptus=tus;
do{delay_ms(10);keypad_oku();}while(tus==ptus);
}
if(k==2){
goster_c();
ptus=tus; k=0;
do{delay_ms(10);keypad_oku();}while(tus==ptus);
}
}
}
}
(http://img690.imageshack.us/img690/4540/nkf5.jpg)
(http://img692.imageshack.us/img692/8259/q4lb.jpg)
433Mhz RF modüller ve PT2262,72 entegreleri ekledim devre çalışıyor, kumandada basılan rakamı ekranda gösteriyor bir sıkıntı yok, yalnız program kısmında eklemek istediğim ufak bir şey var: günlük hayatımızda * ve # olarak adlandırdığımız iki tuş 'artır' ve 'azalt' olarak kullanmak istiyorum yani (tus=10 ise azalt) ve (tus=12 ise artır)
ıf(tus=10){portc bir azalt)
if(tus=12){portc bir artır}
Bunu nasıl yapabilirim?
http://www.dosya.tc/server17/5Er5I3/displayboard.rar.html (http://www.dosya.tc/server17/5Er5I3/displayboard.rar.html)
O devreleri sen mi tasarladın ? Sen bana devre çizimini öğret ben sana displaylerde ki tüm fantazileri göstereyim :)
Dalga geçiyorsunuz herhalde? ;D yardımcı olun ya :) ben tasarladım daha yeni öğreniyorum altium designeri
Alıntı yapılan: suleymanq - 22 Ekim 2013, 21:15:13
günlük hayatımızda * ve # olarak adlandırdığımız iki tuş 'artır' ve 'azalt' olarak kullanmak istiyorum yani (tus=10 ise azalt) ve (tus=12 ise artır)
ıf(tus=10){portc bir azalt)
if(tus=12){portc bir artır}
Bunu nasıl yapabilirim?
Portc ye gonderilecek değer için bir genel değişken
tanımlayın. Öneğin:
------------------------------------------
unsigned char G_Degisken;
...
...
...
if(tus == 10) G_Degisken--;
if(G_Degisken <= 0) G_Degisken = 0;
if(tus == 12) G_Degisken++;
if(G_Degisken >= 99) G_Degisken = 99;
...
...
---------------------------------------------
Tabi tuşlar için debounce gecikmesi unutulmamalıdır...
Kolaylıklar...
Alıntı yapılan: mehmet - 24 Ekim 2013, 22:54:02
Portc ye gonderilecek değer için bir genel değişken
tanımlayın. Öneğin:
------------------------------------------
unsigned char G_Degisken;
...
...
...
if(tus == 10) G_Degisken--;
if(G_Degisken <= 0) G_Degisken = 0;
if(tus == 12) G_Degisken++;
if(G_Degisken >= 99) G_Degisken = 99;
...
...
---------------------------------------------
Tabi tuşlar için debounce gecikmesi unutulmamalıdır...
Kolaylıklar...
Aslında mehmet abim delay fonksyonları yerine switch case içerisinde atsak programları ve tuşlar basıldığında bir sayaç eklesek sayacın durumuna göre basılan tuşları algılasak kodun tam çevrim süresinde daha az zaman harcıyor olmaz mıyız ?Hem bu sayede multitasking'de yapmış oluruz kanımca.
Güzel güzel anlatıyorsunuz da biz yapamıyoruz :'(
Şöyle bir soru sorsam daha basit: kodun mevcut halini değiştirmeden bir ek ile yapılabilecek bir iş mi acaba bu?
şöyle birşey de denedim olmadı
char keypad_oku()
{
output_d(0x00);
tus=input_d();
if(tus == 10) keypad_oku()--;
if(keypad_oku()<=0) keypad_oku() = 0;
if(tus == 12) keypad_oku()++;
if(keypad_oku() >= 99) keypad_oku() = 99;
if(tus==11){k=0;reset_cpu();}
return tus;
}