Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Вывод на LCD.
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
Коляй
Ребята, расскажите вы "на пальцах" как на символьный ЖКИ что то вывести? Какие команды, библиотеки, хидеры нужны? Сегодня попробовал на КодеВизион сразу вся строка вывелась без проблем (правда на эмуляторе и на английском), на русском только первые две буквы удались, а дальше иероглифы.
Работал бы и на Визио, да только жалко. Программа уже почти написана в ИАРе, всё работает в железе, осталось меню писать, но для этого надо экран запускать.
И на Визио там по 4-м линиям ЖК висит, а я специально проц покупал большой, что бы как следует подключить по 8-ми.
rezident
Коляй, начните отсюда http://www.gaw.ru/html.cgi/txt/lcd/chips/index.htm
Черчилль
Цитата(Коляй @ Jul 5 2006, 17:09) *
Ребята, расскажите вы "на пальцах" как на символьный ЖКИ что то вывести? Какие команды, библиотеки, хидеры нужны? Сегодня попробовал на КодеВизион сразу вся строка вывелась без проблем (правда на эмуляторе и на английском), на русском только первые две буквы удались, а дальше иероглифы.

Тебе перекодировать символы надо. Скачай с платана даташит (2,2мБ) , там есть кодовая таблица.
Ессно, если у тебя в индикаторе вшит русский знакогенератор. В кодевижине без проблем работает на ура, библиотек в инете море
ab1000
Вот один замечательный документ про символьные ЖКИ индикаторы. Что примечательно - на русском. Очень подробно и толково ве расписано. Сам по нему разбирался. smile.gif
Удачи!
upc2
В Протеусе все примеры управления LCD написаны на ИАРе.И там их много,и для
большинства МК.
mempfis_
Цитата(Коляй @ Jul 5 2006, 17:09) *


Привет Коляй !!!
Говориш иероглифы выводятся.
У меня такая проблема была с МТ-16S2H: один раз выводились нормальные русские буквы, а в другой раз иероглифы. Проблема была в странице знакогенератора. В старых индикаторах она была одна, а сейчас их встраивают две. И желательно следить за тем которая из них подключена. Я в своей подпрограмме работы с индикатором всегда вставляю такую строчку:

;установка страницы знакогенератора и разрядности интерфейса
ldi displey_buffer,0b00101010
rcall WriteCode

Попробуй у себя ввести что-то подобное. Думаю, иероглифы у тебя пропадут.
Serj78
Кстати, в кодвижне есть один глюк в выводе, он ждет в бесконечном цикле сигнал ready (функция lcd_ready).
если есть помехи в кабеле или по питанию жки, то программа может повисать в этом месте. я переделал под опрос по времени.

такая же лажа там и с функцией getghar - когда используется программный буфер uart-a.
Коляй
Цитата(mempfis_ @ Jul 6 2006, 20:56) *
Цитата(Коляй @ Jul 5 2006, 17:09) *

Говориш иероглифы выводятся.
У меня такая проблема была....


Спаибо всем. К сожалению проблема не в иероглифах, а в выводе на LCD(44780) вобще. Можно и самому драйвер написать(в документации понятно всё в основном), да только не умею я ещё большие проги писать.
В КодеВиджн тоже не буду переделывать, а то совсем запутаюсь, пусть в ИАРе пока как есть.
Буду программиста-корешка ждать.
Спасибо.
VladislavS
Цитата(Коляй @ Jul 6 2006, 21:00) *
Спаибо всем. К сожалению проблема не в иероглифах, а в выводе на LCD(44780) вобще. Можно и самому драйвер написать(в документации понятно всё в основном), да только не умею я ещё большие проги писать.
В КодеВиджн тоже не буду переделывать, а то совсем запутаюсь, пусть в ИАРе пока как есть.
Буду программиста-корешка ждать.
Спасибо.


В IAR что-то типа вот этого надо использовать:
Код
__flash unsigned char 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
};
upc2
На пальцах.

Подключается библиотека LCD.C


#include<pic1687x.h>
#include <stdio.h>
#include "lcd.h"
#include "delay.h"

Смотрите , что там есть.
Для символов достаточно.
<<
#define lcd_cursor(x) lcd_cmd(((x)&0x7F)|0x80) курсор в любое место
#define lcd_clear() lcd_cmd(0x1)
#define lcd_putch(x) lcd_data(x)
#define lcd_goto(x) lcd_cmd(0x80+(x));
#define lcd_cursor_right() lcd_cmd(0x14)
#define lcd_cursor_left() lcd_cmd(0x10)
#define lcd_display_shift() lcd_cmd(0x1C)
#define lcd_home() lcd_cmd(0x2) начало первой строки
#define lcd_home2() lcd_cmd(0xC0) начало второй строки

extern void lcd_cmd(unsigned char); -> команда диснлею
extern void lcd_data(unsigned char); -> один байт в дисплей
extern void lcd_puts(const char * s); -> строку в дисплей
extern void lcd_init(unsigned char); -> нач. установка >>

! Главная функция

void main(void){
unsigned char last_value;
unsigned char volts;
unsigned char decivolts;
unsigned char outString[20];

init();
lcd_puts("Adust the"); после сброса в 1 строке
lcd_home2(); // select line 2
lcd_puts("potentiometer on"); на второй строке
}

! Вывод преобразованного значения.
lcd_clear();
sprintf(outString,"U = %d.%d Volts",volts,decivolts);
lcd_puts(outString);

! Вывод с любого адреса.
sprintf(outString,"%d,",T_SEC);
lcd_cursor(0x06);
lcd_puts(outString);


Возьмите готовые библиотеки для ИАР.
Коляй
Спасибо всем огромное! Заработало, ура! Правда пока на эмуляторе. Только пока через строку выводит и по моему через знакоместо. Как будто LCD не 4х20, а 2х16. Драйвер чей то скачал отсюда LCD44780.h и .с Но это уже дело техники.
Коляй
Со строками разобрался, а вот с буквами... пока через букву пишет.
Коляй
Ребята, как текст во флеше оставить? Пишу вначале. __flash unsignerd char *txt1[]={"xxxxxxx...."};
Всё нормально проходит, но как только появляется обращение на *тхт1, нпример LCD_PRINT(*txt1);
Он перед компиляцией пытается тянуть из флеша в ОЗУ и если *тхт1 побольше, вылезает всякая муть, типа надо стек уменьшить или внешнее ОЗУ прилепить и т.д.
IgorKossak
Цитата(Коляй @ Jul 15 2006, 17:20) *
Ребята, как текст во флеше оставить? Пишу вначале. __flash unsignerd char *txt1[]={"xxxxxxx...."};
Всё нормально проходит, но как только появляется обращение на *тхт1, нпример LCD_PRINT(*txt1);
Он перед компиляцией пытается тянуть из флеша в ОЗУ и если *тхт1 побольше, вылезает всякая муть, типа надо стек уменьшить или внешнее ОЗУ прилепить и т.д.

Функцию LCD_PRINT(char *txt1) надо переписать как LCD_PRINT(char __flash*txt1)
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2024 Invision Power Services, Inc.