Quantcast
Channel: MSP low-power microcontrollers
Viewing all articles
Browse latest Browse all 62309

Forum Post: 16X2 LCD character display LED with MSP430G2553

$
0
0
Hello sir/mam, I am doing 16X2 LCD character display programming in 4 bit mode using MSP430G2553 microcontroller .My code is given below and Hardware connections are also attached.After powering up the board,the LCD glows but why the characters are not showing? #include " msp430g2553 .h" #include "stdio.h" #include "string.h" #include "stdlib.h" #define delay_value 500 void LCD_Init ( void ) { send_cmd(0x38); // configure LCD as 2 lined 5x7 matrix delayms(delay_value); send_cmd(0x0E); //display on, cursor blink delayms(delay_value); send_cmd(0x06); // auto increment of cursor delayms(delay_value); send_cmd(0x01); // clear display delayms(delay_value); } void send_cmd ( unsigned char command) { P1OUT &= 0X00; P2OUT &= 0X00; P2OUT = command; P1OUT &= 0X00; P1OUT &= ~0x40; // RS = 0 for command, P1.6 0x40 //RW is grounded P1OUT &= ~0x80; //EN = 0, P1.7, 0x80 delayms(delay_value); P1OUT |= 0x80; // EN = 1, P1.7, 0x80 delayms(delay_value); P1OUT &= ~0x80; //EN = 0, P1.7, 0x80 delayms(delay_value); } void send_char ( unsigned char character) { P1OUT &= 0X00; P2OUT &= 0X00; P2OUT = character; // P1OUT &= 0x00; P1OUT |= 0x40; // RS = 0 for command, P1.6 // RW is grounded P1OUT &= ~0x80; //EN = 0, P1.7 delayms(delay_value); P1OUT |= 0x80; // EN = 1, P1.7 delayms(delay_value); P1OUT &= ~0x80; //EN = 0, P1.7 delayms(delay_value); } void send_string ( char *String) { unsigned char i=0; while (String[i]!='\0') { P1OUT &= 0X00; P2OUT &= 0X00; P2OUT = String[i]; P1OUT |= 0x40; // RS = 0 for command, P1.6 // RW is grounded P1OUT &= ~0x80; //EN = 0, P1.7 delayms(delay_value); P1OUT |= 0x80; // EN = 1, P1.7 delayms(delay_value); P1OUT &= ~0x80; //EN = 0, P1.7 delayms(delay_value); if (i>=16) // If the number of characters in the string > 16, then the below command automatically send_cmd(0x18); // Shift the display right side delayms(40000); // 100 millisec delay i++; } } void delayms ( unsigned int value) { unsigned int i; for (i=0;i< __delay_cycles ;i++); } void main ( void ) { WDTCTL = WDTPW + WDTHOLD; // Stop WDT BCSCTL1 = CALBC1_1MHZ; // Set DCO DCOCTL = CALDCO_1MHZ; BCSCTL2 &= ~(DIVS_3); //This line of code ensures that the SMCLK divider is 0, // so we have SMCLK=DCO=1MHz (in fact if we are to have a /8 divider, it should be BCSCTL2 |= DIVS_3;). P1DIR = 0xFF; // make P1 as output P2DIR = 0xFF; // make P2 as output P2SEL = 0; // These two are "Function Select Registers PxSEL and PxSEL2", P2SEL2 = 0; // If both are zero's means simple I/O function is selected. P1DIR |= 0x01; // Set P1.0 to output direction P1REN |= 0x01; delayms(1500); // wait for more than 15ms after supply rises to 4.5V send_cmd(0x30); delayms(400); // wait more than 4.1ms send_cmd(0x30); delayms(100); // wait more than 100us, but delayms(1) will provide 1ms send_cmd(0x30); delayms(100); send_cmd(0x02); // return to home delayms(100); LCD_Init(); // LCD initialization while (1) { send_cmd(0x01); // clear display delayms(delay_value); send_cmd(0x81); // clear display delayms(delay_value); send_string("NPEDUCATIONS"); delayms(delay_value); send_cmd(0xC0); // clear display delayms(delay_value); send_string(" http://www.npeducations.com"); delayms(delay_value); } } }

Viewing all articles
Browse latest Browse all 62309

Trending Articles