Apos uma consulta popular feita na "Plaza de Mayo", a Argentina enviou uma mensagem a Republica Popular da China: "Chinos de mierda , maricones : les declaramos "Guerra": - tenemos 105 tanques, 47 aviones sanos, 4 barcos que navegan y 5.221 soldados". O Estado chines respondeu-lhes: "Aceitamos a declaracao, temos 38.000 tanques, 16.000 avioes, 790 navios e 300 milhoes de soldados.Ao que respondem os argentinos: "Retiramos la declaracion de guerra.... No tenemos como alojar tantos prisioneros". LCD 16x2 + MSP430Tutorial de inicializacao do LCD e escritaVideo tutorial -> https://www.youtube.com/watch?v=P3i4YHqJeM *Sempre irei me referir aos pinos do LCD e do MSP, se estiver utilizando um LCD embutido em shield do arduino, a pinagem referente ao arduino pode ser encontrada na tabela "Pin Allocation"ConexaoPINOS DO LCD14~11 - Envio e recebimento de dados - Ligar nos pinos 2.7~2.4 do MSP (2.7=xout e 2.6=xin)E - Enable - Ligar no pino 1.7 do MSPRS - avisa se sera enviado dado ou caractere - Ligar no pino 1.6 do MSPR/W - GND Esquema de ligacaoPinos do arduinoPinos do LCD 16x2 (varia de modelo para modelo)Algoritmo de inicializacao do LCD 16x2 HITACHI (pode ser encontrado no datasheet)*Os LCDs mais comuns sao o HITACHI e SAMSUNG e possuem codigos diferentes de inicializacao, o programa postado aqui e referente ao HITACHI, se o seu equipamento for outro, busque no datasheet e edite o programa conforme os codigos de inicializacao do seu componente.PROGRAMA__________________________________________//IMPLEMENTAR UM DISPLAY LCD 16x2 COM INTERFACE DE 4 BITS#include "io430.h"#define RS 0x40;void pulso(void){ P1OUT &= ~0x80; P1OUT |= 0x80; __delay_cycles(1000); //espera 1 ms P1OUT &= ~0x80;/*O PULSO QUE EFETIVAMENTE ENVIA O DADO AO LCDCOMO SAO 4 BITS E REALIZADO UM DESLOCAMENTO DE 4 BITSSEGUE A ROTINA enviar() APLICADA PARA BYTE=0x28 __delay_cycles(1000); //espera 1 ms P2OUT = 0x20; //prepara o dado 0x20 para envio ao LCD pulso(); //envia 0x2 ao LCD __delay_cycles(1000); //espera 1 ms P2OUT = 0x80; //prepara o dado 0x08 para envio ao LCD pulso(); //envia 0x08 ao LCD*/}void enviar(unsigned char byte){ __delay_cycles(1000); //espera 1 ms P2OUT = byte; //envia so os quatro primeiros bits pois tem apenas 4 saidas p2out ligadas pulso(); __delay_cycles(1000); P2OUT = byte<<4 4="" a="" bits="" br="" desloca="" direita="" para=""> pulso();}void enviar_texto(const char *ptr) { while (*ptr) { enviar(*ptr); ptr++; }}//Setup uCvoid setup_MSP(void){ WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer to prevent time out reset BCSCTL1 = CALBC1_1MHZ; //ajusta o DCO para 1MHz DCOCTL = CALDCO_1MHZ; //ajusta o DCO para 1MHz P1DIR |= 0xC0; //seta output direction para P1.6,7 P2DIR |= 0xF0; //seta output direction para P2.4,5,6,7 P2SEL = 0x00; //desabilita a segunda funcao do P2 pois o P2.6 e P2.7 iniciam com PSEL setados P2SEL2 = 0x00;} //INICIALIZACAO DO DISPLAY LCD 16x2void start_LCD(void){ __delay_cycles(15000); //espera 15000 ciclos de clock (15ms) P1OUT &= ~RS; //RS=0 -> COMANDOS P2OUT = 0x30; //prepara os dados para enviar 0x30 ao LCD pulso(); //envia os dados para o LCD __delay_cycles(5000); //espera 5 ms pulso(); //envia 000011 0x30 __delay_cycles(1000); //espera 1 ms pulso(); //envia 000011b 0x30 P2OUT = 0x20; __delay_cycles(1000); //espera 1 ms pulso(); //envia 000010b 0x20 - Function set enviar(0x28); //envia 0x28 - Especificacao do numero