Перейти к содержанию
    

Русские буквы в Hi-tech

Доброго времени суток.

 

Озадачился вывести русские буквы на LCD (HD...).

const unsigned char ruTable [] = 
 {
'А', 'Б', 'В', 'Г', 'Д', 'Е', 'Ё', 'Ж', 'З', 'И', 
'Й', 'К', 'Л', 'М', 'Н', 'О', 'П', 'Р', 'С', 'Т', 
'У', 'Ф', 'Х', 'Ц', 'Ч', 'Ш', 'Щ', 'Ь', 'Ы', 'Ъ', 
'Э', 'Ю', 'Я',
'а', 'б', 'в', 'г', 'д', 'е', 'ё', 'ж', 'з', 'и', 
'й', 'к', 'л', 'м', 'н', 'о', 'п', 'р', 'с', 'т', 
'у', 'ф', 'х', 'ц', 'ч', 'ш', 'щ', 'ь', 'ы', 'ъ', 
'э', 'ю', 'я', 
 };

const unsigned char LCDSM [] = 
 {
0x41, 0xA0, 0x42, 0xA1, 0xE0, 0x45, 0xA2, 0xA3, 0xA4, 0xA5,
0xA6, 0x4B, 0xA7, 0x4D, 0x48, 0x4F, 0xA8, 0x50, 0x43, 0x54,
0xA9, 0xAA, 0x58, 0xE1, 0xAB, 0xAC, 0xE2, 0x62, 0xAE, 0xAD,
0xAF, 0xB0, 0xB1,
0x61, 0xB2, 0xB3, 0xB4, 0xE3, 0x65, 0xB5, 0xB6, 0xB7, 0xB8,
0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0x6F, 0xBE, 0x70, 0x63, 0xBF,
0x79, 0xE4, 0x78, 0xE5, 0xC0, 0xC1, 0xE6, 0xC4, 0xC3, 0xC2,
0xC5, 0xC6, 0xC7,
 };

unsigned char  RuToLCD ( unsigned char sim )
{
 unsigned char i;
 for ( i = 0; i < sizeof ( ruTable ); i++ )
  {
  if ( sim == ruTable [ i ] ) 
  return ( LCDSM[ i ] );
  }
 return ( sim );
}

 

Сам механизи работает нормально, компилил gcc, все работает.

Hi-tech тоже компилит без ошибок, но вот работать отказывается,

выводит абракадабру.

Не ужто Hi-tech(9.60 std) не понимает русские буквы?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

...Не ужто Hi-tech(9.60 std) не понимает русские буквы?

Не понимает из-за различий в ASCII таблицах. (кстати буквы эти не "русские", а кириллические) А зачем перебирать каждый раз всю таблицу? Можно сделать и так:

const unsigned char TEXT[51][5] ={0x00, 0x00, 0x00, 0x00, 0x00, // SPACE
					 0x00, 0x00, 0x4F, 0x00, 0x00, // ! 
					 0x00, 0x03, 0x00, 0x03, 0x00, // "
					 0x14, 0x3E, 0x14, 0x3E, 0x14, // #
					 0x3C, 0x42, 0x42, 0x42, 0x24, // $
					 0x26, 0x16, 0x08, 0x34, 0x32, // %
					 0x36, 0x49, 0x55, 0x22, 0x50, // &
					 0x7F, 0x48, 0x48, 0x48, 0x30, // '
					 0x00, 0x1C, 0x22, 0x41, 0x00, // (
					 0x00, 0x41, 0x22, 0x1C, 0x00, // )
					 0x14, 0x08, 0x3E, 0x08, 0x14, // *
					 0x08, 0x08, 0x3E, 0x08, 0x08, // +
					 0x00, 0x50, 0x30, 0x00, 0x00, // ,
					 0x08, 0x08, 0x08, 0x08, 0x08, // -
					 0x00, 0x60, 0x60, 0x00, 0x00, // .
					 0x20, 0x10, 0x08, 0x04, 0x02, // /
					 0x3E, 0x51, 0x49, 0x45, 0x3E, // 0
					 0x04, 0x02, 0x7F, 0x00, 0x00, // 1
					 0x42, 0x61, 0x51, 0x49, 0x46, // 2
					 0x22, 0x41, 0x49, 0x49, 0x36, // 3
					 0x18, 0x14, 0x12, 0x12, 0x7F, // 4
					 0x4F, 0x49, 0x49, 0x49, 0x31, // 5
					 0x3E, 0x49, 0x49, 0x49, 0x32, // 6
					 0x01, 0x01, 0x71, 0x09, 0x07, // 7
					 0x36, 0x49, 0x49, 0x49, 0x36, // 8
					 0x26, 0x49, 0x49, 0x49, 0x3E, // 9
					 0x00, 0x36, 0x36, 0x00, 0x00, // :
					 0x00, 0x56, 0x36, 0x00, 0x00, //;
					 0x08, 0x14, 0x22, 0x41, 0x00, // <
					 0x14, 0x14, 0x14, 0x14, 0x14, // =
					 0x7F, 0x08, 0x3E, 0x41, 0x3E, // Ю  >
					 0x02, 0x01, 0x51, 0x09, 0x06, // ?
					 0x3E, 0x41, 0x59, 0x55, 0x5E, // @
					 0x7E, 0x09, 0x09, 0x09, 0x7E, // A
					 0x7F, 0x49, 0x49, 0x49, 0x31, // B
					 0x3F, 0x20, 0x20, 0x3F, 0x60, // C
					 0x7E, 0x21, 0x21, 0x3E, 0x60, // D
					 0x7F, 0x49, 0x49, 0x49, 0x41, // E
					 0x7F, 0x09, 0x09, 0x09, 0x01, // F
					 0x7F, 0x01, 0x01, 0x01, 0x01, // G
					 0x7F, 0x08, 0x08, 0x08, 0x7F, // H
					 0x7F, 0x20, 0x10, 0x08, 0x7F, // I
					 0x77, 0x08, 0x7F, 0x08, 0x77, // J
					 0x7F, 0x08, 0x14, 0x22, 0x41, // K
					 0x70, 0x08, 0x04, 0x02, 0x7F, // L
					 0x7F, 0x02, 0x0C, 0x02, 0x7F, // M
					 0x7F, 0x08, 0x08, 0x08, 0x7F, // N
					 0x3E, 0x41, 0x41, 0x41, 0x3E, // O
					 0x7F, 0x01, 0x01, 0x01, 0x7F, // P
					 0x76, 0x09, 0x09, 0x09, 0x7F}; // Q


const unsigned char TEXT2[46][5]={0x7F, 0x09, 0x09, 0x09, 0x06,// R
					 0x3E, 0x41, 0x41, 0x41, 0x22, // S
					 0x01, 0x01, 0x7F, 0x01, 0x01, // T
					 0x27, 0x48, 0x48, 0x48, 0x3F, // U
					 0x7F, 0x49, 0x49, 0x49, 0x36, // V
					 0x7F, 0x20, 0x11, 0x08, 0x7F, // Й
					 0x41, 0x22, 0x1C, 0x22, 0x41, // X
					 0x07, 0x08, 0x70, 0x08, 0x07, // Y
					 0x61, 0x51, 0x49, 0x45, 0x43, // Z
					 0x7F, 0x48, 0x70, 0x00, 0x7F, // Ы [
					 0x0F, 0x10, 0x10, 0x10, 0x7F, // обр. черта
					 0x22, 0x49, 0x49, 0x49, 0x3E, // Э ]
					 0x04, 0x02, 0x01, 0x02, 0x04, // ^
					 0x0F, 0x10, 0x10, 0x10, 0x7F, // Ч  _
					 0x00, 0x0C, 0x12, 0x12, 0x0C, // `
					 0x20, 0x54, 0x54, 0x54, 0x78, // a
					 0x7F, 0x44, 0x44, 0x44, 0x38, // b
					 0x38, 0x44, 0x44, 0x44, 0x44, // c
					 0x38, 0x44, 0x44, 0x44, 0x7F, // d
					 0x38, 0x54, 0x54, 0x54, 0x18, // e
					 0x04, 0x04, 0x7E, 0x05, 0x05, // f
					 0x08, 0x54, 0x54, 0x54, 0x3C, // g
					 0x7F, 0x08, 0x04, 0x04, 0x78, // h
					 0x00, 0x44, 0x7D, 0x40, 0x00, // i
					 0x20, 0x40, 0x44, 0x3D, 0x00, // j
					 0x7F, 0x10, 0x28, 0x44, 0x00, // k
					 0x00, 0x41, 0x7F, 0x40, 0x00, // l
					 0x7C, 0x04, 0x78, 0x04, 0x78, // m
					 0x7C, 0x08, 0x04, 0x04, 0x78, // n
					 0x38, 0x44, 0x44, 0x44, 0x38, // o
					 0x7C, 0x14, 0x14, 0x14, 0x08, // p
					 0x08, 0x14, 0x14, 0x14, 0x7C, // q
					 0x00, 0x7C, 0x08, 0x04, 0x04, // r
					 0x48, 0x54, 0x54, 0x54, 0x20, // s
					 0x04, 0x04, 0x3F, 0x44, 0x44, // t
					 0x3C, 0x40, 0x40, 0x20, 0x7C, // u
					 0x1C, 0x20, 0x40, 0x20, 0x1C, // v
					 0x3C, 0x40, 0x30, 0x40, 0x3C, // w
					 0x44, 0x28, 0x10, 0x28, 0x44, // x
					 0x0C, 0x50, 0x50, 0x50, 0x3C, // y
					 0x44, 0x64, 0x54, 0x4C, 0x44, // z
					 0x00, 0x08, 0x36, 0x41, 0x41, // {
					 0x00, 0x00, 0x7F, 0x00, 0x00, // |
					 0x41, 0x41, 0x36, 0x08, 0x00, // }
					 0x02, 0x01, 0x02, 0x04, 0x02,// ~
					 0x3E, 0x5D, 0x55, 0x55, 0x3E};//CW

void lcd_text57(unsigned char x, unsigned char y, const unsigned char * textptr, unsigned char color){
static unsigned char j;
j = 0;
while (*textptr != 0){
	lcd_symb(x + j, y, *textptr, color);
	j += 5;
	lcd_byte(0, x + j, y, color);
	textptr += 1;
	j += 1;
}
}
void lcd_symb(unsigned char x, unsigned char y, unsigned char s, unsigned char color){
static unsigned char l, t;
for (l = 0; l < 5; l++){
	if (s < 'R'){
		t = s - ' ';
		lcd_byte(TEXT[t][l], x + l, y, color);
	}
	else if (s <= '~'){ 
		t = s - 'R';
		lcd_byte(TEXT2[t][l], x + l, y, color);
	}
	else lcd_byte(TEXT[0][l], x + l, y, color);
}
}

 

подменив (там, где нужно) латинские буквы кириллическими.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А зачем выводить буквы отдельно? Я обычно поступаю так:

 

const char privet [ ] = {"Привет"};

unsigned char buff [16];

sprintf (buff, privet);

 

остается организовать вывод потока на индикатор.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вы в курсе, что у LCD кодировка русских букв НЕ СОВПАДАЕТ ни с одной кодировкой этих букв из мира PC? Да и буквы там далеко не все. Так что если просто записать в индикатор нечто русское, то получится нечто неопределенное.

Изменено пользователем XVR

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

у LCD кодировка русских букв НЕ СОВПАДАЕТ ни с одной кодировкой этих букв из мира PC

Ну! Не стоит так категорично. Вполне распространены 866 (OEM), KOI-8. Даже ANSI-1251 попадаются...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну! Не стоит так категорично. Вполне распространены 866 (OEM), KOI-8. Даже ANSI-1251 попадаются...
Хорошо, перефразирую - у случайно взятого LCD индикатора кодировка русских букв будет случайной (или ее вообще не будет) :laughing:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

у случайно взятого LCD индикатора кодировка русских букв будет случайной (или ее вообще не будет)

:lol:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...