diff --git a/Código para inilización de LCD.c b/Código para inilización de LCD.c new file mode 100644 index 0000000..0ea6dbb --- /dev/null +++ b/Código para inilización de LCD.c @@ -0,0 +1,168 @@ +#include + +//GPIO definitions +#define CSBdefinition P1SEL1 |= BIT4 // Configure UCA0STE (slave select) +#define CLKdefinition P1SEL1 |= BIT5 // Configure UCA0CLK +#define SIMOdefinition P2SEL0 |= BIT0 // Configure UCA0SIMO/TXD +//Output configuration +#define DDRP1 P1DIR = 0x78; // 0111 1000 +#define DDRP2 P1DIR |= BIT0; +///////////////////////////////////////// +#define RST_0 P1OUT &= ~BIT3 +#define RST_1 P1OUT |= BIT3 + +#define CSB_0 P1OUT &= ~BIT4 +#define CSB_1 P1OUT |= BIT4 + +#define RS_0 P1OUT &= ~BIT6 +#define RS_1 P1OUT |= BIT6 + +#define SI_0 P2OUT &= ~BIT0 +#define SI_1 P2OUT |= BIT0 + +// Global variables +unsigned char text1[] = {"Hi :D "}; +unsigned char text2[] = {"It's done! "}; + +unsigned int position; + +//************************** +// MSP430F59xx Demo - eUSCI_A0, SPI 4-Wire Master +// +// Description: SPI master send data to SPI slave using 4-wire mode. +// ACLK = 32.768kHz, MCLK = SMCLK = DCO ~1MHz. BRCLK = ACLK/2 +// +// +// MSP430FR6989 +// ----------------- +// /|\| XIN|- +// | | | 32KHz Crystal +// --|RST XOUT|- +// | | +// | P2.0|-> Data Out (UCA0SIMO) +// | | +// | P1.3|-> RST LCD +// | P1.6|-> RS LCD +// | P1.5|-> Serial Clock Out (UCA0CLK) +// | P1.4|-> Slave Select (UCA0STE) +// | | +// +// William Goh +// Texas Instruments Inc. +// April 2014 +// Built with IAR Embedded Workbench V5.60 & Code Composer Studio V6.0 +//************************** + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +//Function initialization +void initLCD(); +void initSPI(); +void display(); + +void wData(unsigned char d); +void wCommand(unsigned char c); + +volatile unsigned char TXData; + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +void main(void) +{ + WDTCTL = WDTPW | WDTHOLD; // Stop watchdog timer + PM5CTL0 &= ~LOCKLPM5; // Disable the GPIO power-on default high-impedance mode to activate + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + //Pin configuration + CSBdefinition; // Configure UCA0STE (slave select) + CLKdefinition; // Configure UCA0CLK + SIMOdefinition; // Configure UCA0SIMO/TXD + PJSEL0 |= BIT4 | BIT5; // For XT1 + + DDRP1; + DDRP2; + + initSPI(); + + initLCD(); + __delay_cycles(50); + display(); + __delay_cycles(50); + + while(1){ + + } + +}//main + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +void initSPI(void){ + + // Configure USCI_A0 for SPI operation + UCA0CTLW0 = UCSWRST; // **Put state machine in reset** + + UCA0CTLW0 |= UCSSEL__SMCLK; // Choose SMLCK (1MHz) + UCA0BR0 = 0x04;//4 // Set prescaler to 8 to get SCLK=125kHz + UCA0BR1 = 0; + UCA0MCTLW = 0; + // By default -> 4-pin, 8-bit SPI master + UCA0CTLW0 |= UCMST; // Master mode + UCA0CTLW0 |= UCSYNC; // Synchronous mode + UCA0CTLW0 |= UCCKPL; // Clock polarity high + UCA0CTLW0 |= UCMSB; // MSB first (Most Significant Bit) + UCA0CTLW0 |= UCMODE_2; // 4-pin SPI with UCxSTE active high + UCA0CTLW0 |= UCSTEM; // Generate the enable signal for a 4-wire slave + + UCA0CTLW0 &= ~UCSWRST; // **Initialize USCI state machine** + + UCA0IE |= UCTXIE; // Enable USCI_A0 TX interrupt + UCA0IFG &= ~UCTXIFG; +} +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +//Initialize the LCD +void initLCD(){ + + RST_0; //reset + __delay_cycles(2); + RST_1; //end reset + __delay_cycles(20); + wCommand(0x30); //wake up + __delay_cycles(2); + wCommand(0x30); //wake up + wCommand(0x30); //wake up + wCommand(0x39); //function set + wCommand(0x14); //internal osc frequency + wCommand(0x56); //power control + wCommand(0x6D); //follower control + wCommand(0x70); //contrast + wCommand(0x0C); //display on + wCommand(0x06); //entry mode + wCommand(0x01); //clear + __delay_cycles(100); +} +void wCommand(unsigned char c){ + CSB_0; //CSB active + RS_0; //Command/Instruction + UCA0TXBUF = c; + CSB_1; //CSB disabled + __delay_cycles(200); +} +void wData(unsigned char d){ + CSB_0; //CSB active + RS_1; //Data + UCA0TXBUF = d; + CSB_1; //CSB disabled +} +void display(){ + int a; + wCommand(0x80); + for(a=0; a<16; a++){ + wData(text1[a]); + } + wCommand(0xC0); + for(a=0; a<16; a++){ + wData(text2[a]); + } +}