Saturday, 7 November 2015

Motor programming in ATMEGA32



#include <avr/io.h>
#include <util/delay.h>
char keypad(void);
void cmd(int);
void data(char);
void display(const char *p)
{
while(*p!='\0')
{
data(*p);
p++;
}
}



int main(void)
{
char a;
DDRA=0xFF;
DDRB=0xFF;
DDRC=0xF0;
DDRD=0xFF;

cmd(0x38);
cmd(0x01);
cmd(0x0e);
cmd(0x06);
cmd(0x80);


    while(1)
    {

a=keypad();
switch(a)
{
case '1':
display("FORWARD");
PORTD=0x1D;
//_delay_ms(2000);
break;
case '2':
display("REVERSE");
PORTD=0x2E;
//_delay_ms(2000);
break;

case '3':
display("STOP");
PORTD=0x00;
//_delay_ms(2000);
break;

}
//PORTD=0xFF;
//_delay_ms(2000);
//cmd(0x01);
//cmd(0x80);

     
 

}
}
char keypad()
{
int e;
PORTC=0x7F;
e=PINC&0x0F;
switch (e)
{
case 0x07:
   return '1';
break;
case 0x0B:
return '2';
break;
case 0x0D:
return '3';
break;
case 0x0E:
return '4';
break;
}
PORTC=0xbf;
e=PINC&0x0f;
switch (e)
{
case 0x07:
   return '5';
break;
case 0x0b:
return '6';
break;
case 0x0d:
return '7';
break;
case 0x0e:
return '8';
break;
}
PORTC=0xdf;
e=PINC&0x0f;
switch (e)
{
case 0x07:
   return '9';
break;
case 0x0b:
return '0';
break;
case 0x0d:
return 'a';
break;
case 0x0e:
return 'b';
break;
}
PORTC=0xef;
e=PINC&0x0f;
switch (e)
{
case 0x07:
   return 'c';
break;
case 0x0b:
return 'd';
break;
case 0x0d:
return 'e';
break;
case 0x0e:
return 'f';
break;
default:
return 'z';
break;
}
    }
void cmd(int a)
{
PORTB=a;
PORTA=0x02;
_delay_ms(200);
PORTA=0x00;
}
void data(char s)
{
PORTB=s;
PORTA=0x03;
_delay_ms(200);
PORTA=0x01;
}

No comments:

Post a Comment