реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> LCD Перекодировка текста не получается, Proteus & LCD не перекодирует помогите.
new
сообщение Aug 14 2007, 09:22
Сообщение #1





Группа: Новичок
Сообщений: 14
Регистрация: 14-02-07
Пользователь №: 25 343



Помогите разобратся в чем проблема, не перекодируется текст, или Proteus или у меня глючит.

Код
#include <mega16.h>
#include <delay.h>
#include <stdio.h>


// Alphanumeric LCD Module functions
#asm
   .equ __lcd_port=0x15;PORTC
#endasm
#include <lcd.h>


// Таблица перекодировки из кодовой таблицы 1251

unsigned int const TabWin[256] = {
0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf,   // псевдографика
0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7,   // псевдографика
0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf,   // псевдографика
0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee,   // псевдографика
0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6,   // псевдографика
0xa2, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd,   // Ё    псевдографика
0xfe, 0xff, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec,   // псевдографика
0xb5, 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xfd, 0xff,   // ё    псевдографика
0x41, 0xa0, 0x42, 0xa1, 0xe0, 0x45, 0xa3, 0xa4,   // АБВГДЕЖЗ
0xa5, 0xa6, 0x4b, 0xa7, 0x4d, 0x48, 0x4f, 0xa8,   // ИЙКЛМНОП
0x50, 0x43, 0x54, 0xa9, 0xaa, 0x58, 0xe1, 0xab,   // РСТУФХЦЧ
0xac, 0xe2, 0xad, 0xae, 0x62, 0xaf, 0xb0, 0xb1,   // ШЩЪЫЬЭЮЯ
0x61, 0xb2, 0xb3, 0xb4, 0xe3, 0x65, 0xb6, 0xb7,   // абвгдежз
0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0x6f, 0xbe,   // ийклмноп
0x70, 0x63, 0xbf, 0x79, 0xe4, 0x78, 0xe5, 0xc0,   // рстуфхцч
0xc1, 0xe6, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7    // шщъыьэюя
};

flash unsigned char t1[] = "= Приветствие! Проверка Бегущей строки на LCD =";

void main(void)
{
// Declare your local variables here
unsigned char c;
unsigned int b;
unsigned char i;
// Input/Output Ports initialization
PORTA=0x00;
DDRA=0xFF;

PORTB=0x00;
DDRB=0xFF;

PORTC=0x00;
DDRC=0x00;

PORTD=0x00;
DDRD=0x00;

// Timer/Counter 0 initialization
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;

// Timer/Counter 1 initialization
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

// Timer/Counter 2 initialization
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;

// External Interrupt(s) initialization
MCUCR=0x00;
MCUCSR=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;

// Analog Comparator initialization
ACSR=0x80;
SFIOR=0x00;

// ADC initialization
ADMUX=0;
ADCSRA=0x87;

// LCD module initialization
lcd_init(16);

while (1){
//***********************************************************
//       Вывод Бегущей строки
//***********************************************************        

for(c=0; c<32; c++){
for (lcd_gotoxy(0,1),b=0; b<16; b++){
i = (t1[c+b]);
if(i>=0x80){        // Если символ не латинский то,
  i -= 0x80;        // уменьшаем таблицу
  i = TabWin[i];        // Перекодировать
  }     
lcd_putchar(i);
delay_ms(15);
  }
  }
}
}

Прикрепил файл в Proteuse
Прикрепленные файлы
Прикрепленный файл  LCD.rar ( 68.99 килобайт ) Кол-во скачиваний: 68
 
Go to the top of the page
 
+Quote Post
new
сообщение Aug 14 2007, 15:58
Сообщение #2





Группа: Новичок
Сообщений: 14
Регистрация: 14-02-07
Пользователь №: 25 343



Что-то, ни кто ничего не прокомментировал.

Скажите, может в коде где ошибка. Компилятор CVAVR.
Go to the top of the page
 
+Quote Post
singlskv
сообщение Aug 14 2007, 16:05
Сообщение #3


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



не суетитесь smile.gif
просто в соседних постах мы решаем "мировые" проблемы biggrin.gif
как надоест, обязательно обсудим и Вашу
ждите ответа...
Цитата(new @ Aug 14 2007, 19:58) *
Что-то, ни кто ничего не прокомментировал.

Скажите, может в коде где ошибка. Компилятор CVAVR.
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Aug 14 2007, 16:17
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Узнаю свою таблицу. smile.gif
А что значит "не перекодирует"? Что-то не понимаю?
Go to the top of the page
 
+Quote Post
singlskv
сообщение Aug 14 2007, 16:21
Сообщение #5


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



OFF: biggrin.gif
Цитата(SasaVitebsk @ Aug 14 2007, 20:17) *
Узнаю свою таблицу. smile.gif

OFF: вот я же обесчал что сейчас подтянутся biggrin.gif
Go to the top of the page
 
+Quote Post
new
сообщение Aug 14 2007, 18:01
Сообщение #6





Группа: Новичок
Сообщений: 14
Регистрация: 14-02-07
Пользователь №: 25 343



//А что значит "не перекодирует"? Что-то не понимаю?

Вроде как после перекодировки на LCD должна бежать строка по русски а она все равно остается не читаемой, выводит эроглифы кторые по умолчанию в занкогенераторе
Go to the top of the page
 
+Quote Post
676038
сообщение Aug 14 2007, 18:22
Сообщение #7


Участник
*

Группа: Участник
Сообщений: 31
Регистрация: 25-07-06
Пользователь №: 19 070



В Протеусе модели LCD не содержат кириллицы, потому и видишь вместо нее не то, что надо. Попробуй на настоящем железе, все должно быть нормально.
Go to the top of the page
 
+Quote Post
new
сообщение Aug 14 2007, 18:43
Сообщение #8





Группа: Новичок
Сообщений: 14
Регистрация: 14-02-07
Пользователь №: 25 343



[quote name='676038' date='Aug 14 2007, 21:22' post='283186']
В Протеусе модели LCD не содержат кириллицы, ......
[/quoеуъ

Вот с железом пока напряг, жду STK500 по рекламной акции ATMEL
Интересно, но ведь есть LCD которые содержат кирилицу и есть в которых её нет,
я так понимаю если LCD содержит кирилицу то и не надо ничего перекодировать текст и так будет
выводится по русски.

И еще если скачать приатаченый файл и запустить, то можно увидеть что некоторые буквы в бегущей строке всетаки перекодировались, для сравнения можно условие if закоментировать, и посмотреть строку без перекодировки.

Завтра сделаю так чтобы в в верхней строке LCD строка бежала без перекодировки а в нижне после перекодировки
Go to the top of the page
 
+Quote Post
676038
сообщение Aug 14 2007, 18:58
Сообщение #9


Участник
*

Группа: Участник
Сообщений: 31
Регистрация: 25-07-06
Пользователь №: 19 070



Для вывода кириллицы понадобится перекодировка в любом случае, т.к. у LCD с кириллицей совсем не виндовая кодировка, это можно увидеть из любого даташита на LCD с кириллицей.
Те символы, которые выводятся правильно - просто имеют аналог в латинице (например P->Р, H->Н). Кстати, это может свидетельствовать о том, что перекодировка все же выполняется.
Go to the top of the page
 
+Quote Post
bezobraznic
сообщение Aug 14 2007, 19:14
Сообщение #10


Частый гость
**

Группа: Участник
Сообщений: 169
Регистрация: 26-05-05
Пользователь №: 5 441



Замени модель из протеуса на модель из файла и получи оргазм!!!!! И ещё, зачем таблица, есть в cvavre диретивы #pragma rl+ и #pragma rl- компилятор сам это делает.
Прикрепленные файлы
Прикрепленный файл  proteuslcdalpha.rar ( 35.56 килобайт ) Кол-во скачиваний: 70
 
Go to the top of the page
 
+Quote Post
new
сообщение Aug 14 2007, 19:25
Сообщение #11





Группа: Новичок
Сообщений: 14
Регистрация: 14-02-07
Пользователь №: 25 343



Всем спасибо
Если честно то я до сих пор толком не понял как происходит перекодировка, я нигде не нашел более менее нормального описания этого процеса, приходится все делять методом тыка,
и еще можно хотя бы в двух словах о дерективах #pragma rl+ и #pragma rl- как их использовать
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Aug 14 2007, 19:32
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



А в общем-то вы все не правы. smile.gif Так как у меня написано не требуется перекодировки протеуса и т.п.
У меня вообще на IAR написано и перекодировка осуществляется. Она же программная. Именно поэтому никакие pragma и не нужны. На прогу внимательнее посмотрите. Может у Вас CV ещё раз перекодирует - это другое дело. Тогда надо эту перекодировку выключить.
Go to the top of the page
 
+Quote Post
bezobraznic
сообщение Aug 14 2007, 19:41
Сообщение #13


Частый гость
**

Группа: Участник
Сообщений: 169
Регистрация: 26-05-05
Пользователь №: 5 441



Цитата(new @ Aug 14 2007, 22:25) *
можно хотя бы в двух словах о дерективах #pragma rl+ и #pragma rl- как их использовать


#pragma rl+
lcd_putsf("По РРусски!!!!!");
#pragma rl-(можно не ставить)
Go to the top of the page
 
+Quote Post
new
сообщение Aug 15 2007, 07:13
Сообщение #14





Группа: Новичок
Сообщений: 14
Регистрация: 14-02-07
Пользователь №: 25 343



#pragma rl+ c функцией lcd_putsf("русская буква е"); работает (работает также как и по таблице, только пару символов перекодирует)
а вот с функцией lcd_putchar('е'); не работает, на экран вообще ничего не выводит

Сообщение отредактировал new - Aug 15 2007, 07:38
Go to the top of the page
 
+Quote Post
676038
сообщение Aug 15 2007, 08:11
Сообщение #15


Участник
*

Группа: Участник
Сообщений: 31
Регистрация: 25-07-06
Пользователь №: 19 070



Цитата(new @ Aug 15 2007, 13:13) *
#pragma rl+ c функцией lcd_putsf("русская буква е"); работает (работает также как и по таблице, только пару символов перекодирует)
а вот с функцией lcd_putchar('е'); не работает, на экран вообще ничего не выводит


Замени библиотеку в Протеусе, как советовал bezobraznic выше
Go to the top of the page
 
+Quote Post
new
сообщение Aug 15 2007, 08:51
Сообщение #16





Группа: Новичок
Сообщений: 14
Регистрация: 14-02-07
Пользователь №: 25 343



По совету bezobraznic заменил библиотеку, но там в знакогенераторе прошиты символы кириллицы,
а мне хотелось полностью разобраться как вывести русскую строку если занкогенератор не содержит
символов кириллицы.
Вопрос остался открытым.
Возможно косяк в CVAVR или в PROTEUSE.
Буду ждать STK500 и тогда пробовать в железе
Всем спасибо.

Сообщение отредактировал new - Aug 15 2007, 09:20
Go to the top of the page
 
+Quote Post
676038
сообщение Aug 15 2007, 12:45
Сообщение #17


Участник
*

Группа: Участник
Сообщений: 31
Регистрация: 25-07-06
Пользователь №: 19 070



Цитата(new @ Aug 15 2007, 14:51) *
По совету bezobraznic заменил библиотеку, но там в знакогенераторе прошиты символы кириллицы,
а мне хотелось полностью разобраться как вывести русскую строку если занкогенератор не содержит
символов кириллицы...

если занкогенератор не содержит символов кириллицы, то отобразить такие символы невозможно (ведь контроллер LCD может отобразить только те символы, о которых знает).

Для отдельных извращенцев остается способ перепрограммирования знакогенератора, но так можно перепрограммировать только 8 или 16 (не помню точно) первых символов, остальные зашиты намертво. Поэтому можно перед выводом нужного символа запрограммировать начертание этого символа в пользовательской области знакогенератора, а затем отобразить его... Но зачем бороться с ветряными мельницами?
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 28th July 2025 - 11:08
Рейтинг@Mail.ru


Страница сгенерированна за 0.01492 секунд с 7
ELECTRONIX ©2004-2016