Paso 1: teoría
Para cualquier cosa con cualquier procesador de interfaz necesitamos bus del sistema (bus de datos, bus de direcciones y bus de control). En nuestro caso para datos de 8 bits en modo 8 pines (D0-D7) están los datos y bus de direcciones, mientras que los pines de 3 control (RS, R/W y E) son el bus de control. Así, con estas podemos controlar el periférico que estamos entretela. Somos codiciosos para que queremos tantos periféricos de interfaz como sea posible con el mismo microcontrolador. Esto requiere ya sea gran cantidad de puertos o tenemos que ser inteligentes y utilizar lo que tenemos al máximo. Por lo tanto, es lo primero que intentamos hacer es reducir el número de pernos requeridos para controlar los periféricos. Aquí viene la necesidad de modo de 4 bits. Así reducimos los pines del puerto requeridos de 11 a 7. No puede parecer mucho, pero para un pequeño microcontrolador como msp430g2553 con pernos limitada puerto esto es realmente una gran cantidad. Llegando al otro método. Tal vez podemos utilizar el demultiplexado, de esta manera podemos utilizar n líneas para compartir el sistema de bus con 2 ^ n' dispositivos. Tengo un Consejo que podemos utilizar registro de cambio SIPO para enviar datos. Ahora esto requerirá sólo 5 pins del puerto. Tres de control pernos y dos para el reloj y los datos en serie.
trabajo de modo de 4 bits
En modo 4 bits enviamos los datos nibble por nibble, primer nibble superior y luego inferior nibble. Para aquellos de ustedes que no saben lo que un nibble es: un nibble es un grupo de cuatro bits, por lo que los cuatro bits inferiores (D0-D3) de un byte forman el nibble inferior mientras que la parte superior (D4-D7) de cuatro bits de un byte forma el nibble alto. Esto nos permite enviar datos de 8 bits ya sea el código ASCII o el comando código mediante 4 pernos en lugar de 8. Las conexiones siguen siendo idénticas. El único cambio es que los pasadores de nibble inferiores de la pantalla sin usar.
Inicialización de la LCD en modo de 4 bits
Esta es quizás la parte más delicada de esta interfaz. Cuando se enciende el LCD es por defecto en el modo de 8 bits.
RESET(See PIC)
Este es el formato de código de comando para ajustar la función. Usando esto que forma el código de comando para la operación de modo de 4 bits.
mode_set(See PIC)
Las función set brocas se explican en la siguiente sección.
functions_mode_set_bits (ver foto)
Necesitamos 4 bits modo así que DL '0'. Así el nibble superior del código de comando es 0010b que es 0 x 02. Si tenemos 2 líneas hemos creado N y la fuente normal por lo que F es 0 nibble inferior así sale a 1000b es decir 0x08. Así el código de comando total es 0x28.
Antes de enviar este 0x28 necesitamos realizar una inicialización específica.
Initialization(See PIC)
Así que enviamos el 0x33 como el código de comando. Esto hará que el modo inicial de 8 bits a partir de la pantalla LCD. Ahora después de esto tenemos que enviar a 0x32. (Nota: estamos utilizando el método de nibble para lo que irá por 0x33 es 3 seguido por 3 y para 0x32 es 3 seguido de 2.)
Así que ahora hemos inicializado la LCD en modo de 4 bits. Todos tenemos que aprender es cómo enviar el valor nibble por nibble en c y sin afectar a otros pines puerto excepto los que utilizamos para el envío de datos. (En conjunto sólo la instrucción girar.)
Nibble envío de lógica
P1OUT = (P1OUT & 0xF0) | ((datos >> 4) & 0x0F); envía el nibble alto
En esto hacemos uso de masking concepto y turnos lógicos en c. Ahora en mi programa que estoy usando P1.0 - P1.3 pins como los pines de datos. Por lo tanto voy a explicar la lógica en consecuencia. Aquí los datos son el parámetro que se pasa en la función. Cambio los datos de cuatro bits, así trayendo el nibble superior en la localidad de nibble inferior. La parte superior de la máscara. Entonces hago el nibble inferior de P1OUT 0 para que ' or'ing con nibble datos dará datos nibble en P1OUT pin. (x y 0 es 0, x 1 es x; x 1 es 1 y x o 0 x---> (x & 0) | (data_bit) = 0|data_bit = data_bit. Así obtenemos datos de la broca en el pin de puerto sin afectar P1.4 P1.7) este se encarga de nibble superior.
P1OUT = (P1OUT & 0xF0) | (datos & 0x0F); envía el nibble inferior
Ahora nibble inferior incluye las mismas operaciones excepto la operación de cambia.