Troubleshooting

Committer:
BenRJG
Date:
Sat Nov 03 21:55:11 2018 +0000
Revision:
0:f8fe58d43763
Child:
1:1f9ea120f8a9
Child:
6:f3d1ab8a9e99
Created LCD class

Who changed what in which revision?

UserRevisionLine numberNew contents of line
BenRJG 0:f8fe58d43763 1 #include "LCD.hpp"
BenRJG 0:f8fe58d43763 2
BenRJG 0:f8fe58d43763 3 void LCD::INIT()
BenRJG 0:f8fe58d43763 4 {
BenRJG 0:f8fe58d43763 5 //All lines default low
BenRJG 0:f8fe58d43763 6 _LCD_RS = 0;
BenRJG 0:f8fe58d43763 7 _LCD_E = 0;
BenRJG 0:f8fe58d43763 8
BenRJG 0:f8fe58d43763 9 //LCD Initialise
BenRJG 0:f8fe58d43763 10 wait_ms(45); //Wait for LCD startup
BenRJG 0:f8fe58d43763 11 /*Step 1*/ cmdLCD(DDRAM|0x08);
BenRJG 0:f8fe58d43763 12 /*Step 2*/ cmdLCD(DDRAM|lines2); //Function Set 0x20|0x08 = 0x28
BenRJG 0:f8fe58d43763 13 /*Step 3*/ cmdLCD(DDRAM|lines2); //Function Set 0x20|0x08 = 0x28
BenRJG 0:f8fe58d43763 14 /*Step 4*/ cmdLCD(DISPLAY|on); //Display Control 0x08|0x0x04 = 0x0c
BenRJG 0:f8fe58d43763 15 /*Step 5*/ cmdLCD(CLEAR); //Clear Display 0x01
BenRJG 0:f8fe58d43763 16 /*Step 6*/ cmdLCD(ENTRYMODE|I); //Set entry mode 0x04|0x02 = 0x06
BenRJG 0:f8fe58d43763 17
BenRJG 0:f8fe58d43763 18 cmdLCD(0x20);
BenRJG 0:f8fe58d43763 19 }
BenRJG 0:f8fe58d43763 20
BenRJG 0:f8fe58d43763 21 void LCD::clear()
BenRJG 0:f8fe58d43763 22 {
BenRJG 0:f8fe58d43763 23 cmdLCD(CLEAR);
BenRJG 0:f8fe58d43763 24 }
BenRJG 0:f8fe58d43763 25
BenRJG 0:f8fe58d43763 26 void LCD::display(char* str, int line, int position)
BenRJG 0:f8fe58d43763 27 {
BenRJG 0:f8fe58d43763 28 unsigned int length = strlen(str);
BenRJG 0:f8fe58d43763 29 unsigned int line1 = length;
BenRJG 0:f8fe58d43763 30 unsigned int line2 = 0;
BenRJG 0:f8fe58d43763 31
BenRJG 0:f8fe58d43763 32 //if((line != NULL)&&(position != NULL))
BenRJG 0:f8fe58d43763 33 //{
BenRJG 0:f8fe58d43763 34 cmdLCD(line|position);
BenRJG 0:f8fe58d43763 35 //}
BenRJG 0:f8fe58d43763 36 unsigned int p;
BenRJG 0:f8fe58d43763 37 if(line == LINE1)
BenRJG 0:f8fe58d43763 38 {
BenRJG 0:f8fe58d43763 39 if(position + length > 16)
BenRJG 0:f8fe58d43763 40 {
BenRJG 0:f8fe58d43763 41 line1 = findSpace(str);
BenRJG 0:f8fe58d43763 42 line2 = length - line1;
BenRJG 0:f8fe58d43763 43 }
BenRJG 0:f8fe58d43763 44
BenRJG 0:f8fe58d43763 45 for(p=0; p<line1; p++)
BenRJG 0:f8fe58d43763 46 {
BenRJG 0:f8fe58d43763 47 putt(str[p]);
BenRJG 0:f8fe58d43763 48 }
BenRJG 0:f8fe58d43763 49
BenRJG 0:f8fe58d43763 50 cmdLCD(LINE2);
BenRJG 0:f8fe58d43763 51 }
BenRJG 0:f8fe58d43763 52
BenRJG 0:f8fe58d43763 53 if(line == LINE2){line2 = length;}
BenRJG 0:f8fe58d43763 54
BenRJG 0:f8fe58d43763 55 if((line2 <= 16)&&(line != 2))
BenRJG 0:f8fe58d43763 56 {
BenRJG 0:f8fe58d43763 57 for(p=0; p<line2; p++)
BenRJG 0:f8fe58d43763 58 {
BenRJG 0:f8fe58d43763 59 putt(str[line1 + p]);
BenRJG 0:f8fe58d43763 60 }
BenRJG 0:f8fe58d43763 61 }
BenRJG 0:f8fe58d43763 62 else
BenRJG 0:f8fe58d43763 63 {
BenRJG 0:f8fe58d43763 64 for(p=0; p<(13); p++)
BenRJG 0:f8fe58d43763 65 {
BenRJG 0:f8fe58d43763 66 putt(str[line1 + p]);
BenRJG 0:f8fe58d43763 67 }
BenRJG 0:f8fe58d43763 68
BenRJG 0:f8fe58d43763 69 for(p=0; p<3; p++)
BenRJG 0:f8fe58d43763 70 {
BenRJG 0:f8fe58d43763 71 putt('.');
BenRJG 0:f8fe58d43763 72 }
BenRJG 0:f8fe58d43763 73 }
BenRJG 0:f8fe58d43763 74 }
BenRJG 0:f8fe58d43763 75
BenRJG 0:f8fe58d43763 76 void LCD::putt(char c)
BenRJG 0:f8fe58d43763 77 {
BenRJG 0:f8fe58d43763 78 wait_us(50);
BenRJG 0:f8fe58d43763 79 _LCD_RS = text;
BenRJG 0:f8fe58d43763 80 set_LCD_data(c);
BenRJG 0:f8fe58d43763 81 }
BenRJG 0:f8fe58d43763 82
BenRJG 0:f8fe58d43763 83 void LCD::cmdLCD(unsigned char cmd)
BenRJG 0:f8fe58d43763 84 {
BenRJG 0:f8fe58d43763 85 wait_us(50); //Wait whilst LCD busy
BenRJG 0:f8fe58d43763 86 _LCD_RS = control;
BenRJG 0:f8fe58d43763 87 set_LCD_data(cmd); //set data on bus
BenRJG 0:f8fe58d43763 88 }
BenRJG 0:f8fe58d43763 89
BenRJG 0:f8fe58d43763 90 void LCD::LCD_strobe(void)
BenRJG 0:f8fe58d43763 91 {
BenRJG 0:f8fe58d43763 92 wait_us(10);
BenRJG 0:f8fe58d43763 93 _LCD_E = 1;
BenRJG 0:f8fe58d43763 94 wait_us(10);
BenRJG 0:f8fe58d43763 95 _LCD_E = 0;
BenRJG 0:f8fe58d43763 96 }
BenRJG 0:f8fe58d43763 97
BenRJG 0:f8fe58d43763 98 void LCD::set_LCD_data(unsigned char d)
BenRJG 0:f8fe58d43763 99 {
BenRJG 0:f8fe58d43763 100 // Send upper 4 bits then lower for bits
BenRJG 0:f8fe58d43763 101 // e.g. 11110000 => 1111 -> 0000
BenRJG 0:f8fe58d43763 102
BenRJG 0:f8fe58d43763 103 LCD_DDRAM = 0; //Clear data line
BenRJG 0:f8fe58d43763 104 LCD_DDRAM = d>>4; //Put data on line
BenRJG 0:f8fe58d43763 105 LCD_strobe();
BenRJG 0:f8fe58d43763 106 //wait_us(1000);
BenRJG 0:f8fe58d43763 107 LCD_DDRAM = 0; //Clear
BenRJG 0:f8fe58d43763 108 LCD_DDRAM = d; //Put remaining data on line
BenRJG 0:f8fe58d43763 109 LCD_strobe();
BenRJG 0:f8fe58d43763 110 }
BenRJG 0:f8fe58d43763 111
BenRJG 0:f8fe58d43763 112 unsigned int LCD::findSpace(char* str)
BenRJG 0:f8fe58d43763 113 {
BenRJG 0:f8fe58d43763 114 unsigned int space = 0;
BenRJG 0:f8fe58d43763 115 int n = 16;
BenRJG 0:f8fe58d43763 116 while(!space & (n != -1))
BenRJG 0:f8fe58d43763 117 {
BenRJG 0:f8fe58d43763 118 n--;
BenRJG 0:f8fe58d43763 119 switch(str[n])
BenRJG 0:f8fe58d43763 120 {
BenRJG 0:f8fe58d43763 121 case ' ':
BenRJG 0:f8fe58d43763 122 case '.':
BenRJG 0:f8fe58d43763 123 case ',':
BenRJG 0:f8fe58d43763 124 case ':':
BenRJG 0:f8fe58d43763 125 case ';':
BenRJG 0:f8fe58d43763 126 case '-':
BenRJG 0:f8fe58d43763 127 case '/':
BenRJG 0:f8fe58d43763 128 space = 1;
BenRJG 0:f8fe58d43763 129 break;
BenRJG 0:f8fe58d43763 130 }
BenRJG 0:f8fe58d43763 131 }
BenRJG 0:f8fe58d43763 132 if(n == -1){ return 16; }
BenRJG 0:f8fe58d43763 133 else{ return n+1; }
BenRJG 0:f8fe58d43763 134 }