Пт фев 22, 2013 21:33:24
Пт фев 22, 2013 22:45:48
Write_Command(0x38);
delay(50);
Write_Command(0x38);
Write_Command(0x38);
Write_Command(0x06);
Write_Command(0x0c);
Пт фев 22, 2013 22:49:42
void write_com(unsigned char d){
LCD_PORT &= ~_BV(RS_PIN);
LCD_PORT &= ~_BV(EN_PIN);
LCD_PORT |= (d << 0);
LCD_PORT |= _BV(EN_PIN);
_delay_ms(2);
LCD_PORT &= ~_BV(EN_PIN);
}
Сб фев 23, 2013 00:50:11
Quality Assurance Passed. Место для отметки "ПРОВЕРЕНО". http://www.qapass.com/en/default.asp.КАШАК писал(а):QAPASS
Логично!мои попытки запустить его не увенчались успехом. С командами для Winstar он судя по всему не совместим
power-on delay >15 миллисек: самому дисплею внутри себя просраться-инициализироваться (с запасом пусть будет например 65536 мкс, нечего тут экономить)команды инициализации из даташита не совпадают с командами из примера кода
Сб фев 23, 2013 01:06:22
Сб фев 23, 2013 02:04:53
команды инициализации из даташита не совпадают с командами из примера кода
Сб фев 23, 2013 02:18:18
Сб фев 23, 2013 03:01:31
Сб фев 23, 2013 03:47:55
Сб фев 23, 2013 10:05:03
Проверяй все еще.....КАШАК писал(а):Заказал я тут на ebay дисплейчик. Но мои попытки запустить его не увенчались успехом.
Сб фев 23, 2013 10:17:39
Сб фев 23, 2013 10:49:30
Сб фев 23, 2013 11:10:43
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//массив перекодировки русских букв
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
unsigned char RusCodeTable[66][2] PROGMEM=
{
{'А','A'},
{'Б',0b10100000},
{'В','B'},
{'Г',0b10100001},
{'Д',0b11100000},
{'Е','E'},
{'Ё',0b10100010},
{'Ж',0b10100011},
{'З',0b10100100},
{'И',0b10100101},
{'Й',0b10100110},
{'К','K'},
{'Л',0b10100111},
{'М','M'},
{'Н','H'},
{'О','O'},
{'П',0b10101000},
{'Р','P'},
{'С','C'},
{'Т','T'},
{'У',0b10101001},
{'Ф',0b10101010},
{'Х','X'},
{'Ц',0b11100001},
{'Ч',0b10101011},
{'Ш',0b10101100},
{'Щ',0b11100010},
{'Ъ',0b10101101},
{'Ы',0b10101110},
{'Ь','b'},
{'Э',0b10101111},
{'Ю',0b10110000},
{'Я',0b10110001},
{'а','a'},
{'б',0b10110010},
{'в',0b10110011},
{'г',0b10110100},
{'д',0b11100011},
{'е','e'},
{'ё',0b10110101},
{'ж',0b10110110},
{'з',0b10110111},
{'и',0b10111000},
{'й',0b10111001},
{'к',0b10111010},
{'л',0b10111011},
{'м',0b10111100},
{'н',0b10111101},
{'о','o'},
{'п',0b10111110},
{'р','p'},
{'с','c'},
{'т',0b10111111},
{'у','y'},
{'ф',0b11100100},
{'х','x'},
{'ц',0b11100101},
{'ч',0b11000000},
{'ш',0b11000001},
{'щ',0b11100110},
{'ъ',0b11000010},
{'ы',0b11000011},
{'ь',0b11000100},
{'э',0b11000101},
{'ю',0b11000110},
{'я',0b11000111}
};
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//настройки дисплея
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#define LCD_PORT PORTC
#define LCD_PORT_DATA PORTA
#define LCD_E (1<<7)
#define LCD_RW (1<<6)
#define LCD_RS (1<<5)
void LCD_Init(void);//инициализация дисплея
void LCD_SendData(unsigned char byte);//послать данные или команду LCD
void LCD_SetTextUpLine(char *text);//записать текст в верхнюю строчку экрана
void LCD_SetTextDownLine(char *text);//записать текст в нижнюю строчку экрана
//----------
//инициализация дисплея
//----------
void LCD_Init(void)
{
LCD_PORT&=~LCD_E;
LCD_PORT&=~LCD_RW;
LCD_PORT&=~LCD_RS;
DDRA=(1<<7)|(1<<6)|(1<<5)|(1<<4)|(1<<3)|(1<<2)|(1<<1)|(1<<0);//шина данных на выход
_delay_ms(20);//ждём включения экрана
LCD_PORT&=~LCD_RS;//режим передачи команд
//даём несколько раз команду включения
LCD_SendData(0b00110000);//команда включения
_delay_ms(5);
LCD_SendData(0b00110000);//команда включения
_delay_us(100);
LCD_SendData(0b00110000);//команда включения
//указываем режим 8 бит, 2 линии, символы 5x11
LCD_SendData(0b00111100);
_delay_ms(1);
//включаем экран
LCD_SendData(0b00001100);
_delay_ms(1);
//очищаем экран
LCD_SendData(0b00000001);
_delay_ms(1);
//устанавливаем режим ввода данных с инкрементом ячейки памяти
LCD_SendData(0b00000110);
_delay_ms(1);
//отключаем индикатор
LCD_PORT&=~LCD_E;
LCD_PORT&=~LCD_RW;
LCD_PORT&=~LCD_RS;
DDRA=(0<<7)|(0<<6)|(0<<5)|(0<<4)|(0<<3)|(0<<2)|(0<<1)|(0<<0);//шина данных на вход
}
//----------
//послать данные или команду LCD
//----------
void LCD_SendData(unsigned char byte)
{
LCD_PORT_DATA=byte;
LCD_PORT|=LCD_E;
_delay_ms(1);
LCD_PORT&=~LCD_E;
}
//----------
//записать текст в верхнюю строчку экрана
//----------
void LCD_SetTextUpLine(char *text)
{
//отключаем индикатор
LCD_PORT&=~LCD_E;
LCD_PORT&=~LCD_RW;
LCD_PORT&=~LCD_RS;
DDRA=(1<<7)|(1<<6)|(1<<5)|(1<<4)|(1<<3)|(1<<2)|(1<<1)|(1<<0);//шина данных на выход
LCD_PORT&=~LCD_RS;//режим передачи команд
//даём команду позиционирования
LCD_SendData(0b10000000);//установить адрес видеопамяти в 0
_delay_ms(1);
LCD_PORT|=LCD_RS;//режим передачи данных
//преобразуем русские буквы
unsigned char n;
unsigned char out_text[16];
for(n=0;n<16;n++)
{
unsigned char b=text[n];
out_text[n]=b;
for(unsigned char m=0;m<66;m++)
{
unsigned char t=pgm_read_byte(&(RusCodeTable[m][0]));
if (t==b)
{
out_text[n]=pgm_read_byte(&(RusCodeTable[m][1]));
break;
}
}
}
for(n=0;n<16;n++)
{
if (text[n]==0) break;
LCD_SendData(out_text[n]);
}
for(;n<16;n++) LCD_SendData(32);//заполняем пробелами
LCD_PORT&=~LCD_RS;//режим передачи команд
//отключаем индикатор
LCD_PORT&=~LCD_E;
LCD_PORT&=~LCD_RW;
LCD_PORT&=~LCD_RS;
DDRA=(0<<7)|(0<<6)|(0<<5)|(0<<4)|(0<<3)|(0<<2)|(0<<1)|(0<<0);//шина данных на вход
}
//----------
//записать текст в нижнюю строчку экрана
//----------
void LCD_SetTextDownLine(char *text)
{
//отключаем индикатор
LCD_PORT&=~LCD_E;
LCD_PORT&=~LCD_RW;
LCD_PORT&=~LCD_RS;
DDRA=(1<<7)|(1<<6)|(1<<5)|(1<<4)|(1<<3)|(1<<2)|(1<<1)|(1<<0);//шина данных на выход
LCD_PORT&=~LCD_RS;//режим передачи команд
//даём команду позиционирования
LCD_SendData(0b10101000);//установить адрес видеопамяти в 40
_delay_ms(1);
LCD_PORT|=LCD_RS;//режим передачи данных
//преобразуем русские буквы
unsigned char n;
unsigned char out_text[16];
for(n=0;n<16;n++)
{
unsigned char b=text[n];
out_text[n]=b;
for(unsigned char m=0;m<66;m++)
{
unsigned char t=pgm_read_byte(&(RusCodeTable[m][0]));
if (t==b)
{
out_text[n]=pgm_read_byte(&(RusCodeTable[m][1]));
break;
}
}
}
for(n=0;n<16;n++)
{
if (text[n]==0) break;
LCD_SendData(out_text[n]);
}
for(;n<16;n++) LCD_SendData(32);//заполняем пробелами
LCD_PORT&=~LCD_RS;//режим передачи команд
//отключаем индикатор
LCD_PORT&=~LCD_E;
LCD_PORT&=~LCD_RW;
LCD_PORT&=~LCD_RS;
DDRA=(0<<7)|(0<<6)|(0<<5)|(0<<4)|(0<<3)|(0<<2)|(0<<1)|(0<<0);//шина данных на вход
}
Про шину данных - не обращайте внимание. Настраивайте сразу на выход. Просто у меня в конструкции она разделяется с другими устройствами.
Сб фев 23, 2013 11:18:45
Сб фев 23, 2013 11:42:24
Сб фев 23, 2013 12:31:43
КАШАК писал(а):судя по даташиту на мой дисплей, таблицу русских букв в него записать забыли
Сб фев 23, 2013 12:34:16
Сб фев 23, 2013 19:58:47
КАШАК писал(а):
- Код:
LCD_PORT |= (d << 0);
LCD_PORT |= d;
Сб фев 23, 2013 20:00:28