как подключит LCD на пины разных портов?

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
Открыл глаза
Сообщения: 61
Зарегистрирован: Вт авг 25, 2009 08:14:38

Сообщение zsxdcf »

товарищи!
Работаю в CVAVR, подключаю LCD 2x16 к ATmega8 в четыркх проводный режим передачи данных с помощью WIZARD, однако мне необходимо соединить выводы LCD на другие рины(на пины разных портов).
Мне когдато указали ,что нужно найти в папке CVAVR lcd, и там вести изменения .
С тех пор, как не стараюсь, самому это сделать не получается .
Помогите пожалуйсто примером ,или укажите ссылку, дге можно все это выйснить?
Т.е. как подлключить LCD на произвольные пины и инициализировать ,чтобы она также работала как при "стандартном" включении?
Заранее благодарен.
Реклама
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 1900
Зарегистрирован: Сб фев 21, 2009 13:11:40
Откуда: Москва

Сообщение ibiza11 »

Несколько вариантов:
1. править стандартную библиотеку (в том числе и команду вывода в портЫ, поскольку в стандартной используется только один)
2. писать свою библиотеку
3. переходи на асм:)
Ставим плюсы: )
Реклама
Открыл глаза
Сообщения: 61
Зарегистрирован: Вт авг 25, 2009 08:14:38

Сообщение zsxdcf »

Конечно большое спасибо за отзыв ,но в том то и дело, что не знаю как пркточескй все это проделать.Куды хрестьянину податься.
GP1
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2401
Зарегистрирован: Пт май 23, 2008 19:32:22
Откуда: Россия, Волгоград

Сообщение GP1 »

Тогда лепи как есть :roll:
Чем дальше, тем больше становлюсь занудой...
Изображение
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
Родился
Сообщения: 8
Зарегистрирован: Вс апр 11, 2010 09:36:18

Сообщение kontroller »

Можешь воспользоваться моей библиотекой.
Может быть не совсем проффесионально выполнена, но работоспособна
Если необходимо, добавлю коментарии


#include <delay.h>
//здесь определяем какой пин куда
#define rs PORTB.4
#define ddr_rs DDRB.4
#define e PORTC.7
#define ddr_e DDRC.7

#define d0 PORTB.3
#define ddr_d0 DDRB.3
#define d1 PORTB.2
#define ddr_d1 DDRB.2
#define d2 PORTB.1
#define ddr_d2 DDRB.1
#define d3 PORTB.0
#define ddr_d3 DDRB.0
//сигнал rw не использую

//**********************************************************************
//строб записи
void pulse_e(void)
{
e=1;
delay_us(2);
e=0;
delay_us(2);
}

void lcd_out(char d)
{
d0=0;
d1=0;
d2=0;
d3=0;
if(d&0x01)d0=1;
if(d&0x02)d1=1;
if(d&0x04)d2=1;
if(d&0x08)d3=1;
pulse_e();
}
//посылка команды
void lcd_com(unsigned char d)
{
lcd_out(d>>4);
lcd_out(d&0b00001111);
delay_us(45);
}
//посылка данных
void lcd_dat(unsigned char d)
{
rs=1;//режим передачи данных
lcd_com(d);
rs=0;//вернуть режим передачи команды
}
//******************************************************************
void lcd_init(void)
{unsigned char r;
//инициализация выходов
e=0;
rs=0;
ddr_rs=1;
ddr_e=1;
ddr_d0=1;
ddr_d1=1;
ddr_d2=1;
ddr_d3=1;
delay_ms(15);
lcd_out(0x02);
delay_ms(15);
lcd_out(0x03);
delay_ms(15);
lcd_out(0x03);
delay_ms(15);
lcd_out(0x02);
delay_ms(45);
lcd_com(0x28);
lcd_com(0x01);
delay_us(1640);
lcd_com(0x0C);
delay_us(40);
}
//****************************************************
void lcd_pos (unsigned char x,unsigned char y)
{unsigned char k;
if (y==0) k=0x80|(x&0b00001111);
else k=0xC0|(x&0b00001111);
lcd_com(k);
delay_ms(1);
}
//****************************************************
//вывод числа в заданом месте
void LcdInt(unsigned int d,char x,char y)
{ char s[3];
s[0]=(d/100)%10+0x30;
s[1]=(d/10)%10+0x30;
s[2]=(d/1)%10+0x30;
if(s[0]=='0'){s[0]=' ';if(s[1]=='0')s[1]=' ';}
lcd_pos(x,y);
lcd_dat(s[0]);
lcd_dat(s[1]);
lcd_dat(s[2]);
}
//****************************************************
//Вывод строки
void LcdStr( flash char *p,char x,char y)
{char d,i;
lcd_pos(x,y);i=0;
while(*p)lcd_dat(*p++);
}
//****************************************************
Реклама
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»