http://www.dwin.com.cn/home/English/lcm_info
Polski dystrybutor: http://whiteelectronics.pl/
Dwin jest producentem inteligentnych wyświetlaczy sterowanych poprzez port szeregowy.
Do wyświetlacza dołączone jest darmowe oprogramowanie pozwalające na bardzo szybkie tworzenie interfejsu użytkownika (DGUS v5.10)
Przy pomocy dowolnego graficznego programu tworzymy ekrany, po czym w oprogramowaniu GDUS nanosimy siatkę z wybranymi funkcjami.
Do wyboru jest spora ilość funkcji, która pozwala nam na stworzenie w bardzo szybkim czasie całkiem niezłego interfejsu użytkownika.
Nie będę się tu rozpisywał na temat samych wyświetlaczy bo materiału na ich temat jest dość sporo i w sumie mógł by to być osobny dział.
Mój egzemplarz to 7 cali z pojemnościowym ekranem dotykowym o rozdzielczości 800x480.
Biblioteka przygotowana pod "project mode" z plikami $include
Do głównego programu wklejamy:
$include "subs\Macro_Dwin_variables_constants_arrays.inc"
$include "subs\LCD_var_Write.inc"
$include "subs\LCD_page_set.inc"
$include "subs\Function_Dwin_lcd_get_var_value.inc"
W miejscu deklaracji zmiennych wklejamy Macro:
Macro_dwin_variables_constants_arrays 'all Dim variables constants and arrays for this lib
W osobnym folderze umieszczamy wszytkie nasze sub rutyny z rozszerzeniem *.inc.
W moim przypadku folder ten miał nazwę Subs.
Jak używać?
Gdy będziemy chcieli zmienić wartość komórki piszemy:
Call Lcd_var_write(adres hex ,wartosc od 0 do 65535)
Zmian ekranu:
Sub Lcd_page_wr(numer strony w hex 0 do ff )
Funkcja odczytu zawartości komórki pamięci:
zmienna word= Dwin_lcd_get_var_value(adres komórki hex z której odczytujemy )
Plik spakowany rarem dołączę w następnym poście bo tym razem już chyba wyczerpałem ilość dozwolonych załączników.
Makro z deklaracjami zmiennych, stałych oraz tablic:
Code: [Zaznacz cały] [Rozwiń/Zwiń]
- $nocompile
- 'ver1.0 by SP9DR 2018
- 'pawel.labedz@gmail.com
- 'all variables needed for DWin librray
- Macro Macro_dwin_variables_constants_arrays
- Dim Dwin_arr_tx(8)as Byte 'tablica na adres do dwin
- Dim Dwin_ad As Word At Dwin_arr_tx(5) Overlay 'nakladka na adress
- 'Dim Dwin_ad_tmp As Word
- Dim Dwin_val As Word At Dwin_arr_tx(7) Overlay 'nakladka na wartsosc
- 'Dim Dwin_val_tmp As Word ' little endian na big endian
- Dim Dwin_arr_rx(9) As Byte
- Dim Dwin_var_rx As Word At Dwin_arr_rx(8) Overlay 'nakladka na tablice odbioru z dwin
- Dim Dwin_var_rx_tmp As Word
- '************************* Constants *******************************************
- Const Dwin = 4 'uart
- Const Header1 = &H5A
- Const Header2 = &HA5 'LCd address
- Const Regwrite = &H80 'register write
- Const Regread = &H81 'register read
- Const Varwrite = &H82 'variable write command
- Const Varread = &H83 'variable read command
- Const Graphwr = &H84 'graph write Only
- '*******************************************************************************
- '************************* Arrays **********************************************
- Dwin_arr_tx(1) = Header1
- Dwin_arr_tx(2) = Header2
- Dwin_arr_tx(3) = &H05 'ile zmiennych 5 defaultowo!
- Dwin_arr_tx(4) = Varwrite 'zapisz
- Dwin_arr_tx(5) = 0 'address_h
- Dwin_arr_tx(6) = &H10 'address_l
- Dwin_arr_tx(7) = &H01 'value_h
- Dwin_arr_tx(8) = &H0 'value_l
- '*******************************************************************************
- Dwin_arr_rx(1) = &HFF
- Dwin_arr_rx(2) = &HFF
- Dwin_arr_rx(3) = &HFF 'ile zmiennych 5 defaultowo!
- Dwin_arr_rx(4) = &HFF 'read
- Dwin_arr_rx(5) = &HFF 'address_h
- Dwin_arr_rx(6) = &HFF 'address_l
- Dwin_arr_rx(7) = &HFF 'value_h
- Dwin_arr_rx(8) = &HFF 'value_l
- Dwin_arr_rx(9) = &HFF 'value_l
- '*******************************************************************************
- End Macro
Sub dla zapisu wartości do wybranej komórki pamięci wyświetlacza Dwin:
Code: [Zaznacz cały] [Rozwiń/Zwiń]
- $nocompile
- 'ver1.1 by SP9DR 2016-2018
- 'DWIN lcd variable write sub
- Sub Lcd_var_write(byval Ad As Word , Byval Value As Word )
- 'we need to swap position look in to table below how dtat is stored is SRAM
- Swap Ad 'litle endian to big endian
- Dwin_ad = Ad 'asign the value to Diwn array adres postion
- Swap Value 'litle endian to big endian
- Dwin_val = Value 'asign the value to Diwn array Value postion
- Printbin#dwin , Dwin_arr_tx(1) , 8 'print bin whole array
- End Sub
- '*****************************************************************
- '*****************************************************************
- ' This is how it will be stored in SRAM
- ' <-------var---->
- ' +-------+------+
- ' | Byte_1|Byte_2|
- ' +-------+------+
- 'But when you print it with print
- ' <-------var--->
- ' +------+------+
- ' |Byte_2|Byte_1|
- ' +------+------+
- '*****************************************************************
- '*********************change log**********************************
- 'ver1.0 2016
- 'ver1.1 2018 removed channel and buart
- 'fixed endian
Code: [Zaznacz cały] [Rozwiń/Zwiń]
- $nocompile
- 'ver1.1 by SP9DR 2016-2018
- 'DWIN lcd screen number write sub
- Sub Lcd_page_wr(byval Page As Byte )
- '[EN]we using only one byte but have to send word thas why &h00 is before page
- '[PL] uzywamy tylko jednego bajtu, standardowy rozmiar na zmienna to dwa bajty dlatego górby bajt ma wartosc &h00
- Printbin # Dwin , &H5A ; &HA5 ; &H04 ; Regwrite ; &H03 ; &H00 ; Page ;
- End Sub
- '*****************************************************************
- 'Const Header1 = &H5A LCd address
- 'Const Header2 = &HA5 LCd address
- '&h04 -Number of variable to send now only 4
- '&H03 -Adress in Dwin lcd memory for screen number
- 'Const Regwrite = &H80 register write
- 'Const Regread = &H81 register read
- 'Const Varwrite = &H82 variable write command
- '*****************************************************************
- '*********************change log**********************************
- 'ver1.0 2016 'intial version
- 'ver1.1 2018 removed channel and buart
Code: [Zaznacz cały] [Rozwiń/Zwiń]
- 'ver1.0 by SP9DR 2018
- '[en]DWIN lcd variable read (one word only)
- '[pl] dwin lcd odczyt zmiennych (tylko jedna zmienna word)
- $nocompile
- Function Dwin_lcd_get_var_value(byval Var_add As Word )as Word 'function
- Printbin #dwin , &H5A ; &HA5 ; &H04 ; &H83 ; Dwin_ad ; &H01 '[pl] wyslij zapytanie do LCD [en] sent request to lcd
- '#dwin -[pl] numer portu com deklarowany w w prgramie glownym [en] com port declared in mian file
- '&H5a -[pl] naglowek transmisi 1 [en] transmistion header 1
- '&Ha5 -[pl] naglowek transmisi 2 [en] transmistion header 2
- '&H04 -[pl] ile bajtow wysylamy [en] number of bytes to send
- '&H83- [pl] komenda odczyt [en] read commnad
- 'Dwin_ad- [pl] adres w pamieci wyswietlacza [en] memmory adress
- '&H01-[pl] ile zimmeych odczytaj (word) [en] numer of words to read
- '[pl] tu odczytujemy tyko jednego worda [en] we are reading only one word here
- While Ischarwaiting(#dwin) > 0 '[pl] jak dlugo znaki czekaj odczytuj z bufora [en] while char in buffer read them
- Inputbin #dwin , Dwin_arr_rx(1) , 9 '[pl] odczytaj binarnie do tablicy zaczynajc od 1 komorki 9 nastepnych [en] read binary starting at index 1 and read next 9 bytes
- Wend 'while end
- Swap Dwin_var_rx '[pl] musimy zamienic miescami wartosc odczytana z maego endian na duzego [en] swap endian from small to big endian
- Dwin_lcd_get_var_value = Dwin_var_rx '[pl] przypisz wartosc do funkcji [en] asign value to function
- End Function
Kolejne Suby i funkcję będę dodawał w miarę ich tworzenia.
Pikczu