VARIABLES. Project : ArduinoLCD VARIABLES : Release : LCDMessage. Ver :1.00. Author : Sergio Bertana. Date:18/02/2014. Note : Page:1 of 1

Documenti analoghi
FUNCTION_BLOCK ModbusConversion

VARIABLES. VAR_GLOBAL Di00M00 : BOOL; Di01M00 : BOOL; Do00M00 : BOOL; Do01M00 : BOOL; Start : BOOL; (* Test baud rate start *) END_VAR

1.1 Libreria gestione protocollo cctalk (ecctalkprotolib)

7.23 Funzioni ed FB supporto inverter Power One

FB gestione protocollo IEC

HTTPClient, HTTP client

Corso di Automazione industriale

Blocchi funzione: FbModbusAsciiMs

1.1 Funzioni ed FB gestione modem (emodemlib)

7.16 Funzioni ed FB gestione modem

1.1 Libreria gestione dispositivi Modbus (ellabmdbdevslib)

C:\ProgrammiC\Dino18\terminal.h

PIEDINO NOME DESCRIZIONE

Scopo e agenda dell Unità 6

IM-IU v0.1. alternata e continua. pag. 1 / 5

Dialogo tra strumentazione elettronica e calcolatore mediante protocollo IEEE-488

Note su. Display a cristalli liquidi e il controller/driver HD44780

M. Electronics. M.M.Electronics - Michele Marino - Controllo di un display LCD 16x2 V 0.

Esercitazione su. LCD alfanumerico con controller/driver HD44780

C:\ProgrammiC\Dino18\terminal.h

Esercitazione su. LCD alfanumerico con controller/driver HD44780

UNIVERSITA DEGLI STUDI DI CATANIA

CALCOLATORI ELETTRONICI II

EML-16 EML-16. Pulses concentrator. Concentratore impulsi MODBUS COMMUNICATION PROTOCOL PROTOCOLLO DI COMUNICAZIONE MODBUS

Architettura dei sistemi di elaborazione (Input/Output parte 1)

Registro a 4 bit P 1 D P 1 D C 0

Structured Text. Structured Text. Marco Mauri. Politecnico di Milano P.zza Leonardo da Vinci, Maggio

Info@HenonResearch.com. Http: Pagina 1

MODBUS RTU MC608 CMD03+CMD16

DISPLAY REMOTO PILOTATO DALLA SERIALE. LCD_SERv10

Davide Gennaretti, Matteo Nicolini

PROTOCOLLO DI COMUNICAZIONE MODBUS MODBUS COMMUNICATION PROTOCOL. MANUALE ISTRUZIONI / INSTRUCTION MANUAL IM163-IU v0.61

FOXLINK SIRCO MANUALE D'USO COMUNICAZIONE SERIALE (FOXLINK) Sirco Automazione 1

Ing. Emiliano Capuzzo Remote Contro NEC 11/11/2003. Remote Control NEC

SDM320M. Guida e caratteristiche tecniche

PULSE GENERATOR 50us - 999s with PIC16F886 microcontroller and LCD Module

UNIVERSITÀ DEGLI STUDI DI NAPOLI FEDERICO II

AXF402 BXC404 - BXF202 EXC202 - EXC402 EXF202 - EXF402 FXC202

Guida all utilizzo del modulo MPI BrainChild

Programmazione IEC su SlimLine File system

L utility Unix awk [Aho-Weinberger-Kernighan]

Lezione XII: La gestione delle eccezioni in MINIX

Corso di Laboratorio di Sistemi Operativi

LO HAI MAI REALIZZATO CON UN PIC? - I PICMICRO E I DISPLAY GRAFICI (SECONDA

Come utilizzare il modulo ESP8266 per comodare Arduino da Smartphone

Miscelazione calcestruzzo

Remotaggio Caricabatterie NG3

D:\Fulvio\Elettronica\Anemometro\codici\vento_lcd_41.pbp

Lezione 16: Come utilizzare la Joystick shield per i propri progetti con Arduino

Informatica I Facoltà di Ingegneria

MANUALE UTENTE. Gateway DLMS-MODBUS per LANDIS&GYR E650 con RS485 P/N: GW-DLMS-485-LG. Edizione 2.0

AI 464 ETH. Gestione dell interfaccia AI_4164_ETH

Processore. Memoria I/O. Control (Parte di controllo) Datapath (Parte operativa)

Architettura degli Elaboratori

MANUALE UTENTE. Gateway DLMS-MODBUS per LANDIS&GYR E650 con RS232 P/N: GW-DLMS-232-LG. Edizione 2.0

Le etichette nei programmi. Istruzioni di branch: beq. Istruzioni di branch: bne. Istruzioni di jump: j

Tastiera DS-1002KI e DS-1003KI. Manuale Utente. Versione 1.0

Corso di programmazione Arduino DI MALVEZZI DAVIDE

Sviluppare un programma in FORTRAN

LabVIEW BUS IEEE-488 Gianfranco Miele

Laboratorio di Programmazione(corso A) Laurea in Informatica - A.A. 2000/2001 Docente: A. Lanza

STANDARD IEC PRIMA PARTE Introduzione SECONDA PARTE Elementi comuni TERZA PARTE Linguaggi di programmazione

ISTRUZIONI PER L'UTILIZZO DEL PROTOCOLLO MODBUS

Code: GW-IMP-WEB-1. Datalogger web pulses counter. Version 6 inputs with Ethernet. MarCom

Nastro trasportatore con ribaltamento cassetta.

UD4 - MATLAB. M-file. Efficienza degli algoritmi. Formati d uscita

CORSO ARDUINO. Jacopo Belli Giulio Fieramosca Luca Mattii GOLEM Jacopo Belli Giulio Fieramosca Luca Mattii

OPEN DRIVE OPEN DRIVE

L utility Unix awk [Aho-Weinberger-Kernighan]

Introduzione al MATLAB c Parte 3 Script e function

Introduzione al MATLAB c Parte 3 Script e function

Realizzata da : Cavallo Nicola. Pietroboni Marco CLASSE V BZ ANNO SCOLASTICO 2005/06. Istituto Professionale di Stato per l Industria e l Artigianato

DISPLAY LCD HD44780U(LCD-II)

Architettura degli Elaboratori

Programmazione IEC su SlimLine

Standard IEC 1131 Lo standard dei PLC

Architettura dei calcolatori e sistemi operativi. Input Output. IO 3 Device driver

Opera Crate Monitor Software Reference Manual V2.0

1.1 Libreria gestione servizio REST (ellabrestsvclib)

Sistemi Operativi SISTEMI DI INPUT/OUTPUT. D. Talia - UNICAL. Sistemi Operativi 10.1

M400 Utilizzo di Encoder con M400

CALCOLATORI ELETTRONICI. I dispositivi di memoria

Genere DATA Generalità Note Distribuzione

7^ parte : Acquisizione della temperatura con LM35 e visualizzazione su display LCD. Author: Ing. Sebastiano Giannitto (ITIS M.

SISTEMI DI ELABORAZIONE E CONTROLLO M Ingegneria dell'automazione RTAI IPC

FUNZIONI PARAMETRI DEFINIZIONI DI PROCEDURE PROCEDURE

INGEGNERIA E TECNOLOGIE DEI SISTEMI DI CONTROLLO Processori per sistemi di controllo. Classificazione. I microcontrollori

INGEGNERIA E TECNOLOGIE DEI SISTEMI DI CONTROLLO Processori per sistemi di controllo

TM1638 BOARD con ARDUINO

r:\ \dcm04176\dcm009a100\phptomodbus\phpscripts\readtemp.php martedì 19 maggio :50

FUNZIONI. Dichiarazione: Definizione:

TIA Portal V12. Novità di programmazione nell S Siemens AG All Rights Reserved.

ISA Input / Output (I/O) Data register Controller

Sistemi Operativi (M. Cesati)

Gestione ricette terminale Weintek

Indice lezione: repeat. until CPU halt. Richiami e notazioni:

Indice lezione: Pagina 2

Transcript:

VARIABLES VAR_GLOBAL Day : USINT; (* Valore giorno *) Month : USINT; (* Valore mese *) Year : USINT; (* Valore anno *) Hour : USINT; (* Valore ora *) Minute : USINT; (* Valore minuti *) Second : USINT; (* Valore secondi *) VARIABLES : Page:1 of 1

PROGRAM LCDMessages VAR LCD : ArduinoLCD; (* LCD management FB *) DTime : SysETimeToDate; (* Conversione in Data/Ora *) TimeBf : UDINT; (* Time buffer (us) *) 1 (* ************************************************************************** *) 2 (* PROGRAM "LCDMessages" *) 3 (* ************************************************************************** *) 4 (* Questo programma gestisce i messaggi del display LCD. *) 5 (* -------------------------------------------------------------------------- *) 6 7 (* ---------------------------------------------------------------------- *) 8 (* GESTIONE DISPLAY LCD *) 9 (* ---------------------------------------------------------------------- *) 10 (* Gestione blocco funzione display. *) 11 12 LCD.I2CAddress:=16#3F; (* LCD I2C address *) 13 LCD.HMIBuiltInID:=NewHMI.HMIBuiltInID; (* ID gestione messaggi *) 14 LCD(Enable:=TRUE); (* Gestione FB *) 15 16 (* ---------------------------------------------------------------------- *) 17 (* GESTIONE ROTAZIONE MESSAGGI DISPLAY *) 18 (* ---------------------------------------------------------------------- *) 19 (* Ogni 3 secondi vario il messaggio visualizzato sul display. *) 20 21 IF ((SysGetSysTime(TRUE)-TimeBf) > 3000000) THEN 22 TimeBf:=SysGetSysTime(TRUE); (* Time buffer (us) *) 23 NewHMI.ViewMID:=NewHMI.ViewMID+1; (* Displays the message with the defined ID *) 24 25 IF (NewHMI.ViewMID > 2) THEN NewHMI.ViewMID:=1; END_IF; 26 END_IF; 27 28 (* ---------------------------------------------------------------------- *) 29 (* GESTIONE DATA/ORA *) 30 (* ---------------------------------------------------------------------- *) 31 (* Gestione Data/Ora per visualizzazione. *) 32 33 DTime(EpochTime:=SysDateTime); (* Conversione in Data/Ora *) 34 Day:=DTime.Day; (* Valore giorno *) 35 Month:=DTime.Month; (* Valore mese *) 36 Year:=TO_USINT(DTime.Year-2000); (* Valore anno *) 37 Hour:=DTime.Hour; (* Valore ora *) 38 Minute:=DTime.Minute; (* Valore minuti *) 39 Second:=DTime.Second; (* Valore secondi *) 40 41 (* [End of file] *) 42 43 PROGRAM : LCDMessages Page:1 of 1

Arduino LCD with I2C interface VAR_INPUT Enable : BOOL; (* FB enable *) HMIBuiltInID : @_HMIBUILTINDATA; (* HMI built in ID *) I2CAddress : USINT; (* LCD I2C address *) VAR_OUTPUT Enabled : BOOL; (* FB enabled *) Fault : BOOL; (* FB fault *) VAR_EXTERNAL SysActTaskID : USINT; (* Tasks in progress identification number *) VAR CaseNr : ARRAY[ 0..1 ] OF USINT; (* Case gestione *) DWrBuffer : ARRAY[ 0..3 ] OF BYTE; (* Display write buffer *) TimeBf : UDINT; (* Time buffer (us) *) DDIDx : USINT; (* Display data index *) Ptr : @USINT; (* Auxiliary pointer *) 1 (* ************************************************************************** *) 2 (* FUNCTION BLOCK "ArduinoLCD" *) 3 (* ************************************************************************** *) 4 (* Questo blocco funzione esegue la gestione del controller display SainSmart *) 5 (* IIC/I2C/TWI 1602 Serial LCD Module Display For Arduino UNO MEGA R3. *) 6 (* Il controller utilizza un PCF8574 "Remote 8-bit I/O expander for I2C-bus" *) 7 (* per gestire i segnali di controllo di un display con interfaccia parallela *) 8 (* QC2004A Systronix basato sul controller HD44780U della Hitachi. *) 9 (* -------------------------------------------------------------------------- *) 10 (* Gli 8 ports di uscita del I/O expander sono connessi al display nel modo. *) 11 (* *) 12 (* Pin 4 P0 -> Pin 4 Rs Display *) 13 (* Pin 5 P1 -> Pin 5 R/W Display *) 14 (* Pin 6 P2 -> Pin 6 En Display *) 15 (* Pin 7 P3 -> Comando backlight *) 16 (* Pin 9 P4 -> Pin 11 D4 Display *) 17 (* Pin 10 P5 -> Pin 12 D5 Display *) 18 (* Pin 11 P6 -> Pin 13 D6 Display *) 19 (* Pin 12 P7 -> Pin 14 D7 Display *) 20 (* -------------------------------------------------------------------------- *) 21 (* connesso su bus I2C. Viene gestita la connessione con la FB di gestione *) 22 (* messaggi di cui è fornito indirizzo struttura "_HMIBUILTINDATA". *) 23 (* -------------------------------------------------------------------------- *) 24 25 (* ---------------------------------------------------------------------- *) 26 (* INIZIALIZZAZIONI *) 27 (* ---------------------------------------------------------------------- *) 28 (* Eseguo reset bit di one shot. *) 29 30 IF (Fault) THEN Fault:=FALSE; CaseNr[0]:=0; CaseNr[1]:=0; END_IF; 31 32 (* Controllo se "HMIBuiltInID" definito, deve essere passato l'indirizzo *) 33 (* della FB creata da LogicLab. *) Page:1 of 5

34 35 IF (TO_UDINT(HMIBuiltInID) = 0) THEN Fault:=TRUE; RETURN; END_IF; 36 IF (@HMIBuiltInID.UniqueID <> 16#15052013) THEN Fault:=TRUE; RETURN; END_IF; 37 38 (* Eseguo controllo se FB eseguita in task di background. *) 39 40 IF (SysActTaskID <> ID_TASK_BACK) THEN Fault:=TRUE; RETURN; END_IF; 41 42 (* ---------------------------------------------------------------------- *) 43 (* ESEGUO GESTIONE ABILITAZIONE *) 44 (* ---------------------------------------------------------------------- *) 45 (* Gestione abilitazione blocco funzione. *) 46 47 IF NOT(Enable) THEN Enabled:=FALSE; RETURN; END_IF; 48 49 (* Gestione primo loop abilitazione. *) 50 51 IF NOT(Enabled) THEN 52 Enabled:=TRUE; (* FB enabled *) 53 CaseNr[0]:=16#00; (* Case gestione *) 54 CaseNr[1]:=16#FF; (* Case gestione *) 55 END_IF; 56 57 (* Per informare la FB "HMIBuiltInMessages" che la figlia è connessa si *) 58 (* deve azzerare il bit di conrollo. *) 59 60 @HMIBuiltInID.Heartbeat:=FALSE; (* Heartbeat (To/From child) *) 61 62 (* ---------------------------------------------------------------------- *) 63 (* GESTIONE ABILITAZIONE *) 64 (* ---------------------------------------------------------------------- *) 65 (* Gestione abilitazione blocco funzione. *) 66 67 IF NOT(Enable) THEN Enabled:=FALSE; RETURN; END_IF; 68 69 (* Gestione primo loop abilitazione. *) 70 71 IF NOT(Enabled) THEN 72 Enabled:=TRUE; (* FB enabled *) 73 CaseNr[0]:=16#00; (* Case gestione *) 74 CaseNr[1]:=16#FF; (* Case gestione *) 75 END_IF; 76 77 (* ---------------------------------------------------------------------- *) 78 (* TEMPORIZZAZIONE TRA CASES PROGRAMMA *) 79 (* ---------------------------------------------------------------------- *) 80 (* Siccome non è possibile leggere dal display il segnale di busy, viene *) 81 (* eseguita una temporizzazione tra i vari cases pari al tempo necessario *) 82 (* al display per eseguire il comando più lento (Clear display 760 us). *) 83 84 IF (CaseNr[0] <> CaseNr[1]) THEN 85 IF ((SysGetSysTime(TRUE)-TimeBf) < 1000) THEN RETURN; END_IF; 86 TimeBf:=SysGetSysTime(TRUE); (* Time buffer (us) *) 87 CaseNr[1]:=CaseNr[0]; (* Case gestione *) 88 END_IF; 89 90 (* ---------------------------------------------------------------------- *) 91 (* GESTIONE CASE PROGRAMMA *) 92 (* ---------------------------------------------------------------------- *) 93 (* Eseguo gestione case LCD. *) Page:2 of 5

94 95 CASE (CaseNr[0]) OF 96 97 (* ------------------------------------------------------------------ *) 98 (* INIZIALIZZAZIONE DISPLAY *) 99 (* ------------------------------------------------------------------ *) 100 (* In questi cases, viene eseguita la sequenza di reset del display. *) 101 (* In tutti questa cases occorre eseguire l'interfacciamento a 4 bit, *) 102 (* al termine della fase sarà possibile accedere al display ad 8 bit *) 103 (* eseguendo due accessi consecutivi a 4 bit. *) 104 (* ------------------------------------------------------------------ *) 105 (* Eseguo comando "Default function set". *) 106 107 0, 1, 2: 108 DWrBuffer[0]:=16#30; (* *) 109 DWrBuffer[1]:=16#34; (* En:=TRUE *) 110 DWrBuffer[2]:=16#30; (* *) 111 IF NOT(SysI2CWrRd(I2CAddress, 3, ADR(DWrBuffer), 0, 0)) THEN CaseNr[0]:=0; RETURN; END_IF; 112 CaseNr[0]:=CaseNr[0]+1; (* Case gestione *) 113 114 (* ------------------------------------------------------------------ *) 115 (* Eseguo set interfaccia a 4 bit. Dopo questo comando è possibile *) 116 (* inviare comandi ad 8 bit eseguendo due accesi consecutivi a 4 bit. *) 117 118 3: 119 DWrBuffer[0]:=16#20; (* *) 120 DWrBuffer[1]:=16#24; (* En:=TRUE *) 121 DWrBuffer[2]:=16#20; (* *) 122 IF NOT(SysI2CWrRd(I2CAddress, 3, ADR(DWrBuffer), 0, 0)) THEN CaseNr[0]:=0; RETURN; END_IF; 123 CaseNr[0]:=10; (* Case gestione *) 124 125 (* ------------------------------------------------------------------ *) 126 (* INIZIALIZZAZIONE DISPLAY *) 127 (* ------------------------------------------------------------------ *) 128 (* Eseguo comando "Function set DL, N, F", 8 bits, 2 lines, 5*7 dots *) 129 130 10: 131 IF NOT(LCDOut8Bit(I2CAddress, 16#28, FALSE, TRUE)) THEN CaseNr[0]:=0; RETURN; END_IF; 132 CaseNr[0]:=CaseNr[0]+1; (* Case gestione *) 133 134 (* ------------------------------------------------------------------ *) 135 (* Eseguo comando "Display on/off control". *) 136 137 11: 138 IF NOT(LCDOut8Bit(I2CAddress, 16#04, FALSE, TRUE)) THEN CaseNr[0]:=0; RETURN; END_IF; 139 CaseNr[0]:=CaseNr[0]+1; (* Case gestione *) 140 141 (* ------------------------------------------------------------------ *) 142 (* Eseguo comando "Clear display". *) 143 144 12: 145 IF NOT(LCDOut8Bit(I2CAddress, 16#01, FALSE, TRUE)) THEN CaseNr[0]:=0; RETURN; END_IF; 146 CaseNr[0]:=CaseNr[0]+1; (* Case gestione *) 147 148 (* ------------------------------------------------------------------ *) 149 (* Eseguo comando "Cursor and display shift". *) 150 151 13: 152 IF NOT(LCDOut8Bit(I2CAddress, 16#06, FALSE, TRUE)) THEN CaseNr[0]:=0; RETURN; END_IF; 153 CaseNr[0]:=CaseNr[0]+1; (* Case gestione *) Page:3 of 5

154 155 (* ------------------------------------------------------------------ *) 156 (* Eseguo comando "Display on/off control". *) 157 158 14: 159 IF NOT(LCDOut8Bit(I2CAddress, 16#0C, FALSE, TRUE)) THEN CaseNr[0]:=0; RETURN; END_IF; 160 CaseNr[0]:=100; (* Case gestione *) 161 162 (* ------------------------------------------------------------------ *) 163 (* SCRITTURA DATI SU DISPLAY *) 164 (* ------------------------------------------------------------------ *) 165 (* Eseguo scrittura dato sul display. Il tempo necessario è 37 us *) 166 (* quindi non eseguo temporizzazione, il tempo di loop del programma *) 167 (* PLC sarà sicuramente maggiore. *) 168 (* ------------------------------------------------------------------ *) 169 (* Eseguo comando "Set DDRAM address". *) 170 171 100: 172 IF NOT(@HMIBuiltInID.DUpdated) THEN RETURN; END_IF; 173 IF NOT(LCDOut8Bit(I2CAddress, 16#80, FALSE, TRUE)) THEN CaseNr[0]:=0; RETURN; END_IF; 174 DDIDx:=0; (* Display data index *) 175 CaseNr[0]:=CaseNr[0]+1; (* Case gestione *) 176 177 (* -------------------------------------------------------[1a Riga]-- *) 178 179 101: 180 Ptr:=TO_UDINT(@HMIBuiltInID.DData)+DDIDx; (* Auxiliary pointer *) 181 IF NOT(LCDOut8Bit(I2CAddress, @Ptr, TRUE, TRUE)) THEN CaseNr[0]:=0; RETURN; END_IF; 182 DDIDx:=DDIDx+1; (* Display data index *) 183 IF (DDIDx < 20) THEN RETURN; END_IF; 184 185 IF NOT(LCDOut8Bit(I2CAddress, 16#C0, FALSE, TRUE)) THEN CaseNr[0]:=0; RETURN; END_IF; 186 CaseNr[0]:=CaseNr[0]+1; (* Case gestione *) 187 188 (* -------------------------------------------------------[2a Riga]-- *) 189 190 102: 191 Ptr:=TO_UDINT(@HMIBuiltInID.DData)+DDIDx; (* Auxiliary pointer *) 192 IF NOT(LCDOut8Bit(I2CAddress, @Ptr, TRUE, TRUE)) THEN CaseNr[0]:=0; RETURN; END_IF; 193 DDIDx:=DDIDx+1; (* Display data index *) 194 IF (DDIDx < 40) THEN RETURN; END_IF; 195 196 IF NOT(LCDOut8Bit(I2CAddress, 16#94, FALSE, TRUE)) THEN CaseNr[0]:=0; RETURN; END_IF; 197 CaseNr[0]:=CaseNr[0]+1; (* Case gestione *) 198 199 (* -------------------------------------------------------[3a Riga]-- *) 200 201 103: 202 Ptr:=TO_UDINT(@HMIBuiltInID.DData)+DDIDx; (* Auxiliary pointer *) 203 IF NOT(LCDOut8Bit(I2CAddress, @Ptr, TRUE, TRUE)) THEN CaseNr[0]:=0; RETURN; END_IF; 204 DDIDx:=DDIDx+1; (* Display data index *) 205 IF (DDIDx < 60) THEN RETURN; END_IF; 206 207 IF NOT(LCDOut8Bit(I2CAddress, 16#D4, FALSE, TRUE)) THEN CaseNr[0]:=0; RETURN; END_IF; 208 CaseNr[0]:=CaseNr[0]+1; (* Case gestione *) 209 210 (* -------------------------------------------------------[4a Riga]-- *) 211 212 104: 213 Ptr:=TO_UDINT(@HMIBuiltInID.DData)+DDIDx; (* Auxiliary pointer *) Page:4 of 5

214 IF NOT(LCDOut8Bit(I2CAddress, @Ptr, TRUE, TRUE)) THEN CaseNr[0]:=0; RETURN; END_IF; 215 DDIDx:=DDIDx+1; (* Display data index *) 216 IF (DDIDx < 80) THEN RETURN; END_IF; 217 218 @HMIBuiltInID.DUpdated:=FALSE; (* Display updated *) 219 CaseNr[0]:=100; (* Case gestione *) 220 ELSE 221 CaseNr[0]:=0; (* Case gestione *) 222 END_CASE; 223 224 (* [End of file] *) 225 226 Page:5 of 5

FUNCTION MemSet (SFR058A200) Fills memory with value ENCRYPTED CODE VAR_INPUT Buffer : @USINT; (* Buffer address *) Value : USINT; (* Value to set *) Size : UDINT; (* Buffer size *) 1 FUNCTION : MemSet Page:1 of 1

FUNCTION LCDOut8Bit VAR_INPUT I2CAddress : USINT; (* I2C Address *) OData : BYTE; (* Output data to display *) Rs : BOOL; (* RS command *) Backlight : BOOL; (* Backlight command *) VAR OBuffer : ARRAY[ 0..2 ] OF BYTE; (* Output buffer *) 1 (* ************************************************************************** *) 2 (* FUNCTION "BOOL LCDOut8Bit(BYTE OData, BOOL Rs, BOOL Backlight)" *) 3 (* ************************************************************************** *) 4 (* Questa funzione esegue l'uscita del dato sul display. *) 5 (* -------------------------------------------------------------------------- *) 6 7 (* ---------------------------------------------------------------------- *) 8 (* GESTIONE USCITA MS NIBBLE *) 9 (* ---------------------------------------------------------------------- *) 10 (* Gestisco segnali di comando verso display. *) 11 12 OBuffer[0]:=OData AND 16#F0; (* Output buffer *) 13 IF (Rs) THEN OBuffer[0]:=OBuffer[0] OR 16#01; END_IF; (* Rs:=TRUE *) 14 IF (Backlight) THEN OBuffer[0]:=OBuffer[0] OR 16#08; END_IF; (* Backlight:=TRUE *) 15 16 (* Copio output buffer in tutti i bytes di uscita dato display. *) 17 18 OBuffer[1]:=OBuffer[0] OR 16#04; (* En:=TRUE *) 19 OBuffer[2]:=OBuffer[0]; (* Output buffer *) 20 LCDOut8Bit:=SysI2CWrRd(I2CAddress, 3, ADR(OBuffer), 0, 0); (* Function result *) 21 IF NOT(LCDOut8Bit) THEN RETURN; END_IF; 22 23 (* ---------------------------------------------------------------------- *) 24 (* GESTIONE USCITA LS NIBBLE *) 25 (* ---------------------------------------------------------------------- *) 26 (* Gestisco segnali di comando verso display. *) 27 28 OBuffer[0]:=(OData*16) AND 16#F0; (* Output buffer *) 29 IF (Rs) THEN OBuffer[0]:=OBuffer[0] OR 16#01; END_IF; (* Rs:=TRUE *) 30 IF (Backlight) THEN OBuffer[0]:=OBuffer[0] OR 16#08; END_IF; (* Backlight:=TRUE *) 31 32 (* Copio output buffer in tutti i bytes di uscita dato display. *) 33 34 OBuffer[1]:=OBuffer[0] OR 16#04; (* En:=TRUE *) 35 OBuffer[2]:=OBuffer[0]; (* Output buffer *) 36 LCDOut8Bit:=SysI2CWrRd(I2CAddress, 3, ADR(OBuffer), 0, 0); (* Function result *) 37 38 (* [End of file] *) 39 40 FUNCTION : LCDOut8Bit Page:1 of 1