Mail to Author Главная

LM24010Z

Однажды, внезапно, нежданно-негаданно был приобретен графический ЖКИ с контроллером LM24010Z. Настоящий, японский. Для питания используется +5, -21 В и переменного около 300 В. В комплекте шел преобразователь 24/300 В производства TDK. А сам ЖКИ сделан Sharp'ом. Даташит на него искался долго, но все же был найден. Внешне ЖКИ выглядит так, а сзади так.

Далее была собрана схема питания и контроллер ЖКИ был подключен к LPT-порту компьютера для скорейшего испытания. Параллельный порт позволяет достаточно легко сформировать необходимые последовательности параллельных сигналов. В начале были вертикальные полосы, написать Hello, World! программно было тяжеловато.

Затем сформировал "шахматное поле". На заднем плане виден преобразователь. Еще одна фотка.

Пиком мастерства стало формирование картинки на экране. Для этого была написана программа, которая попиксельно считывает файл картинки и выводит пиксели на ЖКИ. В итоге было получено вот это :)

Фотки имеют невысокую четкость вследствие низкой частоты обновления экрана, LPT не дает большей :(

Ниже приведен код для консольной программы на VB.NET, формирующий "шахматное поле". То, что закомментировано - формирует вертикальные линии.

Module Module1
   Declare Sub Out32 Lib "inpout32.dll" (ByVal PortAddress As Short, ByVal data As Short)
   Const S As Short = 1 'D0 of LPT
   Const CP1 As Short = 2 'D1 of LPT
   Const CP2 As Short = 4 'D2 of LPT
   Const D1 As Short = 8 'D3 of LPT
   Const D2 As Short = 16 'D4 of LPT
   Const D3 As Short = 32 'D5 of LPT
   Const D4 As Short = 64 'D6 of LPT

   Sub Main()
    'Dim k As Short, b As Boolean, a, c As Short
    'Do Until 1 = 2
    ' a = 0
    ' For i As Integer = 1 To 128
    ' 'reset CP1 pulse
    ' If i = 2 Then k = 1 Else k = 0
    ' Out32(&H378, CP1)
    ' Out32(&H378, CP1 + S * k)
    ' Out32(&H378, S * k)
    ' Out32(&H378, 0)
    ' If a < 4 Then c = 1 Else c = 0
    ' For j As Integer = 1 To 60
    ' 'set CP2
    ' If b Then Out32(&H378, CP2 + c * D1 + c * D2) Else Out32(&H378, CP2 + c * D3 + c * D4)
    ' 'Wait(1)
    ' 'reset CP2
    ' If b Then Out32(&H378, c * D1 + c * D2) Else Out32(&H378, c * D3 + c * D4)
    ' 'Wait(1)
    ' b = Not (b)
    ' Next
    ' a += 1
    ' If a = 8 Then a = 0
    ' Next
    'Loop
    ''Console.ReadKey()
    Dim k As Short, b As Boolean, a, c As Short, d As Short
    Do Until 1 = 2
     For i As Integer = 1 To 128
      'reset CP1 pulse
      If i = 2 Then k = 1 Else k = 0
      Out32(&H378, CP1)
      Out32(&H378, CP1 + S * k)
      Out32(&H378, S * k)
      Out32(&H378, 0)
      If d < 20 Then b = True Else b = False
      For j As Integer = 1 To 60
       If a < 5 Then c = 1 Else c = 0
       'set CP2
       If b Then
       Out32(&H378, CP2 + D1 * c + D2 * c + D3 * c + D4 * c)
       Else
       Out32(&H378, CP2 + D1 * (1 - c) + D2 * (1 - c) + D3 * (1 - c) + D4 * (1 - c))
       End if
       'Wait(1)
       'reset CP2
       If b Then Out32(&H378, D1 * c + D2 * c + D3 * c + D4 * c)
       Else
       Out32(&H378, D1 * (1 - c) + D2 * (1 - c) + D3 * (1 - c) + D4 * (1 - c))
       End if
       'Wait(1)
       a += 1
       If a = 10 Then a = 0
      Next
      d += 1
      If d = 40 Then d = 0
     Next
     a = 0
     d = 0
    Loop
    'Console.ReadKey()
   End Sub

   Private Sub Wait(ByVal mseconds As Integer)
    Dim a, b As DateTime
    a = DateTime.Now
    a = a.AddMilliseconds(mseconds)
    Do While DateTime.Compare(a, b) >= 0
     b = DateTime.Now
    Loop
   End Sub
End Module

Картинки


Дополнительно


2007©Electricianman

Сайт управляется системой uCoz