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

 
 
> 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
 
Start new topic
Ответов
bezobraznic
сообщение Aug 14 2007, 19:14
Сообщение #2


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

Группа: Участник
Сообщений: 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
Сообщение #3





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



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


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

Группа: Участник
Сообщений: 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
Сообщение #5





Группа: Новичок
Сообщений: 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
Сообщение #6


Участник
*

Группа: Участник
Сообщений: 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
Сообщение #7





Группа: Новичок
Сообщений: 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
Сообщение #8


Участник
*

Группа: Участник
Сообщений: 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

Сообщений в этой теме
- new   LCD Перекодировка текста не получается   Aug 14 2007, 09:22
- - new   Что-то, ни кто ничего не прокомментировал. Скажит...   Aug 14 2007, 15:58
|- - singlskv   не суетитесь просто в соседних постах мы решаем ...   Aug 14 2007, 16:05
- - SasaVitebsk   Узнаю свою таблицу. А что значит "не перек...   Aug 14 2007, 16:17
|- - singlskv   OFF: Цитата(SasaVitebsk @ Aug 14 2007, 20...   Aug 14 2007, 16:21
|- - new   //А что значит "не перекодирует"? Что-то...   Aug 14 2007, 18:01
- - 676038   В Протеусе модели LCD не содержат кириллицы, потом...   Aug 14 2007, 18:22
|- - new   [quote name='676038' date='Aug 14 2007...   Aug 14 2007, 18:43
- - 676038   Для вывода кириллицы понадобится перекодировка в л...   Aug 14 2007, 18:58
- - SasaVitebsk   А в общем-то вы все не правы. Так как у меня на...   Aug 14 2007, 19:32


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

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 12:33
Рейтинг@Mail.ru


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