Ben Gordon
/
ELEC351_GroupA-branch1
Troubleshooting
LCD.cpp
- Committer:
- BenRJG
- Date:
- 2018-11-04
- Revision:
- 4:bb7a78619678
- Parent:
- 1:1f9ea120f8a9
- Child:
- 7:0213c3702c99
File content as of revision 4:bb7a78619678:
#include "LCD.hpp" void LCD::INIT() { //All lines default low _LCD_RS = 0; _LCD_E = 0; //LCD Initialise wait_ms(45); //Wait for LCD startup wait_us(3000); //Wait whilst LCD busy _LCD_RS = control; LCD_DDRAM = 0; //Clear data line LCD_DDRAM = DDRAM>>4; //Put data on line LCD_strobe(); /*Step 1*/ //cmdLCD(DDRAM|0x08); /*Step 2*/ cmdLCD(DDRAM|lines2); //Function Set 0x20|0x08 = 0x28 /*Step 3*/ cmdLCD(DDRAM|lines2); //Function Set 0x20|0x08 = 0x28 /*Step 4*/ cmdLCD(DISPLAY|on); //Display Control 0x08|0x0x04 = 0x0c /*Step 5*/ cmdLCD(CLEAR); //Clear Display 0x01 /*Step 6*/ cmdLCD(ENTRYMODE|I); //Set entry mode 0x04|0x02 = 0x06 cmdLCD(0x20); //return home location } void LCD::clear() { cmdLCD(CLEAR); } void LCD::display(char* str, int line, int position) { unsigned int length = strlen(str); unsigned int line1 = length; unsigned int line2 = 0; //if((line != NULL)&&(position != NULL)) //{ cmdLCD(line|position); //} unsigned int p; if(line == LINE1) { if(position + length > 16) { line1 = findSpace(str); line2 = length - line1; } for(p=0; p<line1; p++) { putt(str[p]); } cmdLCD(LINE2); } if(line == LINE2){line2 = length;} if((line2 <= 16)&&(line != 2)) { for(p=0; p<line2; p++) { putt(str[line1 + p]); } } else { for(p=0; p<(13); p++) { putt(str[line1 + p]); } for(p=0; p<3; p++) { putt('.'); } } } void LCD::putt(char c) { wait_us(3000); _LCD_RS = text; set_LCD_data(c); } void LCD::cmdLCD(unsigned char cmd) { wait_us(3000); //Wait whilst LCD busy _LCD_RS = control; set_LCD_data(cmd); //set data on bus } void LCD::LCD_strobe(void) { wait_us(10); _LCD_E = 1; wait_us(10); _LCD_E = 0; } void LCD::set_LCD_data(unsigned char d) { // Send upper 4 bits then lower for bits // e.g. 11110000 => 1111 -> 0000 LCD_DDRAM = 0; //Clear data line LCD_DDRAM = d>>4; //Put data on line LCD_strobe(); wait_us(1000); LCD_DDRAM = 0; //Clear LCD_DDRAM = d; //Put remaining data on line LCD_strobe(); } unsigned int LCD::findSpace(char* str) { unsigned int space = 0; int n = 16; while(!space & (n != -1)) { n--; switch(str[n]) { case ' ': case '.': case ',': case ':': case ';': case '-': case '/': space = 1; break; } } if(n == -1){ return 16; } else{ return n+1; } }