Всю программу приводить особо смысла нет, но если надо - скину.
Код: Выделить всё
d_write ; ; around 100
movwf temp
movlw 9
movwf temp1
d_wr0
clrf lcdcon
btfss status,c
bcf lcdcon,mosi
btfsc status,c
bsf lcdcon,mosi
;
rlf temp,f
bsf lcdcon,sck
decfsz temp1,f
goto d_wr0
;
bsf lcdcon,cs
return
Вызывается как-то так: (заодно приведу что нужно для инициализации)
Код: Выделить всё
lcd_init
bcf status,c ; instr send
movlw 0xe2 ; reset
call d_write
;
bcf status,c ; instr send
movlw 0x3d ; voltage multiplication
call d_write
;
bcf status,c ; instr send
movlw 1 ; x4
call d_write
;
bcf status,c ; instr send
movlw 0x2f ; power control on
call d_write
;
bcf status,c ; instr send
movlw 0xa4 ; power save off
call d_write
;
bcf status,c ; instr send
movlw 0xaf ; module on
call d_write
;
Тут дисплей с помощью сделанной на скорую руку платы-переходника подключен к макетно-отладочной плате с 16f877а (она полностью засветилась в моей теме с измерителем емкости). Т.к. дисплей на 3.3В, нужно согласовать уровни - но лучше сделать это не как везде советуют с помощью делителя из 2-х резисторов, а немного лучше - резистором и диодом шотки на +питания дисплея. Так универсальнее, т.к. можно будет (если необходимо) и дисплей, и МК питать от 1 источника напряжения. Только есть в этом 1 нюанс - стабилизатор должен стабилизировать не только ток относительно общего (обычные кренки), но и относительно бОльшего напряжения питания, чем стабилизируемое, иначе диоды бесполезны и просто поднимут напряжение питания ЖК до 4.7В. У меня такого стабилизатора не было, поэтому можно поставить нагрузку на общий для создания тока, заведомо большего, чем суммарный втекающий от 3-х диодов. Тогда все будет работать, только потреблять больше необходимого.
Как уже говорил, собственного знакогенератора у этого ЖКД нет, поэтому написал много констант на первую половину ASCII. Выглядит неплохо, только занимает кучу места (6 байт на 1 символ). Вверху дисплея - это эксперимент с большим шрифтом, 24*16 пикселов (точнее 21*12, 1 сверху, 2 снизу и под 2 под бокам строки пикселов пустые для визуального пробела)
Если кому интересно, могу скинуть сюда константы.
Дисплей должен потреблять примерно 0.2 мА (если верить даташиту), а я как-то неудачно придумал питание с не отключаемым стабилизатором (хоть и можно переключать питание дисплея до или после стабилизатора) и точно измерить не могу.
В общем-то не такие уж они и страшные, эти графические жкд. Только вот для вывода чего-то посложнее обычного текста (5*7 + по 1 пикселу зазор справа и снизу, итого 6*8, как у модульных символьных дисплеев) придется постараться, так как многие дисплеи не позволяют считывать положение "курсора", т.е. работаю только на вход.
Если кто заинтересуется - пишите, расскажу про управление и инициализацию более подробно.