Ср янв 08, 2014 17:04:43
Чт янв 09, 2014 19:56:42
Ср янв 15, 2014 00:51:50
Ср янв 15, 2014 10:43:12
Вт фев 18, 2014 23:06:13
//----------
//функция вывода на дисплей упакованной графической картинки из PROGMEM
//АРГУМЕНТ - указатель на упакованную в PROGMEM картинку
void ST7920_CompressPictureOut (uint8_t* pPicture)
{
uint8_t RepeatMode; //флаг режима НЕНОЛЬ-повтор, НОЛЬ-неповтор
uint8_t RepeatCntr; //счетчик количества одинаковых\неодинаковых байтов
uint8_t SymbNum=0; //0-15 кол-во байт в линии
uint8_t LineNum=0; //0-63 кол-во линий по вертикали
uint8_t byte = 0;
ST7920_CommandOut (0x80);
ST7920_CommandOut (0x80);
while (1){
RepeatCntr = pgm_read_byte (pPicture++);
RepeatMode = (RepeatCntr & 0x80); //определяем режим заполнения (повтор\неповтор)
RepeatCntr &= ~0x80;
RepeatCntr++;
if (RepeatMode)
byte = pgm_read_byte (pPicture++); //тут читаем если режим повтора
for (uint8_t i=RepeatCntr; i; i--){
if (! RepeatMode)
byte = pgm_read_byte (pPicture++); //тут читаем если режим НЕповтора
if (SymbNum == 16){ //контроль окончания строки
SymbNum = 0;
if (++LineNum >= 64) //контроль окончания вывода картинки
return;
if (LineNum < 32){ //верхняя половина дисплея
ST7920_CommandOut (0x80 | LineNum);
ST7920_CommandOut (0x80);
}
else{ //нижняя половина дисплея
ST7920_CommandOut ((0x80 | LineNum) - 32);
ST7920_CommandOut (0x88);
}
}
ST7920_DataOut (byte); //данные на дисплей
SymbNum++;
}
}
}
Ср фев 19, 2014 04:41:34
Ср фев 19, 2014 10:08:54
Конкуренция нереальная... Вот еще чел на пятки наступает http://forum.cxem.net/index.php?showtopic=134266&st=0Вадиматоричик писал(а):Чувствую конкуренцию
Ну это вы погорячились... я же выше давал ссылку, где чел подключил по SPI... да и в даташите черным по белому описывается этот режим работы...Вадиматоричик писал(а):Судя по датащиту, наш дисплей может работать только в режиме 8 или 4-х битной шины. SPI нет.
Ср фев 19, 2014 10:37:18
Конкуренция нереальная...
Правда мы там с ним не очень лестно отзывались о вашем стиле написания ... Ну в общем не обращайте внимания...
Ну это вы погорячились... я же выше давал ссылку, где чел подключил по SPI... да и в даташите черным по белому описывается этот режим работы...
Ср фев 19, 2014 11:24:50
Дык та тема появилась позже вашей... так что вы по любому первопроходец!Вадиматоричик писал(а):Жаль, что не нашел ее, когда только купил дисплей... Было бы легче жить.
Да там его коммент и через один мой... вот и вся критика http://forum.cxem.net/index.php?showtop ... try1788131Вадиматоричик писал(а):Буду рад, если в ЛС скинете "переписку", в которой критикуется код.
Нашли упоминание о SPI ? Или может у вас другой какой то даташит.... Могу своим поделится...Вадиматоричик писал(а):Гляжу в книгу - вижу фигу. Да, перечитал даташит
Пт фев 21, 2014 15:43:10
LCD12864_OUT_OZU: ;ВЫВОД УПАКОВАННОЙ КАРТИНКИ НА ДИСПЛЕЙ
clr LoopLineNum ;Номер линии.
clr LoopSymbNum ;Номер байта в линии.
ldi Data, 0b10000000
rcall LCD12864_CommandOut
rcall LCD12864_CommandOut
ldi ZL, Low (LCD*2) ;Начальный адрес упакованной картинки.
ldi ZH, High(LCD*2)
CicleBig:
lpm ;читаем бит типа упаковки и количество упакованных байтов
mov RepeatCounter, r0 ;Счетчик повторов/неповторов.
ldi Temp, 1
add ZL, Temp ;Следущий байт - байт данных
adc ZH, MIN
set ;признак повторения
sbrc RepeatCounter, 7
rjmp SetT
clt ;признак НЕ повторения
SetT: andi RepeatCounter,0b01111111;Убераем старший бит (Показатель повторов).
inc RepeatCounter ;Повторы могут быть от 2-х раз до 129.
CicleRead:
lpm ;читаем байт данных
ldi Temp, 1
add ZL, Temp
adc ZH, MIN
CicleNoRead:
cpi LoopSymbNum,16 ;
brlo CicleEnd ;если НЕ конец строки - идем на конец цикла
ldi LoopSymbNum,0 ;иначе - строка с начала
inc LoopLineNum ;следующая строка
cpi LoopLineNum,64 ;контроль окончания вывода картинки
brlo DispPart
ret
DispPart:
ldi Data, 0b10000000 ;вычисляем адрес строки
or Data, LoopLineNum
cpi LoopLineNum,32 ;верхняя\нижняя половинки экрана
brlo DP1
subi Data, 32 ;если нижняя часть - отнимаем 32
DP1: rcall LCD12864_CommandOut
ldi Data, 0b10000000
cpi LoopLineNum,32 ;верхняя\нижняя половинки экрана
brlo DP2
ldi Data, 0b10000000+8 ;если нижняя часть - прибавляем 8
DP2: rcall LCD12864_CommandOut
CicleEnd:
mov Data, r0
rcall LCD12864_DataOut ;Выводим данные
inc LoopSymbNum
dec RepeatCounter ;обработка цикла повторов
breq CicleBig ;главный цикл
brtc CicleRead ;если НЕ повтор - будем читать следующее значение
rjmp CicleNoRead ;если повтор - будем использовать старое значение
Сб фев 22, 2014 15:59:48
Ср фев 26, 2014 00:40:16
make: *** Нет правила для сборки цели `u8m2.a()', требуемой для `u8m2.elf'. Останов.
Build failed with 1 errors and 0 warnings...
AVR Studio 4: Set additional options (Project - Configuration - Custom Options)
[All Files]
-ffunction-sections
-fdata-sections
[Linker Options]
-Wl,--gc-sections
Ср фев 26, 2014 00:56:41
make: *** Нет правила для сборки цели `u8m2.a()', требуемой для `u8m2.elf'. Останов.
Build failed with 1 errors and 0 warnings...
Чт фев 27, 2014 00:48:03
Чт фев 27, 2014 09:53:00
Чт фев 27, 2014 15:27:50
Чт фев 27, 2014 17:41:13
Многовато однако.....rastamanoff писал(а):Размер для Atmega328 получился - Program: 6888 bytes (21.0% Full).
Это строка текста,несколько прямоугольников и круг.
Пт мар 07, 2014 16:50:36
Ср июн 11, 2014 00:06:13
Ср июн 11, 2014 13:34:41