Mam prośbę o sprawdzenie kodu, mam za zadanie zrobić układ Rezystora dekadowego sterowanego cyfrowo( rezystory zwierana przez przekaźnik) natrafiłem na mały problem, w 5 dekadzie gdy inkrementuje wartość dochodzi ona do 30000 i wraca na -25536 a powinno inkrementować się aż do 90000.
Kod programu:
Kod programu:
Cytat:
#include <avr/io.h>
#include <util/delay.h>
#include <hd44780.c>
#include <avr/sfr_defs.h>
#include <stdlib.h>
#define opoznienie _delay_ms(200)
void main()
{
int war_1=0;
int war_2=0;
int war_3=0;
int war_4=0;
int war_5=0;
int war_x=0;
char buffer[5];
DDRD=0x00;
DDRG=0x00;
DDRA=0xFF;
DDRF=0xFF;
DDRC=0xFF;
PORTD=0xFF;
PORTG=0xFF;
PORTA=0x00;
PORTF=0x00;
PORTC=0x00;
LCD_Initalize();
LCD_Clear();
while(1)
{
//Przycisk 1 Gora
if(bit_is_set(PING, 3)==0)
{opoznienie;
war_1++;
if(war_1==10)
{war_1=0;}}
//Przycisk 1 Gora
if(bit_is_set(PING, 3)==0)
{opoznienie;
war_1++;
if(war_1==10)
{war_1=0;}}
//Przycisk 10 Gora
if(bit_is_set(PING, 4)==0)
{opoznienie;
war_2++;
if(war_2==10)
{war_2=0;}}
//Przycisk 100 Gora
if(bit_is_set(PIND, 0)==0)
{opoznienie;
war_3++;
if(war_3==10)
{war_3=0;}}
//Przycisk 1K Gora
if(bit_is_set(PIND, 1)==0)
{opoznienie;
war_4++;
if(war_4==10)
{war_4=0;}}
//Przycisk 10K Gora
if(bit_is_set(PIND, 2)==0)
{opoznienie;
war_5++;
if(war_5==10)
{war_5=0;}}
//Przycisk 1 Dol
if(bit_is_set(PIND, 3)==0)
{opoznienie;
war_1--;
if(war_1==-1)
{war_1=9;}}
//Przycisk 10 Dol
if(bit_is_set(PIND, 4)==0)
{opoznienie;
war_2--;
if(war_2==-1)
{war_2=9;}}
//Przycisk 100 Dol
if(bit_is_set(PIND, 5)==0)
{opoznienie;
war_3--;
if(war_3==-1)
{war_3=9;}}
//Przycisk 1K Dol
if(bit_is_set(PIND, 6)==0)
{opoznienie;
war_4--;
if(war_4==-1)
{war_4=9;}}
//Przycisk 10K Dol
if(bit_is_set(PIND, 7)==0)
{opoznienie;
war_5--;
if(war_5==-1)
{war_5=9;}}
//Wartosc rezystancji
war_x=war_1+(war_2*10)+(war_3*100)+(war_4*1000)+(war_5*10000);
itoa (war_x,buffer,10);
LCD_GoTo(3,0);
LCD_WriteText("Rezystancja");
LCD_GoTo(6,1);
LCD_WriteText(buffer);
LCD_WriteText(" Ohm");
opoznienie;
LCD_Clear();
}
}