0-9999 ileri geri sayıcı

proteusDev

Üye
Katılım
2 May 2020
Mesajlar
4
Puanları
1
Yaş
27
Şimdi 3-4 gün önce 0-999 sayıcı konusu açmıştım o soruyu halletik fakat ekteki resimde B portuna 2 farklı 7 segment bağlanmış.
Ben output_b() ile bir değişken tanımlıyorum fakat ikinci değişkeni b portu için nasıl tanımlamam gerekiyor bulamadım. En son yazdığım kod aşağıda.

Matematik işlemlerimde de hata görürseniz lüften bildirin, teşekkürler
Kod:
int a;

int digit0, digit1, digit2, digit3=0;

void main(){

set_tris_b(0x00);
output_b(0x00);
set_tris_c(0x00);
output_c(0x00);
set_tris_d(0x00);
output_d(0x00);

while(TRUE){
   a =input(pin_a0);

   output_b(digit0);
   output_b(digit1);
   output_c(digit2);
   output_d(digit3);

   delay_ms(150);
 
   digit0++;
 
   if(digit0 > 9){
      digit0 = 0;
      digit1 = digit1 + 16;
   }
   if(digit1 > 144){
      digit1 = 0;
      digit2 = digit2 + 4;
   }
   if(digit2 > 36){
      digit2 = 0;
      digit3 = digit3 + 16;
   }
   if(digit3 > 144){
      digit0, digit1, digit2, digit3 = 0;
   }
 

Ekli dosyalar

  • WhatsApp Image 2020-05-06 at 02.44.29.jpeg
    273.4 KB · Görüntüleme: 51
Moderatör tarafında düzenlendi:
anlamadım hocam bi örnek gösterir misiniz ? Konu hakkında cidden hiç bilgim yok
 
Yukarıdaki isis çizimine uygun örnek kod ama
hocan bunu senin yazdığına inanmaz:
Kod:
void main()
{
unsigned int16 say_hex;
   while(TRUE)
   {
   say_hex = --say_hex + (input(pin_A1) << 1) ;                   //Pin_A1 == 1 ise art, 0 ise azalt 
   if(say_hex == 10000) {say_hex = 0;}                            //arttırıldığında 10000 olduysa sıfırla
   if(say_hex > 10000)  {say_hex = 9999;}                         //azaltıldığında 0xFFFF olduysa 9999 yap 
   output_B( ((say_hex % 1000UL) /100UL) | (say_hex / 1000UL) );  //((yuzler<<4 ) | binler)     //BCD ye dönüştür ve Portlara Yolla//
   output_C( ((say_hex % 100UL) / 10UL) << 2);                    //( onlar << 2)               //BCD ye dönüştür ve Portlara Yolla//
   output_D( (say_hex % 10UL) << 4);                              //( birler << 4)              //BCD ye dönüştür ve Portlara Yolla//
   delay_ms(200);
   }
}


Hex BCD dönüşümü konusuna bak, nette tonla örnek var.
Mesela:
Kod:
unsigned int16 say_hex;
   binler = (say_hex / 1000UL);
   yuzler = ((say_hex % 1000UL) /100UL);
   onlar  = ((say_hex % 100UL) / 10UL);
   birler = (say_hex % 10UL);

Ödevini biz yapamayız, diplomayı bize vermeyecekler.
 
Bu siteyi kullanmak için çerezler gereklidir. Siteyi kullanmaya devam etmek için onları kabul etmelisiniz. Daha fazla bilgi edin…