Tuş takımında lcd ye çok basamaklı sayı girişi

Katılım
31 Ocak 2011
Mesajlar
29
Puanları
1
Yaş
34
merhaba,
arkadaşlar projemde ccs ile tuş takımından lcd ye örneğin 1250 yazdırmak ve bunun sonucunda * tuşuna basarak bunu motor derece girişi için kullanacağım.ne yaptıysam olmadı.lcd ye 3,4,5 basamaklı bir sayıyı nasıl yazdıracağım.tek basamaklı kolay yazılıyor ama bu nasıl olacak.:confused:
yardımcı olursanız çok sevinirim...
 
{
lcd_init();
lcd_gotoxy(1,1);
printf(lcd_putc,"\ %9lu ",j);
while(TRUE) {
if (!input_d()==0){
j=input_d();
if(j==10)j=0;
while (!input_d()==0) ;
i=(i*10)+j;
if(j==11)i=0;
lcd_gotoxy(1,1);
printf(lcd_putc,"\ %9lu ",i);


gibi bir şey olabilir.
 
sayın KAZIMUGUR verdiğiniz kodlarla ilgili üstünde uğraştım.yalnız,maalesef tam bir sonuç alamadım.
Kod:
/******************************************************
                      PROJE
*******************************************************/

#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ı D portu için geçerli
#use fast_io(c) //Port yönlendirme komutları C portu için geçerli
#define use_portb_lcd TRUE   // LCD B portuna bağlı

#include <lcd.c>   // lcd.c dosyası tanıtılıyor
#byte   portb=0x06   // B portu "portb" 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 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


long  int i,j;

int8 kesme=0; // Tamsayı tipinde 16 bitlik değişken tanımlanıyor


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; }
  
   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; }
  
   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; }
  
   output_low(sat3); // 3. satır lojik-0 yapılıyor

   output_high(sat4); // 4. 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; }
  
   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_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ş
   set_tris_c(0x01);   // RC0 pini giriş

   setup_timer_1(T1_EXTERNAL | T1_DIV_BY_2); // Timer1 ayarları yapılıyor
   set_timer1(65530);   // TMR1 değeri belirleniyor


   enable_interrupts(INT_timer1); // int_timer1 kesmesini aktif yapar
   enable_interrupts(GLOBAL);     // Aktif edilen kesmelere izin ver

   
   lcd_init();   // LCD hazırlanıyor

   printf(lcd_putc,"Hosgeldiniz");
   delay_ms(2000);
   printf(lcd_putc,"\n091202061\nSehriyar OZEN");
   delay_ms(2000);
   printf(lcd_putc,"\fBasilan Tus="); // LCD'ye string yazdırılıyor
   
    
   
   while(1) // Sonsuz döngü
   {
       lcd_gotoxy(13,1); // İmleç 13.sütun, 1.satıra konumlandırılıyor
     
        printf(lcd_putc,"\ %lu ",j);
        while(1) {
         if (!input_b()==0)
         {
          j=input_b();}
          if(j==10){
          j=0;}
          while (!input_d()==0) ;
         { i=(i*10)+j;}
          if(j==11){
          i=0;}
          lcd_gotoxy(13,1);
       
       
       portb=keypad_oku();
       printf(lcd_putc,"%d",keypad_oku());
       printf(lcd_putc,"\ %lu ",i);
        }}


}
böyle bir şeyler yaptım.
 
bu arada yazılımdan da anlaşılacağı üzere keypad d portuna, lcd de b portuna bağlı.
 
Aşağıdaki gibi kullanırsan portları okuman kolay olur.

Verdiğim kısmı ile kodlar ekranda göreceğin sayıyı yazdırır.
Gerisi sana kalmış.
Bir şekilde kayıt edip başka sayı girilmesi ve ikisi arasındaki ilişkiyi yazmak sana kalmış.

Proteus sample dosyalarındaki hesap makinesi incelemesi fikir verebilir.
 
S.A.
Neden b portunu kullanarak CCS C nin kbd.c driverini kullanmıyorsun. Çalışan sağlam bir program.
 
S.A.
Neden b portunu kullanarak CCS C nin kbd.c driverini kullanmıyorsun. Çalışan sağlam bir program.

sayın muratmert4 yazınız üzerine kbd.c ile ilgili araştırma yaptım netten daha önce yapılmış çalışmaları inceledim.
Kod:
#include<16f877.h>



#fuses XT, NOWDT, NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT, NODEBUG,NOCPD

#use delay (clock=4000000)

#use fast_io(b)
#use fast_io(d)

#define use_portd_lcd TRUE

#define use_portb_kbd

#include <lcd.c>
#include <kbd.c>

#define sut1 pin_b0
#define sut2 pin_b1
#define sut3 pin_b2

#define sat1 pin_b3
#define sat2 pin_b4
#define sat3 pin_b5
#define sat4 pin_b6


#int_RTCC
void RTCC_isr(void)
{

}

char karakter[5];
char keytemp;
int sayac=0;
unsigned int16 sayi=0;
unsigned int16 hesapla(unsigned char* key,unsigned char uzunluk)
{

    static unsigned int16 temp=0;
    unsigned char i;
    unsigned int16 carpan=1;
   
    for(i=uzunluk;i>=1;i--)
    {
        temp+=key[i-1]*carpan;
        carpan=(unsigned int16)carpan*10;
    }
   
    return temp;
}

char tus=0;

char keypad_oku()
{
output_d(0x00);
tus='\0';
delay_ms(100);

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=8;}
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 main ()
{
setup_psp(PSP_DISABLED);
setup_spi(SPI_SS_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_d(0x01);
set_tris_b(0x0f);

lcd_init();

enable_interrupts(INT_RTCC);
enable_interrupts(GLOBAL);
printf(lcd_putc,"\f MERHABA");

while(1)
{
do
{
keytemp=keypad_oku();
  
if(keytemp!='\0')
{
karakter[sayac]=keytemp-48;
   printf(lcd_putc,"*");
   sayac++;
}
}while(keytemp!='#');
sayi=hesapla(karakter,sayac-1);
printf(lcd_putc,"\f%LU",sayi);
  
   while(true)
   {
   }
}
}
gibisinden örnekler üzerinde uğraştım yalnız hala yapabilmiş değilim.bu işi 74c922 entegresi ile yapmak mı,kbd.c ile yapmak mı yoksa hiçbiri olmadan yapmak mı gerekiyor günlerdir buna uğraşıyorum yapamadım.:confused:
yardımcı olursanız sevinirim..
 
S.A.
Deneme key pad uygulaması yaptım sanırım sizin ve ihtiyacı olan arkadaşlarımızın işini görür selametle.
 

Yeni mesajlar

Forum istatistikleri

Konular
128,158
Mesajlar
915,525
Kullanıcılar
449,904
Son üye
teknikbilimlers31

Yeni konular

Geri
Üst