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

Народ поделитесь библиотекой SED1520 для дисплея MT-12232

А зачем ресетом рулить? ИМХО где то здесь косяк может быть, я когда начинал с граф. ЖКИ работать помнится тоже траблы были, пока не пришпилил его жестко через RC-цепь... Если все же хочется контроллером рулить RESET, то надо все равно предусмотреть установку этой линии в исходное состояние автоматом...

 

пофиг :( :cranky:

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


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

//************************************************************

#define F_CPU 8000000UL // 8 MHz Задаем частоту процессора *

#include <util/delay.h>

//************************************************************

 

#include <avr/io.h>

#include <avr/interrupt.h>

//***LCD МЭЛТ

const char Logo122[4][122]=//122x32 pixel, каждые 8 вертикальных точек собраны в байт

{

{ 0xFF,0x01,0x01,0x01,0x01,0xC1,0xE1,0xB1,0x11,0x1D,0x1D,0x7F,0x7F,0xFF,0xFF,0xFF,

0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFD,0xFD,0xF9,0xB1,

0xF1,0xE1,0x81,0x01,0x01,0x01,0xC1,0xC1,0xC1,0xC1,0xC1,0xC1,0xC1,0xC1,0xC1,0xC1,

0xC1,0xC1,0xC1,0xC1,0xC1,0xC1,0xC1,0xC1,0xC1,0xC1,0xC1,0xC1,0xC1,0xC1,0xC1,0xC1,

0xC1,0xC1,0xC1,0xC1,0xC1,0xC1,0xC1,0xC1,0xC1,0xC1,0xC1,0xC1,0xC1,0xC1,0xC1,0xC1,

0xC1,0xC1,0xC1,0xC1,0xC1,0xC1,0xC1,0xC1,0xC1,0xC1,0xC1,0xC1,0xC1,0xC1,0xC1,0xC1,

0xC1,0xC1,0xC1,0xC1,0xC1,0xC1,0xC1,0xC1,0xC1,0xC1,0xC1,0xC1,0xC1,0xC1,0xC1,0xC1,

0xC1,0xC1,0xC1,0xC1,0xC1,0xC1,0xC1,0xC1,0xC1,0xFF

},

{ 0xFF,0xE0,0x7C,0x7F,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF8,0x6F,0x6F,0x07,

0x07,0x06,0x00,0x00,0x03,0x03,0x0F,0x3F,0x07,0x07,0x07,0x03,0x03,0x07,0x0F,0x3B,

0x13,0x80,0x80,0x23,0x9E,0xF8,0xF8,0xF8,0xFC,0xFE,0xFE,0xFE,0xFC,0x00,0x00,0x00,

0x80,0x80,0xE0,0xF8,0xFC,0xFE,0xFE,0xFE,0xFC,0x00,0x00,0x00,0x60,0xF0,0xF8,0xF8,

0x7C,0x3E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x3E,0x3E,0x7E,0xFC,0xF8,0xF0,0xE0,

0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xE0,0xF8,0xFC,0xFE,

0xFE,0xFE,0xFE,0xFC,0x00,0x1C,0x3E,0x3E,0x3E,0x3E,0x3E,0x3E,0x3E,0xFE,0xFE,0xFE,

0xFE,0xFE,0x3E,0x3E,0x3E,0x3E,0x3E,0x3E,0x1C,0xFF

},

{ 0xFF,0x07,0x7C,0xE0,0x80,0x00,0x1F,0x3F,0xFF,0xFF,0xFF,0xFF,0x0F,0x30,0x38,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,

0xE0,0xF0,0xFC,0xFF,0xFF,0x3F,0x0F,0x03,0xFF,0xFF,0xFF,0xFF,0xFF,0xF8,0xFE,0xFF,

0x7F,0x7F,0x1F,0x0F,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x18,0x3C,0x7E,0x7E,0x7E,0x7E,0x7E,0x7E,0x3C,0x3C,0x18,0x00,0x00,0x01,0xFF,

0xFF,0xFF,0xFF,0x00,0x00,0x80,0xE0,0xF0,0xFC,0xFE,0xFF,0x7F,0x1F,0x07,0xFF,0xFF,

0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,

0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF

},

{

0xFF,0x80,0x80,0x80,0x80,0x83,0x86,0x8C,0x98,0xB0,0xB0,0xE0,0xC0,0xC0,0x80,0x80,

0x80,0x80,0x80,0x80,0x80,0x80,0xC0,0xC0,0xC0,0xC0,0xC0,0xE0,0xF8,0xFC,0xFF,0xFF,

0xBF,0x8F,0x87,0x81,0x80,0x80,0x80,0x80,0xFF,0xFF,0xFF,0xFF,0xFF,0x9F,0x83,0x80,

0x80,0x80,0x80,0x80,0xFF,0xFF,0xFF,0xFF,0xFF,0x80,0x80,0x80,0x86,0x8F,0x9F,0xBF,

0xFE,0xFC,0xF8,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF8,0xF8,0xFC,0xFE,0xBF,0x9F,0x8F,

0x87,0xE3,0xF9,0xFC,0xFF,0xFF,0xBF,0x9F,0x87,0x81,0x80,0x80,0x80,0x80,0xFF,0xFF,

0xFF,0xFF,0xFF,0xFF,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xFF,0xFF,0xFF,

0xFF,0xFF,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xFF

}

};

 

#define LCD_PORTDATA PORTC

#define LCD_DDRDATA DDRC

#define LCD_PINDATA PINC

 

#define LCD_PORTCONTROL PORTA

#define LCD_DDRCONTROL DDRA

#define LCD_wire_A0 PA3

#define LCD_wire_RW PA4

#define LCD_wire_E PA5

#define LCD_RES PA6

#define LCD_wire_CS PA7

 

//*****************************************************************************

//Низкоуровневые команды

//******************************************************************************/

// Установка цикла обмена по шине данных

#define LCD_StrCYC() {LCD_PORTCONTROL &= ~_BV(LCD_wire_E);} // начало цикла обмена данными

#define LCD_EndCYC() {LCD_PORTCONTROL |= _BV(LCD_wire_E);} // окончание цикла обмена данными

 

 

//Процедура выдачи байта в индикатор

void WriteByte(char b, int cd, int lr)

{

LCD_PORTCONTROL &= ~(_BV(LCD_wire_E)); // LCD.E=0;//Начальное значение сигнала индикатору

// LCD.RW=0; LCD.A0=cd; //Выдача байта в индикатор как данных или команды

if (cd) LCD_PORTCONTROL |= (_BV(LCD_wire_A0)); else LCD_PORTCONTROL &= ~(_BV(LCD_wire_A0));

// LCD.CS=lr; LCD.D=b; //Выбрать кристалл индикатора и выдать байт на шину данных индикатора

if (lr) LCD_PORTCONTROL |= (_BV(LCD_wire_CS)); else LCD_PORTCONTROL &= ~(_BV(LCD_wire_CS));

LCD_PORTDATA = b;

_delay_us(1);

LCD_StrCYC(); // начало строба

LCD_EndCYC(); // конец строба

_delay_us(10);

}

 

void WriteCodeL(char B) { WriteByte(b,0,1); }//Команду в левый кристалл индикатора

void WriteCodeR(char B) { WriteByte(b,0,0); }//Команду в правый кристалл индикатора

 

void WriteDataL(char B) { WriteByte(b,1,1); }//Данные в левую половину индикатора

void WriteDataR(char B) { WriteByte(b,1,0); }//Данные в правую половину индикатора

//***LCD МЭЛТ

 

 

 

int main(void) {

int p;//Номер текущей страницы индикатора

int c;//Позиция по горизонтали выводимого байта

 

 

ASSR &= ~_BV(AS2); //Clear AS2 bit PC7 and PC6

// для PC5 и PC4 и PC3 и PC2 - JTAGEN Fuse поставить галку т.е. отключить JTAG

TWCR &= ~(_BV(TWEN)); //Clear TWEN bit PC1

ADCSRA &= ~(_BV(ADEN)); //Clear all ADC on portA

 

LCD_PORTDATA = 0x00;

LCD_DDRDATA = 0xFF;

LCD_PORTCONTROL = 0x00;

LCD_DDRCONTROL = 0xFF;

 

 

LCD_PORTCONTROL |= _BV(LCD_wire_E); // LCD.E=1;//Начальное значение сигнала индикатору

LCD_PORTCONTROL &= ~_BV(LCD_RES); // LCD.RES=0;//Выдать сигнал RES=0 индикатору

LCD_PORTCONTROL |= _BV(LCD_RES); // LCD.RES=1;//Снять сигнал RES

WriteCodeL(0xE2);//Reset

WriteCodeR(0xE2);//Reset

WriteCodeL(0xEE);//ReadModifyWrite off

WriteCodeR(0xEE);//ReadModifyWrite off

WriteCodeL(0xA4);//Включить обычный режим

WriteCodeR(0xA4);//Включить обычный режим

WriteCodeL(0xA9);//Мультиплекс 1/32

WriteCodeR(0xA9);//Мультиплекс 1/32

WriteCodeL(0xC0);//Верхнюю строку на 0

WriteCodeR(0xC0);//Верхнюю строку на 0

WriteCodeL(0xA1);//Invert scan RAM

WriteCodeR(0xA0);//NonInvert scan RAM

WriteCodeL(0xAF);//Display on

WriteCodeR(0xAF);//Display on

 

for(p=0; p<4; p++) {//Цикл по всем 4-м страницам индикатора

WriteCodeL(p|0xB8);//Установка текущей страницы для левого кристалла индикатора

WriteCodeL(0x13);//Установка текущего адреса для записи данных в левую отображаемую позицию левой половины индикатора

for(c=0; c<61; c++) {//Цикл вывода данных в левую половину индикатора

WriteDataL(Logo122[p][c]);//Вывод очередного байта в индикатор

}

WriteCodeR(p|0xB8);//Установка текущей страницы для правого кристалла индикатора

WriteCodeR(0x00);//Установка текущего адреса для записи данных в левую отображаемую позицию правой половины индикатора

for(c=61; c<122; c++) {//Цикл вывода данных в правую половину индикатора

WriteDataR(Logo122[p][c]);//Вывод очередного байта в индикатор

}

}

 

while(1)

{

}

 

 

} //main

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


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

не пойму надобность демонстрировать один и тот же исходник при чем без комментарив...

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


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

не пойму надобность демонстрировать один и тот же исходник при чем без комментарив...

это рабочий вариант

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


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

не пойму надобность демонстрировать один и тот же исходник при чем без комментарив...

это рабочий вариант

А зачем const char Logo122[4][122]=// кому это надо???? Можно было просто исходник приаттачить и коментарии к нему...

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


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

не пойму надобность демонстрировать один и тот же исходник при чем без комментарив...

это рабочий вариант

А зачем const char Logo122[4][122]=// кому это надо???? Можно было просто исходник приаттачить и коментарии к нему...

нужно таким, как я - новичкам

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


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

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

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

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

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

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

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

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

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

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