Graphics LCD

Тема в разделе "WASM.ELECTRONICS", создана пользователем S_Alex, 7 июн 2008.

  1. S_Alex

    S_Alex Alex

    Публикаций:
    0
    Регистрация:
    27 авг 2004
    Сообщения:
    561
    Адрес:
    Ukraine
    Спецы: Посоветуйте дисплейчик.
    Размер около 100х100 мм разрешение около 128 (+-).
    Да как с ним работать?
    Ну и примерчик, хорошо бы.
     
  2. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    От Palm3xe возьми.
     
  3. RamMerLabs

    RamMerLabs Well-Known Member

    Публикаций:
    0
    Регистрация:
    11 сен 2006
    Сообщения:
    1.426
    S_Alex
    посмотри на modnews.ru есть хороший пример подключения 128х64 через LPT и работа с ним
     
  4. Paguo_86PK

    Paguo_86PK Руслан

    Публикаций:
    0
    Регистрация:
    8 окт 2007
    Сообщения:
    911
    Адрес:
    Ташкент
    Хм... Попался мне дисплей от калькулятора Citizen: Платка - 14 выводов, микрухи HD44100H HD44780A00, сбоку надпись C1620H.
    Можно где-нибудь найти схему назначения выводов? Питание подавал - линии выходили. Гуглил - куча хлама...
     
  5. S_Alex

    S_Alex Alex

    Публикаций:
    0
    Регистрация:
    27 авг 2004
    Сообщения:
    561
    Адрес:
    Ukraine
    Посмотри доку.
    HITACHI
    HD44780U (LCD-II)
    (Dot Matrix Liquid Crystal Display Controller/Driver)
     
  6. McHren

    McHren New Member

    Публикаций:
    0
    Регистрация:
    21 июл 2008
    Сообщения:
    25
    Еще актуально? Если да могу порыться осталась куча примеров со старой работы, правда на сях и под мсп430
     
  7. Exp10der

    Exp10der Мастер дзена

    Публикаций:
    0
    Регистрация:
    27 авг 2007
    Сообщения:
    337
    Адрес:
    Красноярск
    писал проги и под знакосинтезирующие и под графику (128x64) могу скинуть и схемы и библиотеку правда на дельфе.
     
  8. Exp10der

    Exp10der Мастер дзена

    Публикаций:
    0
    Регистрация:
    27 авг 2007
    Сообщения:
    337
    Адрес:
    Красноярск
    кстати сорри за оффтоп, но никто не встречал знакосинтезирующие вакуумные люминесцентные дисплеи (VFD)?
     
  9. _basmp_

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
    Exp10der
    Скиньте.
     
  10. Vov4ick

    Vov4ick Владимир

    Публикаций:
    0
    Регистрация:
    8 окт 2006
    Сообщения:
    581
    Адрес:
    МО
    Exp10der Продаются, но дорого и я не видел знакосинтезирующих. По-моему знакогенератор и динамическую индикацию несложно и самому сделать.
     
  11. Exp10der

    Exp10der Мастер дзена

    Публикаций:
    0
    Регистрация:
    27 авг 2007
    Сообщения:
    337
    Адрес:
    Красноярск
    _basmp_
    вот код, он рулит LCD висящим на ЛПТ, но общий смысл думаю должен быть понятен, дёргаем 37Ah - синхронизация выбор регистра (и выбор чипа у графических), 378h данные, работает и по 4 битному и по 8 битному интерфейсу, в случае 4 бите задействуем только старшие 4 линии.
    37Ah:0 -> E
    37Ah:3 -> RS
    378h -> Data bus
    Код (Text):
    1. unit LCDcontrol;
    2.  
    3. interface
    4.  
    5. uses windows, graphics;
    6.  
    7. const
    8. TCharLCD=$2000;
    9. TGraphLCD=$2001;
    10. // Instructions for character LCD
    11. cClearLCD=1;
    12. cReturn=1 shl 1;
    13. cMode=1 shl 2;
    14.  pIncrement=1 shl 1;
    15.  pDisplayShift=1;
    16. cControl=1 shl 3;
    17.  pLCDon=1 shl 2;
    18.  pCursorOn=1 shl 1;
    19.  pFlashingCursor=1;
    20. cCursorShift=1 shl 4;
    21.  pDisplayShift2=1 shl 3;
    22.  pShitf2Right=1 shl 2;
    23. cSet=1 shl 5;
    24.  pDataLength8bit=1 shl 4;
    25.  p2Lines=1 shl 3;
    26.  p5x10=1 shl 2;
    27.  pSignGen1=1 shl 1;
    28. cSetCGRAMaddress=1 shl 6;
    29. cSetDRAMaddress=1 shl 7;
    30. // Instructions for graphics LCD
    31. cDisplayOn=$3F;
    32. cSetAddress=$40;
    33. cSetPage=$B8;
    34. cDisplayStartLine=$C0;
    35.  
    36. T8bitInterface=$1000;
    37. T4bitInterface=$1001;
    38.  
    39. procedure InitLCD(TypeLCD: dword; InterfaceType: dword);
    40. procedure OutString2x16(Line1, Line2: string);
    41. procedure DefineChar();
    42. procedure ConvBMP2LCD(n: dword);
    43. procedure RenderBuf();
    44.  
    45. var tInterfaceType: dword;
    46. LPTportbase: word=$378;
    47. chipselect: byte=0;
    48. buffer: array [0..7, 0..127] of byte;
    49. bmp: TBitmap;
    50. char1: array [0..7, 0..4] of byte= // тут можно дефайнить символы
    51. ((0,1,1,1,0),
    52.  (1,0,1,0,1),
    53.  (1,0,1,0,1),
    54.  (1,0,1,0,1),
    55.  (1,0,1,1,1),
    56.  (1,0,0,0,1),
    57.  (1,0,0,0,1),
    58.  (0,1,1,1,0));
    59.  
    60. implementation
    61.  
    62. procedure OutCmd(cmd: byte);
    63. begin
    64.  if tInterfaceType=T8bitInterface then
    65.  asm
    66.   mov AL, 0
    67.   or AL, chipselect
    68.   mov DX, LPTportbase
    69.   add DX, 2
    70.   out DX, AL
    71.  
    72.   mov AL, cmd
    73.   mov DX, LPTportbase
    74.   out DX, AL
    75.  
    76.   mov AL, 1
    77.   or AL, chipselect
    78.   mov DX, LPTportbase
    79.   add DX, 2
    80.   out DX, AL
    81.  end else
    82.  asm
    83.   mov AL, 0
    84.   mov DX, LPTportbase
    85.   add DX, 2
    86.   out DX, AL
    87.  
    88.   mov AL, cmd
    89.   and AL, 0F0h
    90.   mov DX, LPTportbase
    91.   out DX, AL
    92.  
    93.   mov AL, 1
    94.   mov DX, LPTportbase
    95.   add DX, 2
    96.   out DX, AL
    97.  
    98.   mov AL, 0
    99.   mov DX, LPTportbase
    100.   add DX, 2
    101.   out DX, AL
    102.  
    103.   mov AL, cmd
    104.   and AL, 0Fh
    105.   shl AL, 4
    106.   mov DX, LPTportbase
    107.   out DX, AL
    108.  
    109.   mov AL, 1
    110.   mov DX, LPTportbase
    111.   add DX, 2
    112.   out DX, AL
    113.  end;
    114. end;
    115.  
    116. procedure OutData(data: byte);
    117. begin
    118.  if tInterfaceType=T8bitInterface then
    119.  asm
    120.   mov AL, 0
    121.   or AL, 4
    122.   or AL, chipselect
    123.   mov DX, LPTportbase
    124.   add DX, 2
    125.   out DX, AL
    126.  
    127.   mov AL, data
    128.   mov DX, LPTportbase
    129.   out DX, AL
    130.  
    131.   mov AL, 1
    132.   or AL, 4
    133.   or AL, chipselect
    134.   mov DX, LPTportbase
    135.   add DX, 2
    136.   out DX, AL
    137.  end else
    138.  asm
    139.   mov AL, 0
    140.   or AL, 4
    141.   mov DX, LPTportbase
    142.   add DX, 2
    143.   out DX, AL
    144.  
    145.   mov AL, data
    146.   and AL, 0F0h
    147.   mov DX, LPTportbase
    148.   out DX, AL
    149.  
    150.   mov AL, 1
    151.   or AL, 4
    152.   mov DX, LPTportbase
    153.   add DX, 2
    154.   out DX, AL
    155.  
    156.   mov AL, 0
    157.   or AL, 4
    158.   mov DX, LPTportbase
    159.   add DX, 2
    160.   out DX, AL
    161.  
    162.   mov AL, data
    163.   and AL, 0Fh
    164.   shl AL, 4
    165.   mov DX, LPTportbase
    166.   out DX, AL
    167.  
    168.   mov AL, 1
    169.   or AL, 4
    170.   mov DX, LPTportbase
    171.   add DX, 2
    172.   out DX, AL
    173.  end;
    174. end;
    175.  
    176. procedure ConvBMP2LCD(n: dword);
    177. var l, i, ix: dword; b: byte;
    178. begin
    179.  for l:=0 to 7 do
    180.  begin
    181.   for i:=0 to 127 do
    182.   begin
    183.    b:=0;
    184.    for ix:=0 to 7 do if bmp.Canvas.Pixels[i+(n*128), (l*8)+ix]=0 then b:=b or (1 shl (7-ix));
    185.    buffer[7-l, 127-i]:=b;
    186.   end;
    187.  end;
    188. end;
    189.  
    190. procedure RenderBuf();
    191. var i, l, d: dword;
    192. begin
    193.  chipselect:=8;
    194.  OutCmd(cDisplayStartLine or 0);
    195.  sleep(1);
    196.  OutCmd(cSetAddress or 0);
    197.  sleep(1);
    198.  for l:=0 to 7 do
    199.  begin
    200.   OutCmd(cSetPage or l);
    201.   sleep(1);
    202.   for i:=0 to 63 do
    203.   begin
    204.    OutData(buffer[l, i]);
    205.    for d:=0 to 5000 do asm nop end; // задержка
    206.   end;
    207.  end;
    208.  
    209.  chipselect:=2;
    210.  OutCmd(cDisplayStartLine or 0);
    211.  sleep(1);
    212.  OutCmd(cSetAddress or 0);
    213.  sleep(1);
    214.  for l:=0 to 7 do
    215.  begin
    216.   OutCmd(cSetPage or l);
    217.   sleep(1);
    218.   for i:=0 to 63 do
    219.   begin
    220.    OutData(buffer[l, i+64]);
    221.    for d:=0 to 5000 do asm nop end;
    222.   end;
    223.  end;
    224. end;
    225.  
    226. procedure InitLCD(TypeLCD: dword; InterfaceType: dword);
    227. begin
    228.  tInterfaceType:=InterfaceType;
    229.  if TypeLCD=TCharLCD then
    230.  begin
    231.   if InterfaceType=T8bitInterface then
    232.   begin
    233.    OutCmd(cSet or pDataLength8bit or p2Lines or pSignGen1);
    234.    sleep(1);
    235.    OutCmd(cSet or pDataLength8bit or p2Lines or pSignGen1);
    236.    sleep(1);
    237.    OutCmd(cSet or pDataLength8bit or p2Lines or pSignGen1);
    238.   end else
    239.   begin
    240.    OutCmd(cSet or p2Lines or pSignGen1);
    241.    sleep(1);
    242.    OutCmd(cSet or p2Lines or pSignGen1);
    243.    sleep(1);
    244.    OutCmd(cSet or p2Lines or pSignGen1);
    245.   end;
    246.    sleep(1);
    247.    OutCmd(cControl or pLCDOn);
    248.    sleep(1);
    249.    OutCmd(cMode or pIncrement);
    250.    sleep(1);
    251.    OutCmd(cClearLCD);
    252.    sleep(1);
    253.    OutCmd(cReturn);
    254.    sleep(1);
    255.    DefineChar();
    256.    OutCmd(cReturn);
    257.    sleep(1);
    258.   end else
    259.  if TypeLCD=TGraphLCD then
    260.  begin
    261.   tInterfaceType:=T8bitInterface;
    262.   OutCmd(cDisplayOn);
    263.   bmp:=TBitmap.create;
    264.   bmp.LoadFromFile('logo.bmp');
    265.  end;
    266. end;
    267.  
    268. procedure OutString2x16(Line1, Line2: string);
    269. var buf: array [0..39] of char; i: dword;
    270. begin
    271.  ZeroMemory(@buf, 40);
    272.  CopyMemory(@buf[0], @Line1[1], Length(Line1));
    273.  for i:=0 to 39 do if buf[i]=#0 then buf[i]:=#32;
    274.  for i:=0 to 39 do
    275.  begin
    276.   OutData(byte(buf[i]));
    277.   sleep(1);
    278.  end;
    279.  ZeroMemory(@buf, 40);
    280.  CopyMemory(@buf[0], @Line2[1], Length(Line2));
    281.  for i:=0 to 39 do if buf[i]=#0 then buf[i]:=#32;
    282.  for i:=0 to 39 do
    283.  begin
    284.   OutData(byte(buf[i]));
    285.   sleep(1);
    286.  end;
    287. end;
    288.  
    289. procedure DefineChar(); // не дописана, дефайнит тока один символ из 8
    290. var i, c: dword; b: byte;
    291. begin
    292.  for i:=0 to 7 do
    293.  begin
    294.   OutCmd(cSetCGRAMaddress or i);
    295.   sleep(1);
    296.   b:=0;
    297.   for c:=0 to 4 do
    298.   begin
    299.    if char1[i, 4-c]=1 then b:=b or (1 shl c);
    300.   end;
    301.   OutData(b);
    302.   sleep(1);
    303.  end;
    304. end;
    305.  
    306. end.
     
  12. Exp10der

    Exp10der Мастер дзена

    Публикаций:
    0
    Регистрация:
    27 авг 2007
    Сообщения:
    337
    Адрес:
    Красноярск
  13. FASM_RU

    FASM_RU New Member

    Публикаций:
    0
    Регистрация:
    16 ноя 2008
    Сообщения:
    1
    В журнале »Радиохобби» (http://radiohobby.lcd.net) №5 за октябрь 2008
    в статье Микроконтроллерное управление звуком описано применение, тестирование,
    программирование и все такое для дисплея от телефона Siemens S65 - LPH88 (132x176, 65 000 цветов).
     
  14. Exp10der

    Exp10der Мастер дзена

    Публикаций:
    0
    Регистрация:
    27 авг 2007
    Сообщения:
    337
    Адрес:
    Красноярск
    [​IMG]
    а так оно в действии, всё никак руки не доходили выложить
     
  15. RamMerLabs

    RamMerLabs Well-Known Member

    Публикаций:
    0
    Регистрация:
    11 сен 2006
    Сообщения:
    1.426
    Exp10der
    симпатишна аднака, я се 2х16 знакосинтезирующий лепил когда-то, теперь перейду на графику :)
     
  16. Exp10der

    Exp10der Мастер дзена

    Публикаций:
    0
    Регистрация:
    27 авг 2007
    Сообщения:
    337
    Адрес:
    Красноярск
    RamMerLabs кстати вакуумно-люминесцентные символьные круто смотрятся правда фиг найдёшь, да и дорогие
    [​IMG] вот с какого то сайта
     
  17. Exp10der

    Exp10der Мастер дзена

    Публикаций:
    0
    Регистрация:
    27 авг 2007
    Сообщения:
    337
    Адрес:
    Красноярск
    кстати если данная тема интересна могу небольшую статейку для васма забацать о пайке и кодинге (delphi+masm) дисплеев.
     
  18. RamMerLabs

    RamMerLabs Well-Known Member

    Публикаций:
    0
    Регистрация:
    11 сен 2006
    Сообщения:
    1.426
    Exp10der
    конечно интересно! если можно - кода побольше :)
     
  19. Aquila

    Aquila Самурай дзена

    Публикаций:
    0
    Регистрация:
    30 авг 2002
    Сообщения:
    1.467
    Адрес:
    Russia, Moscow
    Exp10der
    Давай, было бы круто ;).
     
  20. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    огаога. а то валяецо пара старых сименсов, хоть кудато сгодятся :))