??? 09/21/11 03:19 Read: times |
#183820 - LCD DV16210 interfacing |
SiLabs c8051f314 and LCD DV16210 (16x2)
I'm new to programming (C) so used ready initialization code. Unfortunately C code Examples for 4 bit interface for silabs MCU i have not found. I had to adapt the code for the SiLabs c8051f314. I have tried many different versions of this code but lcd still don't work. Can somebody help to find what's wrong in this code? with best regards, vlad (Keil uVision4) #include <C8051F310.H> // Pin Declarations //---------------------- #define lcdport P3 // data port (P3^1;P3^2;P3^3;P3^4) sbit LCD_RS = P1^3; sbit LCD_EN = P1^4; volatile unsigned long tmpCnt; //----------------------------------------------------------------------------- // Function Prototypes //----------------------------------------------------------------------------- void lcd_init(void); //LCD init void OSCILLATOR_Init (void); void PORT_Init (void); //lcd fuctions void lcd_write(unsigned char); void lcd_clear(void); void lcd_puts(unsigned char * ); void lcd_putch(unsigned char ); void lcd_goto1(unsigned char ); void Delay (unsigned int); //----------------------------------------------------------------------------- // main() Routine //----------------------------------------------------------------------------- void main (void) { OSCILLATOR_Init (); PORT_Init (); lcd_init(); //initialize lcd lcd_goto1(1); // line1 + 1st place for character lcd_putch('H');// display ONE character } // OSCILLATOR_Init //----------------------------------------------------------------------------- void OSCILLATOR_Init (void) { OSCICN |= 0x03; // Configure internal oscillator for // its maximum frequency (24.5 Mhz) } // PORT_Init void PORT_Init (void) { P1MDOUT = 0x18; //P1.4, P1.3 P3MDOUT = 0x1E; // P3.1, P3.2, P3.3, P3.4 XBR1 = 0x40; // Enable crossbar and enable } void Delay (unsigned int ms) { unsigned long tmp; tmp = ((unsigned long) ms) * 5; for (tmpCnt = 0; tmpCnt<tmp; tmpCnt++); } ///////////////////////////////////// ////////////////LCD////////////////// //////////////////////////////////// /* write a byte to the LCD in 4 bit mode */ void lcd_write(unsigned char c) { P3MDOUT = 0x1E; lcdport = (c & 0x0F) << 4; //send lower-order nibble LCD_EN = 1; Delay(50);//200microseconds LCD_EN = 0; //LCD_STROBE; lcdport = (c & 0xF0); // send higher-order nibble LCD_EN = 1; Delay(50);//200microseconds LCD_EN = 0;//LCD_STROBE; } /* write one character to the LCD */ void lcd_putch(unsigned char c) { LCD_RS =1; // write characters lcd_write(c); } /* * Go to the specified position in line 1 */ void lcd_goto1(unsigned char pos) { LCD_RS = 0; lcd_write(0x80 + pos); } /* initialise the LCD - put into 4 bit mode */ void lcd_init(void) { PCA0MD &= ~0x40; //watchdog OSCILLATOR_Init (); PORT_Init (); LCD_RS = 0; // write control bytes Delay(3675);// power on delay 15ms lcd_write(0x03); Delay(1250);//5ms lcd_write(0x03); Delay(1250);//5ms lcd_write(0x03); Delay(1250);//5ms lcd_write(0x02); Delay(50);//200microseconds lcd_write(0x01); Delay(1250);//5ms lcd_write(0x06); Delay(50);//200microseconds lcd_write(0x0E); Delay(50); //200microseconds } |
Topic | Author | Date |
LCD DV16210 interfacing | 01/01/70 00:00 | |
I have tried many different versions | 01/01/70 00:00 | |
testing and debugging | 01/01/70 00:00 | |
two comments | 01/01/70 00:00 |