Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
12.10.2008, 22:41
|
|
Почётный гражданин KAZUS.RU
Регистрация: 06.02.2007
Сообщений: 1,340
Сказал спасибо: 3
Сказали Спасибо 106 раз(а) в 66 сообщении(ях)
|
каким образом внутри массива строк может появиться 0 ?
только обозначая его окончание. Эта стандартная практика в си
http://ru.wikipedia.org/wiki/%D0%A1%...82%D0%B8%D0%BF
еще почитайте (чуть отклоняясь от темы ) венгерская запись.
Это элеметарно, Ватсон...
|
|
|
|
13.10.2008, 01:03
|
|
Частый гость
Регистрация: 15.08.2006
Сообщений: 23
Сказал спасибо: 2
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Сообщение от urry
|
каким образом внутри массива строк может появиться 0 ?
только обозначая его окончание. Эта стандартная практика в си
http://ru.wikipedia.org/wiki/%D0%A1%...82%D0%B8%D0%BF
еще почитайте (чуть отклоняясь от темы ) венгерская запись.
Это элеметарно, Ватсон...
|
Кажется, начинаю понимать. 0 - это конец строки, его нельзя путать с символом ноль, потому как это разные вещи. Правильно я понял? То есть, конец строки это 0х00?
|
|
|
|
13.10.2008, 07:54
|
|
Супер-модератор
Регистрация: 03.05.2007
Сообщений: 2,695
Сказал спасибо: 28
Сказали Спасибо 4,509 раз(а) в 956 сообщении(ях)
|
Сообщение от Solncevorot
|
Halex07
Кстати, да, в help`е я нашу прагму не нашел, то-то было удивление.
Видел в инете еще один совет как сделать отображение русских текстов на жки возможным, но он, как оказалось, был ложным. Советовали подправить библиотеку lcd.lib , а конкретно, заменить строку
_lcd_write_data(0x2;
на:
_lcd_write_data(0x2A);
Это оказалась чушь. Во всяком случае, у меня на CVAVR не сработало, да и выглядит совет, мягко говоря, неубедительно.
|
Не сработало, конечно, менять надо на 0x2С. Совет то наверное был мой, но касается он изменения ФОНТА с матрицы 5х7 по умолчанию на 5х10 для отображения нижних хвостов в русских буквах. А для этого в иниацилизации LCD надо установить бит выбора режима матрицы, т.е. второй (счет битов с 0). Третий бит отвечает зза четырехпроводный интерфейс - отсюда 28, включаем там же режим 5х10 - получаем 2С. Читать надо документацию на HD44780, а не слепо верить в чудеса.
Во вложении проект для протеуса 7.2.sp6 с CAVR. И в отдельных папках соответствующие исправленные файлы для CAVR. Скопируйте их в соответствующие папки вашего CAVR as is (т.е. не меняя имен). В Ваших программах вместо
#include ‹lcd.h›
используем:
#include ‹lcd510.h›
если нужны хвостики в Ц и Щ.
Что касается #pragma ЭТО ДИРЕКТИВА КОМПИЛЯТОРА (при компиляции сделать то-то и то-то), также как и #include (включить при компиляции такой-то файл), существуют они независимо от Вашего желания. Видно у Вас и Си не все в порядке.
Дак и напоследок, полезно иногда посещать сайты производителей:
http://www.atmel.ru/Software/Software.htm
скачайте HD-44780.EXE - формирует готовые массивы для СИ с русской символикой. Просто набираете текст и получаете в буфер готовый массив, вставляемый в том-же CAVR. В начале массива коментарий с содержимым - это лучще, чем гадать на иероглифах LCD20.
Прикрепленный файл: 8231297.rar
|
|
|
|
13.10.2008, 19:34
|
|
Частый гость
Регистрация: 15.08.2006
Сообщений: 23
Сказал спасибо: 2
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Да, с С у меня не все в порядке, я в программировании вообще неопытен.
Спасибо. Я, кстати, и не обратил внимание, что хвостов у букв Ц,Щ, нету... А так очень полезная ваша библиотека.
По поводу #pragma я не понимаю. Для чего она нужна, неужели нельзя было без нее обойтись разработчикам компилатора? Вот чем они руководствовались, создавая эту диррективу?
|
|
|
|
13.10.2008, 21:34
|
|
Супер-модератор
Регистрация: 03.05.2007
Сообщений: 2,695
Сказал спасибо: 28
Сказали Спасибо 4,509 раз(а) в 956 сообщении(ях)
|
Сообщение от Solncevorot
|
По поводу #pragma я не понимаю. Для чего она нужна, неужели нельзя было без нее обойтись разработчикам компилатора? Вот чем они руководствовались, создавая эту диррективу?
|
Такое впечатление, что мы говорим на разных языках...
Еще раз повторюсь #pragma - это директива комиляторУУ при переводе программы в машинные коды, то есть в то, чтовы шьете в МК, произвести такие-то и такие-то действия с исходным кодом. И придумали их не для того чтобы Вас запутать, а для того, чтобы Вам жисть облегчить. Вы пишете на стандартном Си, а при переводе в конкретном компиляторе Си в микропрограмму - компилятор использует эти директивы. Они есть и в IAR и в ImageCraft ICC и в компиляторах для МК PIC. Это не прихоть разработчика конкретно CAVR. Иначе при переходе с одного компилятора на другой Вам пришлось изучать кучу особенностей каждого. Теперь понятно???
|
|
|
|
19.02.2009, 15:23
|
|
Прохожий
Регистрация: 31.01.2009
Сообщений: 3
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
помогите мне написать код для индикации на LCD секундомера. На C++. КОМПИЛЯТОР Keil uVision 8.0
Вот моя вся прога
#include ‹at898252.h›
#include ‹absacc.h›
unsigned int msec; //переменная мсек
unsigned int sec; // переменная сек.
int msecINT;
int stop;
void Start (void)
{
if (P1_1==0);
{
stop=1;
}
}
void Reset (void)
{if(P1_3==0);
{
sec=0; msec=0;
}
}
void StopT (void)
{
if (P1_2==0);
{
stop=0;
}
}
void TimerC4et4uK(void)
{
TH1=0xF8;
TL1=0x30;
TMOD=0x10;
IE=0x88;
TR1=1;
}
void O6PA6OT4uK(void) interrupt 3
{
TR1=0;
TH1=0xF8;
TL1=0x30;
TR1=1;
if(stop=0);
if (msec›999) msec++;
else
{
msec=0;
}
if(sec‹6039) sec++;
else
{
sec=0;
}
}
void main(void)
{
TimerC4et4uK();
Start();
StopT();
Reset();
while(1);
{
МНЕ ТУТ НУЖНО НАПИСАТЬ КОД ДЛЯ ИНДИКАЦИИ!!! а я незнаю как это зделать помогите!!!!!!!! Чтото типо msec/10 msec%10 sec/10 sec%10 Я просто незнаю как написать
}
}
|
|
|
|
19.02.2009, 18:43
|
|
Супер-модератор
Регистрация: 03.05.2007
Сообщений: 2,695
Сказал спасибо: 28
Сказали Спасибо 4,509 раз(а) в 956 сообщении(ях)
|
В Keil не силен, но почитай на Радиокоте вот это, может пригодится:
http://radiokot.ru/articles/25/
|
|
|
|
20.02.2009, 09:02
|
|
Прописка
Регистрация: 15.01.2008
Сообщений: 120
Сказал спасибо: 5
Сказали Спасибо 1 раз в 1 сообщении
|
Привет, я делаю вот так, может пригодится:
Код:
|
const unsigned char ruscoder[64] = { //массив для перекодировки из ASCII в KOI-8R-----------------------------------------------------
0x41, 0xA0, 0x42, 0xA1, //0xC0...0xC3 ‹=› А Б В Г
0xE0, 0x45, 0xA3, 0x33, //0xC4...0xC7 ‹=› Д Е Ж З
0xA5, 0xA6, 0x4B, 0xA7, //0xC8...0xCB ‹=› И Й К Л
0x4D, 0x48, 0x4F, 0xA8, //0xCC...0xCF ‹=› М Н О П
0x50, 0x43, 0x54, 0xA9, //0xD0...0xD4 ‹=› Р С Т У
0xAA, 0x58, 0xE1, 0xAB, //0xD5...0xD7 ‹=› Ф Х Ц Ч
0xAC, 0xE2, 0xAC, 0xAE, //0xD8...0xDB ‹=› Ш Щ Ъ Ы
0x62, 0xAF, 0xB0, 0xB1, //0xDC...0xDF ‹=› Ь Э Ю Я
0x61, 0xB2, 0xB3, 0xB4, //0xE0...0xE4 ‹=› а б в г
0xE3, 0x65, 0xB6, 0xB7, //0xE5...0xE7 ‹=› д е ж з
0xB8, 0xA6, 0xBA, 0xBB, //0xE8...0xEB ‹=› и й к л
0xBC, 0xBD, 0x6F, 0xBE, //0xEC...0xEF ‹=› м н о п
0x70, 0x63, 0xBF, 0x79, //0xF0...0xE4 ‹=› р с т у
0xE4, 0xD5, 0xE5, 0xC0, //0xF5...0xE7 ‹=› ф х ц ч
0xC1, 0xE6, 0xC2, 0xC3, //0xF8...0xEB ‹=› ш щ ъ ы
0XC4, 0xC5, 0xC6, 0xC7 //0xFC...0xEF ‹=› ь э ю я
};
void __lcd_ruscoder_puts (unsigned char *message) //функция перекодировки ASCII в KOI-8R и вывод на LCD-----------------
{ //sprintf (message, "Привет дружище! :)"); //сначало надо использовать sprintf - строчку ASCII в массив, и сразу добавляется 0 в конец строчки
unsigned char i, j; //для цикла и длины
j = strlen(message); //определяем длину строчки
for (i = 0; i ‹ (j + 1); i++) //массив ASCII в массив KOI-8R, j + 1 - что бы вывести конец строки - 0
{
if (message [i] › 192) //если кирилица
{
message [i] = ruscoder [(message [i] - 192)]; //используем массив перекодировки
};
};
lcd_puts (message); //выыодим на LCD
} //-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
|
|
20.02.2009, 09:04
|
|
Прописка
Регистрация: 15.01.2008
Сообщений: 120
Сказал спасибо: 5
Сказали Спасибо 1 раз в 1 сообщении
|
Ну и пример:
Код:
|
sprintf (lcd_buffer, "t%u- не t-датчик!", k + 1);
lcd_gotoxy (0, k);
__lcd_ruscoder_puts (lcd_buffer); |
Удачи!
|
|
|
|
20.02.2009, 20:20
|
|
Вид на жительство
Регистрация: 03.06.2007
Сообщений: 368
Сказал спасибо: 3
Сказали Спасибо 59 раз(а) в 52 сообщении(ях)
|
Может кому пригодится-Перекодировщик Win-текста сообщений для ЖКИ-контроллера HD44780
Прикрепленный файл: 5828252.rar
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Тема |
Автор |
Раздел |
Ответов |
Последнее сообщение |
CodeVisionAVR, LCD + русские буквы
|
jogick |
Микроконтроллеры, АЦП, память и т.д |
8 |
05.07.2009 12:47 |
как вывести буквы на дисплей
|
andron-kip |
Микроконтроллеры, АЦП, память и т.д |
4 |
27.10.2008 00:28 |
подскажите как вывести значение ацп на индикатор
|
ctefan |
Микроконтроллеры, АЦП, память и т.д |
13 |
06.04.2007 10:59 |
как вывести на LCD данные из буфера?
|
goooblin |
Микроконтроллеры, АЦП, память и т.д |
11 |
02.04.2007 10:01 |
Как вывести из ступора DS1307?
|
Muzicant |
Микроконтроллеры, АЦП, память и т.д |
4 |
09.10.2006 19:28 |
Часовой пояс GMT +4, время: 18:56.
|
|