LCD: Difference between revisions
Jump to navigation
Jump to search
No edit summary |
(No difference)
|
Latest revision as of 04:15, 26 January 2013
This page shows the code for directly accessing an attached LCD device (here the 2x16 character lcd device from Jaycar).
void Write_LCD_Nibble(unsigned short N, int RS) { digitalWrite(STR,0); // ****** Write RS ********* digitalWrite(CLK,0); digitalWrite(Dout,RS); // Data_Pin digitalWrite(CLK,1); digitalWrite(CLK,0); // Shift in 4 bits int t = 0; int Flag = 0; int Mask = 8; for (t=0; t<4; t++) { Flag = N & Mask; if(Flag==0) { digitalWrite(Dout,0); // Data_Pin } else { digitalWrite(Dout,1); // Data_Pin } digitalWrite(CLK,1); digitalWrite(CLK,0); Mask = Mask >> 1; } // One more clock because SC and ST clks are tied digitalWrite(CLK,1); digitalWrite(CLK,0); digitalWrite(Dout,0); // Data_Pin digitalWrite(STR,1); // Enable_Pin (to LCD) digitalWrite(STR,0); // Enable_Pin (to LCD) } void Write_LCD_Data(unsigned short D) { int RS = 1; // It is Data, not command int Low_Nibble = D & 15; int High_Nibble = D/16; Write_LCD_Nibble(High_Nibble,RS); Write_LCD_Nibble(Low_Nibble,RS); } void Write_LCD_Cmd(unsigned short C) { int RS = 0; // It is command, not data int Low_Nibble = C & 15; int High_Nibble = C/16; Write_LCD_Nibble(High_Nibble,RS); Write_LCD_Nibble(Low_Nibble,RS); } void initialise_LCD() { pinMode(CLK,0); pinMode(STR,0); pinMode(Dout,0); _delay_ms(100); Write_LCD_Cmd(0x03); // function set _delay_ms(50); Write_LCD_Cmd(0x03); _delay_ms(50); Write_LCD_Cmd(0x03); _delay_ms(50); Write_LCD_Cmd(0x02); _delay_ms(50); Write_LCD_Cmd(0x2C); // Display ON, No cursors _delay_ms(50); Write_LCD_Cmd(0x06); // Entry mode- Auto-increment, No Display shifting _delay_ms(50); Write_LCD_Cmd(0x0E); _delay_ms(50); Write_LCD_Cmd(0x01); _delay_ms(50); Write_LCD_Cmd(0x80); _delay_ms(50); } void Position_LCD(unsigned short x, unsigned short y) { int temp = 127 + y; if (x == 2) { temp = temp + 64; } Write_LCD_Cmd(temp); } void Clear_LCD() { Write_LCD_Cmd(0x01); // Clear LCD _delay_ms(5); } void Write_LCD_Text(char *StrData) { int p = 0; int q = strlen(StrData); int temp = 0; for (p = 0; p < q; p++) { temp = StrData[p]; Write_LCD_Data(temp); } } void Write_LCD_Number(char number) { // writes a number's digits on the display int digits; if (number == 0) { digits = 0; int array[0]; array[0]=0; Write_LCD_Data(array[0]+48); } else { // determine the number of digits int digits = (int)(log(number)/log(10))+1; // split up the number to an array int i = digits - 1; int array[digits]; while (number > 0) { array[i--] = number % 10; number /= 10; } // display array on LCD for(i = 0; i <= digits-1; i++) { Write_LCD_Data(array[i]+48); } } }