Вчера довелось с ним повозиться, в результате получился кусок кода на протоне, демонстрирующий работу с ним по SPI (трехпроводное подключение):
Device = 16F876A Declare Xtal= 8
Declare All_Digital = On ' Do not set analogue pins to digital Declare Create_Coff = On
TRISA = %11000010
Symbol T0IF = INTCON.2 ; TMR0 Overflow Interrupt Flag Symbol T0IE = INTCON.5 ; TMR0 Overflow Interrupt Enable Symbol GIE = INTCON.7 ; Global Interrupt Enable
OPTION_REG = %00000111 INTCON = %10100000
Dim LCD_Addr As Byte Dim LCD_Text[20] As Byte Dim LCD_Len As Byte Dim LCD_I As Byte Dim LCD_ON As Bit Dim LCD_CURSOR As Bit Dim LCD_PAGE As Bit
Dim Big As DWord Dim Big1 As Big.HighWord Dim byteHours As Byte Dim byteMinutes As Byte Dim byteSeconds As Byte Dim bRefrTime As Bit
Symbol LCD_SCL = PORTA.3 Symbol LCD_CS = PORTA.4 Symbol LCD_SI = PORTA.5
'-- Инициализация LCD -- DelayMS 40 LCD_ON = 1 LCD_CURSOR = 0 LCD_PAGE = 0 High LCD_SCL ' Начальное значение сигнала Low LCD_CS ' Начало последовательности команд ' [$38] ' Function set DL=1,EXT=0 ' [$06] ' Entry mode set I/D=1,SH=0 ' [$0C] ' Display ON/OFF control Display ON/OFF, Cursor ON/OFF, Page ' [$01] ' Clear display ShOut LCD_SI, LCD_SCL, MsbFirst, [$38, $06, $08 + (LCD_ON << 2) + (LCD_CURSOR << 1) + LCD_PAGE, $01] ' Function set DL=1,EXT=0 High LCD_CS DelayUS 1500 '-- Конец инициализации LCD --
On_Interrupt GoTo MyInt GoTo Main
MyInt: Dec Big1 If Big < 0 Then Big = Big + 2000000 Inc byteSeconds bRefrTime = 1 EndIf T0IF = 0 Context Restore
LCD_Print: If LCD_Len > 20 Then LCD_Len = 20 Low LCD_CS ' Адрес начала вывода ' Function set EXT=1 ' Длина выводимых данных ShOut LCD_SI, LCD_SCL, MsbFirst, [LCD_Addr, $3C, $80 | (LCD_Len - 1)] ' Дальше будут байты данных For LCD_I = 0 To LCD_Len - 1 ShOut LCD_SI, LCD_SCL, MsbFirst, [LCD_Text[LCD_I]] Next LCD_I ShOut LCD_SI, LCD_SCL, MsbFirst, [$38] ' Function set EXT=0 для последующих команд
Main: If bRefrTime = 1 Then If byteSeconds >= 60 Then byteSeconds = 0: Inc byteMinutes If byteMinutes >= 60 Then byteMinutes = 0: Inc byteHours If byteHours >= 60 Then byteHours = 0
Несколько доработал пример, чтобы полегче было работать с русским языком, используя страницу 1251. Прикладываю архив. В архиве два варианта под PIC16F876A и PIC18F4550 c фото вывода...
И есть вопрос - что я не учитываю в варианте с PIC18F4550 что так кракозябрит текст? C PIC16F876A ведь все нормально...
Добавлено (12.11.2013, 15:44) --------------------------------------------- У меня валяется такой дисплей. 128х64 . Он может работать в 2х режимах: 1 - стандартный хитачи, а второй spi. Поэтому и подумал, может похож принцип