Библиотека LCD для CodeVision
-
Alex_ka
- Нашел транзистор. Понюхал.
- Сообщения: 193
- Зарегистрирован: Ср сен 04, 2019 17:59:23
- Откуда: Гомель
Библиотека LCD для CodeVision
Для одной стендовой конструкции, при написании программы пришлось задействовать Т0, Т1 и Т2. На ATmega8 подключить индикатор проблем не составила, но для Tiny2313 применить стандартную библиотеку не получается, так как порты PB используются как выхода сигналов определённых частот и индикатор надо подключать к порту PD, а там не 8 выходов, а семь. Открыл библиотеку, посмотрел как баран на неё и закрыл. Помогите или подскажите, как в стандартной библиотеке сместить порт, т.е. чтобы D4 индикатора подключался не к PD4 контроллера и далее по порядку, а к PD3 и следующие по порядку со смещением на один порт по сравнению со стандартной библиотекой.

- Вложения
-
- LCD.zip
- (1.46 КБ) 174 скачивания
Re: Библиотека LCD для CodeVision
Там любые порты можно назначать на любые сигналы LCD.
Не спрашивай по ком звонит колокол, он звонит по тебе !
-
Alex_ka
- Нашел транзистор. Понюхал.
- Сообщения: 193
- Зарегистрирован: Ср сен 04, 2019 17:59:23
- Откуда: Гомель
Re: Библиотека LCD для CodeVision
Где в библиотеке это исправить?
-
codenamehawk
- Вымогатель припоя
- Сообщения: 527
- Зарегистрирован: Вт фев 09, 2010 17:52:26
Re: Библиотека LCD для CodeVision
Где в библиотеке это исправить?
CodeWizard? Не не слышал. Интересно как вы его (lcd) подключили.
-
Alex_ka
- Нашел транзистор. Понюхал.
- Сообщения: 193
- Зарегистрирован: Ср сен 04, 2019 17:59:23
- Откуда: Гомель
Re: Библиотека LCD для CodeVision
CodeVisionAVR. LCD 16х2 подключается с помощью библиотеки <lcd.h>.
#asm
.equ __lcd_port=0x12;PORTD
#endasm
12, 15 и 18 указывают подключение к портам D, С и В. Дальше инициализация lcd_init(16) и всё, пиши что хочешь выводить.
#asm
.equ __lcd_port=0x12;PORTD
#endasm
12, 15 и 18 указывают подключение к портам D, С и В. Дальше инициализация lcd_init(16) и всё, пиши что хочешь выводить.
-
codenamehawk
- Вымогатель припоя
- Сообщения: 527
- Зарегистрирован: Вт фев 09, 2010 17:52:26
Re: Библиотека LCD для CodeVision
Проще так:
-
Alex_ka
- Нашел транзистор. Понюхал.
- Сообщения: 193
- Зарегистрирован: Ср сен 04, 2019 17:59:23
- Откуда: Гомель
Re: Библиотека LCD для CodeVision
Что здесь проще? Там инициализация 8-ми символьного LCD и пустые пояснения в программе.
Re: Библиотека LCD для CodeVision
#include <alcd.h>
вот так подключается библиотека лсд в кодевижн авр.
вот так подключается библиотека лсд в кодевижн авр.
Не спрашивай по ком звонит колокол, он звонит по тебе !
-
Alex_ka
- Нашел транзистор. Понюхал.
- Сообщения: 193
- Зарегистрирован: Ср сен 04, 2019 17:59:23
- Откуда: Гомель
Re: Библиотека LCD для CodeVision
Re: Библиотека LCD для CodeVision
Открываем ссылку на моё последнее .... и оно работает у других на симуляторе...
viewtopic.php?f=17&t=190090&p=4481509#p4481509
Там есть файл 1.с
Добавлено after 3 minutes 26 seconds:
Значит кто то подправил кривую библиотеку кодевижн , под нужды людей !
Добавлено after 2 minutes 12 seconds:
Я тоже исправлял какуюто библиотеку под русский язык, но это было для пик ссс
viewtopic.php?f=17&t=190090&p=4481509#p4481509
Там есть файл 1.с
Добавлено after 3 minutes 26 seconds:
Alex_ka писал(а):ткрываем инструкцию по пользованию программой CodeVision п.5.15.1
и охреневаем, там библиотека lcd.h и буквы "а" впереди никакой нет.
Значит кто то подправил кривую библиотеку кодевижн , под нужды людей !
Добавлено after 2 minutes 12 seconds:
Я тоже исправлял какуюто библиотеку под русский язык, но это было для пик ссс
Не спрашивай по ком звонит колокол, он звонит по тебе !
-
Alex_ka
- Нашел транзистор. Понюхал.
- Сообщения: 193
- Зарегистрирован: Ср сен 04, 2019 17:59:23
- Откуда: Гомель
Re: Библиотека LCD для CodeVision
Открываем ссылку на моё последнее .... и оно работает у других на симуляторе...
Значит кто то подправил кривую библиотеку кодевижн , под нужды людей !
Добавлено after 2 minutes 12 seconds:
Я тоже исправлял какуюто библиотеку под русский язык, но это было для пик ссс
Никто эту библиотеку LCD не правил. Она существует с версии 1.24, ниже у меня нет и до версии 3.14. Под русский язык библиотеку в CodeVision править нет смысла, так как перевод на русский там прописывается в экзешнике программы и русский заканчивается на версии 1.24, в которой перед написанием русского текста необходимо прописать #pragma rl+ и закрыть написание #pragma rl- . В последующих версиях русский отсутствует.Значит кто то подправил кривую библиотеку кодевижн , под нужды людей !
Добавлено after 2 minutes 12 seconds:
Я тоже исправлял какуюто библиотеку под русский язык, но это было для пик ссс
-
codenamehawk
- Вымогатель припоя
- Сообщения: 527
- Зарегистрирован: Вт фев 09, 2010 17:52:26
Re: Библиотека LCD для CodeVision
Что здесь проще? Там инициализация 8-ми символьного LCD и пустые пояснения в программе.
Проще, так как позволяет сделать то, что спрашиваете в первом посте.
Пояснения проще и полезней всего смотреть в справке.
The following LCD formats are supported in alcd.h: 1x8, 2x12, 3x12, 1x16, 2x16, 2x20, 4x20, 2x24 and 2x40 characters.
-
Alex_ka
- Нашел транзистор. Понюхал.
- Сообщения: 193
- Зарегистрирован: Ср сен 04, 2019 17:59:23
- Откуда: Гомель
Re: Библиотека LCD для CodeVision
Пояснения проще и полезней всего смотреть в справке.
Причём здесь смотреть? Или не понятно я написал что надо? Могу больше сказать, что я препалагаю, что изменить библиотеку нельзя, так это подключение прописано в компиляторе. Но, а вдруг у кого-то есть решение.The following LCD formats are supported in alcd.h: 1x8, 2x12, 3x12, 1x16, 2x16, 2x20, 4x20, 2x24 and 2x40 characters.
-
codenamehawk
- Вымогатель припоя
- Сообщения: 527
- Зарегистрирован: Вт фев 09, 2010 17:52:26
Re: Библиотека LCD для CodeVision
Могу больше сказать, что я препалагаю, что изменить библиотеку нельзя, так это подключение прописано в компиляторе.
Предположения ваши неверны.
Подключения прописаны не в компиляторе, а в самой библиотеке.
Не ясно зачем лезть в библиотеку, исходников которой нету в открытом доступе.
Библиотеку, если нет исходников, изменить сложнее(т.е. никто не запрещает ее изменить, если автор не в счет), чем написать библиотеку индикатора самому.
Alex_ka писал(а):Или не понятно я написал что надо?
Может это вы не понимаете, что вам советуют не лезть в библиотеку, если то что вы хотите, можно сделать на С, а точнее просто сконфигурировать в визарде и использовать на С.
-
Alex_ka
- Нашел транзистор. Понюхал.
- Сообщения: 193
- Зарегистрирован: Ср сен 04, 2019 17:59:23
- Откуда: Гомель
Re: Библиотека LCD для CodeVision
Предположения ваши неверны.
Подключения прописаны не в компиляторе, а в самой библиотеке.
Не ясно зачем лезть в библиотеку, исходников которой нету в открытом доступе.
Библиотеку, если нет исходников, изменить сложнее(т.е. никто не запрещает ее изменить, если автор не в счет), чем написать библиотеку индикатора самому.
Алло гараж. Библиотека выложена в первом сообщении. Вы там на какой волне находитесь? Открой этот файл и толкни умную мысль глядя на данные ассемблера.Подключения прописаны не в компиляторе, а в самой библиотеке.
Не ясно зачем лезть в библиотеку, исходников которой нету в открытом доступе.
Библиотеку, если нет исходников, изменить сложнее(т.е. никто не запрещает ее изменить, если автор не в счет), чем написать библиотеку индикатора самому.
Re: Библиотека LCD для CodeVision
Создай визардом проект, назначь пины какие хочешь на лсд, и не ипи мозги себе и людям !
Не спрашивай по ком звонит колокол, он звонит по тебе !
-
Alex_ka
- Нашел транзистор. Понюхал.
- Сообщения: 193
- Зарегистрирован: Ср сен 04, 2019 17:59:23
- Откуда: Гомель
Re: Библиотека LCD для CodeVision
Создай визардом проект, назначь пины какие хочешь на лсд, и не ипи мозги себе и людям !
Ты в адеквате или на своей волне. Тебе по названию темы не понятно, что речь идёт о CodeVision? Догадайся с первого раза куда я тебе посоветую заткнуть свой визард. Re: Библиотека LCD для CodeVision
Так а PD7 у вас где то ещё используется? Как вход, или как выход?
Спойлер
Код: Выделить всё
/* LCD driver routines
CodeVisionAVR C Compiler
(C) 1998-2004 Pavel Haiduc, HP InfoTech S.R.L.
*/
/*
подскажите, как в стандартной библиотеке сместить порт, т.е. чтобы D4 индикатора подключался не к PD4 контроллера и далее по порядку, а к PD3 и следующие по порядку со смещением на один порт по сравнению со стандартной библиотекой.
*/
#asm
.equ __lcd_direction=__lcd_port-1
.equ __lcd_pin=__lcd_port-2
.equ __lcd_rs=0
.equ __lcd_rd=1
.equ __lcd_enable=2
.equ __lcd_busy_flag=6
#endasm
#pragma used+
static unsigned char _base_y[4]={0x80,0xc0};
unsigned char _lcd_x,_lcd_y,_lcd_maxx;
#pragma used-
static void _lcd_delay(void)
{
#asm
ldi r31,15
__lcd_delay0:
dec r31
brne __lcd_delay0
#endasm
}
void _lcd_ready(void)
{
#asm
in r26,__lcd_direction
andi r26,0b00000111 ;set as input
out __lcd_direction,r26
sbi __lcd_port,__lcd_rd ;RD=1
cbi __lcd_port,__lcd_rs ;RS=0
__lcd_busy:
#endasm
_lcd_delay();
#asm
sbi __lcd_port,__lcd_enable ;EN=1
#endasm
_lcd_delay();
#asm
in r26,__lcd_pin
cbi __lcd_port,__lcd_enable ;EN=0
#endasm
_lcd_delay();
#asm
sbi __lcd_port,__lcd_enable ;EN=1
#endasm
_lcd_delay();
#asm
cbi __lcd_port,__lcd_enable ;EN=0
sbrc r26,__lcd_busy_flag
rjmp __lcd_busy
#endasm
}
static void _lcd_write_nibble(void)
{
#asm
lsr r26
andi r26,0b01111000
or r26,r27
out __lcd_port,r26 ;write
sbi __lcd_port,__lcd_enable ;EN=1
#endasm
_lcd_delay();
#asm
cbi __lcd_port,__lcd_enable ;EN=0
#endasm
_lcd_delay();
}
void _lcd_write_data(unsigned char data)
{
#asm
cbi __lcd_port,__lcd_rd ;RD=0
in r26,__lcd_direction
ori r26,0b01111000 | (1<<__lcd_rs) | (1<<__lcd_rd) | (1<<__lcd_enable) ;set as output
out __lcd_direction,r26
in r27,__lcd_port
andi r27,0b00000111
ld r26,y ;data
#endasm
_lcd_write_nibble(); //RD=0, write MSN
#asm
ld r26,y
swap r26
#endasm
_lcd_write_nibble(); //write LSN
#asm
sbi __lcd_port,__lcd_rd ;RD=1
#endasm
}
/* write a byte to the LCD character generator or display RAM */
void lcd_write_byte(unsigned char addr, unsigned char data)
{
_lcd_ready();
_lcd_write_data(addr);
_lcd_ready();
#asm
sbi __lcd_port,__lcd_rs ;RS=1
#endasm
_lcd_write_data(data);
}
static void _lcd_read_nibble(void)
{
#asm
sbi __lcd_port,__lcd_enable ;EN=1
#endasm
_lcd_delay();
#asm
in r30,__lcd_pin ;read
cbi __lcd_port,__lcd_enable ;EN=0
#endasm
_lcd_delay();
#asm
andi r30,0b01111000
lsl r30
#endasm
}
static unsigned char lcd_read_byte0(void)
{
_lcd_delay();
_lcd_read_nibble(); // read MSN
#asm
mov r26,r30
#endasm
_lcd_read_nibble(); // read LSN
#asm
cbi __lcd_port,__lcd_rd ;RD=0
swap r30
or r30,r26
#endasm
}
/* read a byte from the LCD character generator or display RAM */
unsigned char lcd_read_byte(unsigned char addr)
{
_lcd_ready();
_lcd_write_data(addr);
_lcd_ready();
#asm
in r26,__lcd_direction
andi r26,0b00000111 ;set as input
out __lcd_direction,r26
sbi __lcd_port,__lcd_rs ;RS=1
#endasm
return lcd_read_byte0();
}
/* set the LCD display position x=0..39 y=0..3 */
void lcd_gotoxy(unsigned char x, unsigned char y)
{
_lcd_ready(); // RS=0
_lcd_write_data(_base_y[y]+x);
_lcd_x=x;
_lcd_y=y;
}
// clear the LCD
void lcd_clear(void)
{
_lcd_ready(); // RS=0
_lcd_write_data(2); // cursor home
_lcd_ready();
_lcd_write_data(0xc); // cursor off
_lcd_ready();
_lcd_write_data(1); // clear
_lcd_x=_lcd_y=0;
}
#pragma keep+
void lcd_putchar(char c)
{
#asm
push r30
push r31
ld r26,y
set
cpi r26,10
breq __lcd_putchar1
clt
#endasm
++_lcd_x;
if (_lcd_x>_lcd_maxx)
{
#asm("__lcd_putchar1:")
++_lcd_y;
lcd_gotoxy(0,_lcd_y);
#asm("brts __lcd_putchar0")
};
#asm
rcall __lcd_ready
sbi __lcd_port,__lcd_rs ;RS=1
ld r26,y
st -y,r26
rcall __lcd_write_data
__lcd_putchar0:
pop r31
pop r30
#endasm
}
#pragma keep-
// write the string str located in SRAM to the LCD
void lcd_puts(char *str)
{
char k;
while (k = *str++) lcd_putchar(k);
}
// write the string str located in FLASH to the LCD
void lcd_putsf(char flash *str)
{
char k;
while (k = *str++) lcd_putchar(k);
}
static void _long_delay(void)
{
#asm
clr r26
clr r27
__long_delay0:
sbiw r26,1 ;2 cycles
brne __long_delay0 ;2 cycles
#endasm
}
static void _lcd_init_write(unsigned char data)
{
#asm
cbi __lcd_port,__lcd_rd ;RD=0
in r26,__lcd_direction
ori r26,0b01111111 ;set as output
out __lcd_direction,r26
in r27,__lcd_port
andi r27,0b00000111
ld r26,y
#endasm
_lcd_write_nibble(); //RD=0, write MSN
#asm
sbi __lcd_port,__lcd_rd ;RD=1
#endasm
}
// initialize the LCD controller
unsigned char lcd_init(unsigned char lcd_columns)
{
#asm
cbi __lcd_port,__lcd_enable ;EN=0
cbi __lcd_port,__lcd_rs ;RS=0
#endasm
_lcd_maxx=lcd_columns;
_base_y[2]=lcd_columns+0x80;
_base_y[3]=lcd_columns+0xc0;
_long_delay();
_lcd_init_write(0x30);
_long_delay();
_lcd_init_write(0x30);
_long_delay();
_lcd_init_write(0x30);
_long_delay();
_lcd_init_write(0x20);
_long_delay();
_lcd_write_data(0x28);
_long_delay();
_lcd_write_data(4);
_long_delay();
_lcd_write_data(0x85);
_long_delay();
#asm
in r26,__lcd_direction
andi r26,0b00000111 ;set as input
out __lcd_direction,r26
sbi __lcd_port,__lcd_rd ;RD=1
#endasm
if (lcd_read_byte0() != 5) return 0;
_lcd_ready();
_lcd_write_data(6);
lcd_clear();
return 1;
}
-
Alex_ka
- Нашел транзистор. Понюхал.
- Сообщения: 193
- Зарегистрирован: Ср сен 04, 2019 17:59:23
- Откуда: Гомель
Re: Библиотека LCD для CodeVision
Мне надо LCD 16x2 на PB0-PB6 подключить к тине 2313, а PD, это я в качестве примера привёл. Но библиотека с версии 1.24, так как мне нужен русский на индикаторе.
Re: Библиотека LCD для CodeVision
Я библиотеку для вас исправил. Порт задаётся вне её. Так же как и тип LCD.