PIC 16F877 ile 74164 veya 8255 ile 0-999 sayıcı için yardımsever aranıyor

kumsaatci

Üye
Katılım
26 Nis 2009
Mesajlar
18
Puanları
1


arkadaslar bizim yeni ödev 0-999 yazıcı
şimdi ben 74164 veya 8255 portlarını kullanarak nasıl yaparım

şimdi proram olarak sayıyı arttırarak

sayı++;
birler=sayi%10;
onlar=sayi/10;
yuzler=sayi/100

desem program hatalı çalısıyor

en içte birler bi üstte onlar bi üstte yüzler basamagı iç içe döngü
kursam buton ile içteki döngüyü kontrolle butona bastıkca arttırsam diyorum
ama butona basıp çekene kadar sayı uçuyor
nasıl yapabilirim
yardımlarınız için tesekkürler
 
Arkadaşım her sayı artışından sonra araya bekleme süresi koyarsan hızlı saymasını önlersin. Programın çevrim süresi çok kısa olduğundan sen butona basıp bırakana kadar çok sayıda çevrim yaptığı için sayı uçup gidiyor.
 
sayı++;
birler=sayi%10;
onlar=(sayi/10)%10;
yuzler=sayi/100
 
kardeş sayının uçmaması için(sayılar nasıl uçar bilmem ama :) ) interrupt kullanabilirsin. yada tek pals üreteçleri kullanabilirsin.
 
evet, sayılar "uçarlar". Şöyle ki; örneğin butona her bastığımızda 1 artan ,yani A=Artım sayısı ve A=A+1 gibi basit bir formülü sayıcı için açıklarsak, siz butona bastığınız her seferde "artım sayısı " kadar artmasını beklediğiniz A'nın son değeri, alabileceği maksimum değeri alır ki bu da aralarda görmek istediğimiz "artım sayısı+A(n+0);artım sayısı+A (n+1)" değerlerini göremeyeceğiz, yani "uçmuş" demektir. (n=nutona basma,1). oysa her toplama işleminde sonra butona basıp çekme süresinden büyük bir bekleme prosedürü yazarsak bu istenmeyen durumu ortadan kaldırabiliriz.
Ayrıca "interrupt"'lar böyle basit problemler için kullanılmazlar.
 
Son düzenleme:
Sayıcı için buton kullanacaksanız 150ms gecikme işinizi görür. Normal debounce süresi 10-25 ms. kadardır. Sadece sayı saydıracaksanız, elinizi butondan çekme süresi yaklaşık 100 ms. kadardır.
 
#include "C:\Program Files\PICC\Examples\0-999_butonla_sayıcı\0-999_say.h"
#fuses XT,NOPROTECT,NOWDT,NOWRT,NOPUT,NODEBUG,NOBROWNOUT,NOLVP,NOCPD
#use delay(clock=4000000)
#define buton pin_c0
#use fast_io(b)
#use fast_io(c)
const int dijit[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
int16 birler=0,onlar=0,sayi=0,yuzler=0,kalan;

void main()
{

setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
setup_psp(PSP_DISABLED);
setup_spi(SPI_SS_DISABLED);
setup_CCP1(CCP_OFF);
setup_CCP2(CCP_OFF);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);

set_tris_c(0x01);
set_tris_b(0x00);
output_b(0x00);

for(;;)
{
birler=sayi%10;
kalan=sayi/10;
onlar=kalan%10;
yuzler=sayi/100;

output_high(pin_c3);
output_low(pin_c1);
output_b(dijit[birler]);
delay_ms(5);
output_high(pin_c1);
output_low(pin_c2);
output_b(dijit[onlar]);
delay_ms(5);
output_high(pin_c2);
output_low(pin_c3);
output_b(dijit[yuzler]);
delay_ms(5);

if(input(buton))
{
sayi++;
if(sayi==1000)
sayi=0;

birler=sayi%10;
kalan=sayi/10;
onlar=kalan%10;
yuzler=sayi/100;

while(input(buton))
{
output_high(pin_c3);
output_low(pin_c1);
output_b(dijit[birler]);
delay_ms(5);
output_high(pin_c1);
output_low(pin_c2);
output_b(dijit[onlar]);
delay_ms(5);
output_high(pin_c2);
output_low(pin_c3);
output_b(dijit[yuzler]);
delay_ms(5);
output_high(pin_c3);
}
}

}

}
 
arkadaslar emeğinize ve ilginize tesekkür ederim
 

Forum istatistikleri

Konular
128,179
Mesajlar
915,658
Kullanıcılar
449,940
Son üye
yavuzturan

Yeni konular

Çevrimiçi üyeler

Geri
Üst