ADVERTISEMENT

projSW.c

Atmega32 - Czy ktoś zweryfikuje działanie mojego projektu?

Hej. Mam do wykonania projekt w Atmega32. Niestety nie jestem w tym geniuszem, a na dodatek przez dzisiejszą sytuację nie mamy możliwości przetestowania programu. Czy ktoś byłby w stanie sprawdzić czy cokolwiek program wykonuje, ewentualnie jakieś wskazówki? W załączniku dodałem projekt jak i założenia(cele) do projektu. 1031368 1031369


Download file - link to post

//RS do 0 E DO 1 DO PORTU B
// czerwony kabel(ostatni) do 7 do portu A(wyswietlacz)
// diody do portu C
// przyciski sa w porcie D


#include & lt; avr/io.h & gt;
#define wlacz_wylacz 1 // button podlaczony do d nr 1
#define numer 2 // button do inkremenacji diod port d nr 2
#define magistrala PORTA
#define magistrala_DDR DDRA
#define sterowanie PORTB
#include & lt; avr/interrupt.h & gt;
#define sterowanie_DDR DDRB
#define diodyDDR DDRC
#define diody PORTC
#define RS 0
#define E 1
#define F_CPU 16000000


#include & lt; util/delay.h & gt;

void device_init(void)
{
magistrala_DDR = 0xff;
sterowanie_DDR |=(1 & lt; & lt; RS)|(1 & lt; & lt; E); //piny z wyswietlacza jako wyjscia


}

void LCD_write(uint8_t data)
{
magistrala = data;
sterowanie |= (1 & lt; & lt; E); //E=1
_delay_us(20);
sterowanie & = ~(1 & lt; & lt; E);
_delay_us(20);
}
void LCD_text(char * text)
{

while(*text)
{
LCD_write(*text++);
}
}
unsigned char button_state()
{

if (!(PIND & (1 & lt; & lt; wlacz_wylacz)))
{
_delay_ms(25);
if (!(PIND & (1 & lt; & lt; wlacz_wylacz))) return 1;
}
return 0;
}
unsigned char numer_state()
{

if (!(PIND & (1 & lt; & lt; numer)))
{
_delay_ms(25);
if (!(PIND & (1 & lt; & lt; numer))) return 1;
}
return 0;
}


void LCD_init(void)
{

sterowanie & = ~(1 & lt; & lt; RS); // wlaczenie instrukcji rs = 0
LCD_write(0b00111000);
LCD_write(0b00000110);

LCD_write(0b00001111);
LCD_write(0b00000001);
_delay_ms(2);
}
int main(void)
{


diodyDDR = 0xff; //jako wyjscia
diody = 0xff;//diody stan wysoki

DDRD & = ~(1 & lt; & lt; numer); // klawisz podlaczony do portu d nr 2 jest wyjsciem
DDRD & = ~(1 & lt; & lt; wlacz_wylacz);// sprawia ze port d nr 1 to klawisz to wejsciewlaczania/wylaczania
PORTD = 0xFF;

device_init();
LCD_init();
sterowanie |= (1 & lt; & lt; RS); //rs wlaczony czyli do lcd_write mozna podawac dane
uint8_t i = 0;
while (1) // tutaj wersja w przerwaniach
{
if (numer_state())
{
i++;
}
if(button_state())

{


LCD_write('H');
LCD_write(i);
if(i++ == 7){ i=0;}
PORTC = 0xff;
PORTC = ~(1 & lt; & lt; i);
}
}
}