#include <avr/io.h>
#define RS PC2
#define E PC0
#define TIME 2
//_______________________________________________
void pause(unsigned int a)
{
unsigned int count;
for (count = a; count>0; count--);
}
//_______________________________________________
//запись команды
void lcd_com(unsigned char p)
{
PORTC &= ~_BV(RS);
PORTC |= _BV(E);
PORTD = p;
pause(TIME);
PORTC &= ~_BV(E);
pause(5*TIME);
}
//_______________________________________________
//запись данных
void lcd_data(unsigned char p)
{
PORTC |= _BV(RS) | _BV(E);
PORTD = p;
pause(TIME);
PORTC &= ~_BV(E);
pause(5*TIME);
}
//_______________________________________________
//инициализация
void lcd_init(void)
{
lcd_com(0x08);
lcd_com(0x38);
pause(1000*TIME); //4.1 ms
lcd_com(0x38);
pause(30*TIME); //100us
lcd_com(0x38);
lcd_com(0x38);
lcd_com(0x01);
pause(1000*TIME);
lcd_com(0x0C);
lcd_com(0x06);
}
//_______________________________________________
//основная часть программы
unsigned int i;
int main(void)
{
PORTB = DDRD = 0xFF; //
PORTC = 0xF8; DDRC = 0x07;
lcd_init();
while(1)
{
for(i=0xC0;i<=0xD4;i++)
{
lcd_com(i);
lcd_data('o');
lcd_com(i-1);
lcd_data(' ');
pause(31000*TIME);
}
}
return (0) ;
}
_______________________________________________
_______________________________________________
_______________________________________________
Вот вопросик состоит в том, что при этих положениях строк:
lcd_com(i);
lcd_data('o');
lcd_com(i-1);
lcd_data(' ');
символ бежит со второго разряда 2-ой строчки
Если их поменять местами:
lcd_com(i-1);
lcd_data(' ');
lcd_com(i);
lcd_data('o');
то тогда все нормально.
Не пойму, что не так? Сижу туплю - перегрелся что ли
