temp

Committer:
BenRJG
Date:
Thu Dec 06 15:38:09 2018 +0000
Revision:
0:2a4af0cb6e8d
Imported Code from Kiel; Added button functionality; Added set DateTime Functionality

Who changed what in which revision?

UserRevisionLine numberNew contents of line
BenRJG 0:2a4af0cb6e8d 1 #include "LCD.hpp"
BenRJG 0:2a4af0cb6e8d 2 #include "General.hpp"
BenRJG 0:2a4af0cb6e8d 3
BenRJG 0:2a4af0cb6e8d 4 //LCD data sheet: https://www.rapidonline.com/pdf/57-2224.pdf
BenRJG 0:2a4af0cb6e8d 5
BenRJG 0:2a4af0cb6e8d 6 void LCD::INIT()
BenRJG 0:2a4af0cb6e8d 7 {
BenRJG 0:2a4af0cb6e8d 8 //All lines default low
BenRJG 0:2a4af0cb6e8d 9 _LCD_RS = 0;
BenRJG 0:2a4af0cb6e8d 10 _LCD_E = 0;
BenRJG 0:2a4af0cb6e8d 11
BenRJG 0:2a4af0cb6e8d 12 //LCD Initialise
BenRJG 0:2a4af0cb6e8d 13 wait_ms(45); //Wait for LCD startup
BenRJG 0:2a4af0cb6e8d 14 /*Step 1*/
BenRJG 0:2a4af0cb6e8d 15 wait_us(40); //Wait whilst LCD busy
BenRJG 0:2a4af0cb6e8d 16 _LCD_RS = control;
BenRJG 0:2a4af0cb6e8d 17 LCD_DDRAM = 0; //Clear data line
BenRJG 0:2a4af0cb6e8d 18 LCD_DDRAM = (FUNC|bit8)>>4; //Put data on line
BenRJG 0:2a4af0cb6e8d 19 LCD_strobe();
BenRJG 0:2a4af0cb6e8d 20
BenRJG 0:2a4af0cb6e8d 21 /*Step 2*/ cmdLCD(FUNC|lines2); //Function Set 0x20|0x08 = 0x28
BenRJG 0:2a4af0cb6e8d 22 /*Step 3*/ cmdLCD(FUNC|lines2); //Function Set 0x20|0x08 = 0x28
BenRJG 0:2a4af0cb6e8d 23 /*Step 4*/ cmdLCD(DISPLAY|on); //Display Control 0x08|0x0x04 = 0x0c
BenRJG 0:2a4af0cb6e8d 24 /*Step 5*/ cmdLCD(CLEAR); //Clear Display 0x01
BenRJG 0:2a4af0cb6e8d 25 /*Step 6*/ cmdLCD(ENTRYMODE|I); //Set entry mode 0x04|0x02 = 0x06
BenRJG 0:2a4af0cb6e8d 26
BenRJG 0:2a4af0cb6e8d 27 cmdLCD(RETURN); //return home location
BenRJG 0:2a4af0cb6e8d 28 }
BenRJG 0:2a4af0cb6e8d 29
BenRJG 0:2a4af0cb6e8d 30 void LCD::clear()
BenRJG 0:2a4af0cb6e8d 31 {
BenRJG 0:2a4af0cb6e8d 32 cmdLCD(CLEAR);
BenRJG 0:2a4af0cb6e8d 33 }
BenRJG 0:2a4af0cb6e8d 34
BenRJG 0:2a4af0cb6e8d 35 void LCD::display(BYTE* str, UINT_16 location)
BenRJG 0:2a4af0cb6e8d 36 {
BenRJG 0:2a4af0cb6e8d 37 if(location != NULL)
BenRJG 0:2a4af0cb6e8d 38 {
BenRJG 0:2a4af0cb6e8d 39 pos(location);
BenRJG 0:2a4af0cb6e8d 40 }
BenRJG 0:2a4af0cb6e8d 41 U_BYTE p = 0;
BenRJG 0:2a4af0cb6e8d 42 while((str[p]!= NULL)&&(p<16))
BenRJG 0:2a4af0cb6e8d 43 {
BenRJG 0:2a4af0cb6e8d 44 putt(str[p]);
BenRJG 0:2a4af0cb6e8d 45 p++;
BenRJG 0:2a4af0cb6e8d 46 }
BenRJG 0:2a4af0cb6e8d 47 }
BenRJG 0:2a4af0cb6e8d 48
BenRJG 0:2a4af0cb6e8d 49 void LCD::pos(UINT_16 location)
BenRJG 0:2a4af0cb6e8d 50 {
BenRJG 0:2a4af0cb6e8d 51 cmdLCD(0x80|location);
BenRJG 0:2a4af0cb6e8d 52 }
BenRJG 0:2a4af0cb6e8d 53
BenRJG 0:2a4af0cb6e8d 54 void LCD::putt(U_BYTE c)
BenRJG 0:2a4af0cb6e8d 55 {
BenRJG 0:2a4af0cb6e8d 56 wait_us(3000);
BenRJG 0:2a4af0cb6e8d 57 _LCD_RS = text;
BenRJG 0:2a4af0cb6e8d 58 set_LCD_data(c);
BenRJG 0:2a4af0cb6e8d 59 }
BenRJG 0:2a4af0cb6e8d 60
BenRJG 0:2a4af0cb6e8d 61 void LCD::cmdLCD(U_BYTE cmd)
BenRJG 0:2a4af0cb6e8d 62 {
BenRJG 0:2a4af0cb6e8d 63 wait_us(3000); //Wait whilst LCD busy
BenRJG 0:2a4af0cb6e8d 64 _LCD_RS = control;
BenRJG 0:2a4af0cb6e8d 65 set_LCD_data(cmd); //set data on bus
BenRJG 0:2a4af0cb6e8d 66 }
BenRJG 0:2a4af0cb6e8d 67
BenRJG 0:2a4af0cb6e8d 68 void LCD::LCD_strobe(void)
BenRJG 0:2a4af0cb6e8d 69 {
BenRJG 0:2a4af0cb6e8d 70 wait_us(10);
BenRJG 0:2a4af0cb6e8d 71 _LCD_E = 1;
BenRJG 0:2a4af0cb6e8d 72 wait_us(10);
BenRJG 0:2a4af0cb6e8d 73 _LCD_E = 0;
BenRJG 0:2a4af0cb6e8d 74 }
BenRJG 0:2a4af0cb6e8d 75
BenRJG 0:2a4af0cb6e8d 76 void LCD::set_LCD_data(U_BYTE d)
BenRJG 0:2a4af0cb6e8d 77 {
BenRJG 0:2a4af0cb6e8d 78 // Send upper 4 bits then lower for bits
BenRJG 0:2a4af0cb6e8d 79 // e.g. 11110000 => 1111 -> 0000
BenRJG 0:2a4af0cb6e8d 80
BenRJG 0:2a4af0cb6e8d 81 LCD_DDRAM = 0; //Clear data line
BenRJG 0:2a4af0cb6e8d 82 LCD_DDRAM = d>>4; //Put data on line
BenRJG 0:2a4af0cb6e8d 83 LCD_strobe();
BenRJG 0:2a4af0cb6e8d 84 wait_us(1000);
BenRJG 0:2a4af0cb6e8d 85 LCD_DDRAM = 0; //Clear
BenRJG 0:2a4af0cb6e8d 86 LCD_DDRAM = d; //Put remaining data on line
BenRJG 0:2a4af0cb6e8d 87 LCD_strobe();
BenRJG 0:2a4af0cb6e8d 88 }
BenRJG 0:2a4af0cb6e8d 89
BenRJG 0:2a4af0cb6e8d 90 void LCD::enableCursor()
BenRJG 0:2a4af0cb6e8d 91 {
BenRJG 0:2a4af0cb6e8d 92 cmdLCD(DISPLAY|on|cursor);
BenRJG 0:2a4af0cb6e8d 93 }
BenRJG 0:2a4af0cb6e8d 94
BenRJG 0:2a4af0cb6e8d 95 void LCD::disableCursor()
BenRJG 0:2a4af0cb6e8d 96 {
BenRJG 0:2a4af0cb6e8d 97 cmdLCD(DISPLAY|on);
BenRJG 0:2a4af0cb6e8d 98 }