Aşağıdaki programda iki farklı sayıcı var. Devrede ortalama tuşuna basıldığında ekranda gösterilen iki sayının ortalamasını alarak 4 haneli displayde göstermek isitiyorum. Örneğin devrede 7/3 yaptığımda 2.333 görtermesi gerekiyor. Fakat ortalama tuşuna bastığımda alakasız değerler gösteriyor. Sorun nedir acaba?
*********************Program*************************
#include <16f877a.h>
#include <math.h>
#include <stdlib.h>
#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD
#use delay(clock=4000000)
#use fast_io(a)
#use fast_io(b)
#use fast_io(c)
#use fast_io(d)
#use fast_io(e)
#define azalt pin_a0
#define arttir pin_a1
#define enter pin_a2
#define reset pin_a3
#define orta pin_a4
int8 sayi=0,birler=0,onlar=0,yuzler=0,kalan=0,ortal=0,a=0;
int8 biro=0,ono=0,yuzo=0,bino=0;
float ort;
const int digit[10]={0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09};
void ekran()
{
output_b(digit[birler]|(0b00110000));
delay_ms(5);
output_b(digit[onlar]|(0b01010000));
delay_ms(5);
output_b(digit[yuzler]|(0b01100000));
delay_ms(5);
output_d(digit[bino]|(0b01110000));
delay_ms(5);
output_d(digit[yuzo]|(0b10110000));
delay_ms(5);
output_d(digit[ono]|(0b11010000));
delay_ms(5);
output_d(digit[biro]|(0b11100000));
delay_ms(5);
output_c(a);
}
void goster()
{
birler=sayi%10;
kalan=sayi/10;
onlar=kalan%10;
yuzler=sayi/100;
}
void main()
{
setup_psp(PSP_DISABLED); //PSP birimi devre dışı
setup_timer_1(T1_DISABLED); //T1 birimi devre dışı
setup_timer_2(T2_DISABLED,0,1); //T2 birimi devre dışı
setup_adc_ports(NO_ANALOGS); //Analog giriş yok
setup_adc(ADC_OFF); //ADC birimi devre dışı
setup_CCP1(CCP_OFF); //CCP1 birimi devre dışı
setup_CCP2(CCP_OFF); //CCP2 birimi devre dışı
setup_comparator(NC_NC_NC_NC);
set_tris_a(0xFF);
set_tris_b(0x00);
set_tris_c(0x00);
set_tris_d(0x00);
set_tris_e(0xFF);
output_b(0);
output_c(0);
output_d(0);
delay_ms(1000);
while(TRUE)
{
ekran();
if(!input(arttir))
{
sayi++;
goster();
while(!input(arttir))
{
ekran();
}
}
if(!input(azalt)&&(sayi!=0))
{
sayi--;
goster();
while(!input(azalt))
{
ekran();
}
}
if(sayi==1000)
sayi=0;
if(!input(reset))
{
birler=0,onlar=0,sayi=0,yuzler=0,a=0;
while(!input(reset))
{
ekran();
}
}
if(!input(enter))
{
if (++a==10){a=0;}
while(!input(enter))
{
ekran();
}
}
if(!input(orta))
{
ort=(float)sayi/a;
ortal=ort*1000;
biro=ortal%10;
ono=(ortal/10)%10;
yuzo=(ortal/100)%10;
bino=(ortal/1000)%10;
while(!input(orta))
{
ekran();
}
}
}
}