Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: keil 4.72 русские шрифты
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Cредства разработки для МК
Alex_Golubev
Привет.
Подскажите, что нужно сделать чтобы отображалась корректно русские шрифты в программе keil 4.72?
x893
В какой кодировке ?
UTF8 / UTF16 / 1251 / KOI8 ?
Вы определить какой у вас русский.
Alex_Golubev
Цитата
В какой кодировке ?
Кодировка ascii получается 1251.
Мне нужно выводить тексты на двухстрочный дисплей. Для этого нужна кириллица.
x893
Edit - Configuration
Encoding
Russian Windows 1251

А во что эти буквы компилируются - смотрите в bin/hex или отладчиком.
Alex_Golubev
Я смотрю что выводит мне дисплей. У меня нет Russian Windows 1251.
Obam
Вам не с кейлом, а с контроллером дисплея разбираться надо; в нём кириллицы вообще может не быть.
Alex_Golubev
В дисплее кириллица есть.
Obam
Цитата(Alex_Golubev @ Sep 11 2017, 17:10) *
В дисплее кириллица есть.

Тогда по даташиту дисплейного контроллера посмотреть как кодовую страницу в нём включить (рискну предположить cp866) или тупо
(если он нормально управляется) вытянуть как кириллица в знакогенераторе расположена.
Alex_Golubev
В дисплее кириллица есть. Функции для работы с данным дисплеем написаны и работают в IAR. Но в keil не хотят.
x893
Keil 5
Obam
Цитата(Alex_Golubev @ Sep 11 2017, 17:45) *
В дисплее кириллица есть. Функции для работы с данным дисплеем написаны и работают в IAR. Но в keil не хотят.

Насколько же этот пост отличается от стартового (; подробности клещами вытягиваются. Функции вашего авторства? А содержимое строк для отображения (hex значения подразумеваю) совпадает у IAR-а и Keil-а? Исходники у одного могли быть в win1251, а у другого в юникоде.
Alex_Golubev
Более лучше разобрался оказалось кириллица работает. Но в редакторе вместо кириллицы кракозябры. Функции писал сам.
CODE
void LCD_cmd (char param)
{
xdata char i;
P2 = P2 & ~RS & ~RW & ~E;
for(i=0;i!=REACTTIME;i++);
P2 = P2 | E;
for(i=0;i!=REACTTIME;i++);
P0 = param;
for(i=0;i!=REACTTIME;i++);
P2 = P2 & ~E;
for(i=0;i!=REACTTIME;i++);
}

void LCD_data(char Data)
{
xdata char i;
P2 = P2 & ~RW | RS;
for(i=0;i!=REACTTIME;i++);
P2 = P2 | E;
for(i=0;i!=REACTTIME;i++);
P0 = Data;
for(i=0;i!=REACTTIME;i++);
P2 = P2 & ~E;
for(i=0;i!=REACTTIME;i++);
}

void LCD_start (void)
{
LCD_cmd(0x38);
LCD_cmd(0x01);
LCD_cmd(0x06);
LCD_cmd(0x0C);
LCD_cmd(SCR_CLR);
LCD_cmd(RST_AC);
}

void SendCharLCD (char chr)
{
LCD_data(chr);
}

//--------------------------------
// Таблицы символов
// Win
code const unsigned char WinTable [] =
{
'А', 'Б', 'В', 'Г', 'Д', 'Е', 'Ё', 'Ж', 'З', 'И',
'Й', 'К', 'Л', 'М', 'Н', 'О', 'П', 'Р', 'С', 'Т',
'У', 'Ф', 'Х', 'Ц', 'Ч', 'Ш', 'Щ', 'Ь', 'Ы', 'Ъ',
'Э', 'Ю', 'Я',
'а', 'б', 'в', 'г', 'д', 'е', 'ё', 'ж', 'з', 'и',
'й', 'к', 'л', 'м', 'н', 'о', 'п', 'р', 'с', 'т',
'у', 'ф', 'х', 'ц', 'ч', 'ш', 'щ', 'ь', 'ы', 'ъ',
237 ,238, 239,
};
// Дисплей
code const unsigned char DispTable [] =
{
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 WinToDisp ( unsigned char c )
{
xdata unsigned char i;
for ( i = 0; i < sizeof ( WinTable ); i++ ) if ( c == WinTable [ i ] ) return ( DispTable [ i ] );
return ( c );
} // WinToDisp

Кракозябры сильно мешают мне. Можно конечно писать в редакторе. Но это очень не удобно.
VladislavS
Цитата(Alex_Golubev @ Sep 12 2017, 04:42) *
Функции писал сам.
Код
// Перекодировка символа
unsigned char WinToDisp ( unsigned char c )
{
  xdata unsigned char i;
  for ( i = 0; i < sizeof ( WinTable ); i++ ) if ( c == WinTable [ i ] ) return ( DispTable [ i ] );
  return ( c );
} // WinToDisp

Барин знает толк в извращениях. Раз уж написали таблицу перекодировки, пользуйтесь ей
CODE
void LCD_Print_Char(char c)
{
LCD_data(codepage[(uint8_t)c]);
}

const uint8_t codepage[256]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,
48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,
64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,
80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,
96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,
112,113,114,115,116,117,118,119,120,121,122,123,124,125,0xE9,127,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xCA,0xCB,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0xA2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xB5,0,0,0,0,0,0,0,
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
};
Alex_Golubev
Ну так научите меня как правильно делать.
ViKo
Писал и пишу в Кейле строки на русском, и получаю на экране русские символы.
scifi
Цитата(ViKo @ Sep 12 2017, 11:01) *
Писал и пишу в Кейле строки на русском, и получаю на экране русские символы.

Пишут, что кейловский компилятор использует системную локаль для определения кодировки исходников. То есть не исключено, что сборка прошивки на компьютере с другой локалью приведёт к другим результатам. Кошернее, конечно, указывать кодировку исходников в командной строке компилятора.
VladislavS
Цитата(Alex_Golubev @ Sep 12 2017, 10:42) *
Ну так научите меня как правильно делать.

Глаза разуть, сообщение выше читать.

Код
void LCD_Print_Char(char c)
{
  LCD_data(codepage[(uint8_t)c]);
}
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.