General purpose character LCD library. I found the TextLCD library had too many constraints and it didn\\\\\\\'t supply acces to all functions in the HD44780 chipset, so i decided to write my own character lcd library.

Revision:
2:18f6402fd025
Parent:
1:1349bedd5793
--- a/charLcd.cpp	Fri Mar 25 10:01:28 2011 +0000
+++ b/charLcd.cpp	Thu Apr 07 11:29:55 2011 +0000
@@ -5,7 +5,15 @@
 Serial pc(USBTX, USBRX);
 #define DEBUG
 
-    //constructor for 4-bit lcd control
+ /** LCD constructor
+ * 
+ * More details about the function goes here
+ * and here
+ *
+ * @param x a variable used by foo
+ * @returns something magical done with x   
+ */
+ //constructor for 4-bit lcd control
     charLcd::charLcd(PinName rs, PinName en, PinName rw, PinName d4, PinName d5, PinName d6, PinName d7, LCDType type) 
     : cl_rs(rs), cl_rw(rw), cl_en(en), cl_charLcdData(d7, d6, d5, d4) {
         pc.baud(115200);
@@ -15,7 +23,15 @@
         charLcdResetLCD();
     }
 
-    //constructor for 8-bit lcd control
+ /** LCD constructor
+ * 
+ * More details about the function goes here
+ * and here
+ *
+ * @param x a variable used by foo
+ * @returns something magical done with x   
+ */
+ //constructor for 8-bit lcd control
     charLcd::charLcd(PinName rs, PinName en, PinName rw, PinName d0, PinName d1, PinName d2, PinName d3, PinName d4, PinName d5, 
     PinName d6, PinName d7, LCDType type)
     : cl_rs(rs), cl_rw(rw), cl_en(en), cl_charLcdData(d7, d6, d5, d4, d3, d2, d1, d0) {
@@ -29,38 +45,69 @@
     }
 
 
-
+ /** LCD constructor
+ * 
+ * More details about the function goes here
+ * and here
+ *
+ * @param x a variable used by foo
+ * @returns something magical done with x   
+ */
 void charLcd::charLcdResetLCD(void) {
+    cl_charLcdData.output();
+    cl_charLcdData = 0x00;
     cl_en  = 1;
     cl_rs = 0;            // command mode
     cl_rw = 0;
-    wait_ms(40);        // Wait 15ms to ensure powered up
-    charLcdFunctionSet(0,1,0);
-    wait_ms(5);        // Wait 15ms to ensure powered up
-    charLcdFunctionSet(0,1,0);
-    wait_us(100);        // Wait 15ms to ensure powered up
+    wait_ms(10);        // Wait 15ms to ensure powered up
+    //charLcdFunctionSet(0,1,0);
+    //wait_ms(5);        // Wait 15ms to ensure powered up
+    //charLcdFunctionSet(0,1,0);
+    //wait_us(100);        // Wait 15ms to ensure powered up
+    //charLcdFunctionSet(0,1,0);
+    //wait_us(100);        // Wait 15ms to ensure powered up
+    //charLcdFunctionSet(0,1,0);
+    //charLcdDisplayOn(0);
+    while (1) {
+    charLcdClear();
+    wait_ms(500);
+    cl_charLcdData = 0x00;
+    wait_ms(500);
+    }
+    charLcdEntryMode(shift_inc);
+    wait_ms(20);        // Wait 15ms to ensure powered up
     charLcdFunctionSet(0,1,0);
-    wait_us(100);        // Wait 15ms to ensure powered up
-    charLcdFunctionSet(0,1,0);
-    charLcdDisplayOn(0);
-    charLcdClear();
-    charLcdEntryMode(1,0);
-    //wait_ms(20);        // Wait 15ms to ensure powered up
-    //charLcdFunctionSet(0,1,0);
-    //wait_ms(20);        // Wait 15ms to ensure powered up
+    wait_ms(20);        // Wait 15ms to ensure powered up
     charLcdDisplayOn(1);
     wait_ms(20);        // Wait 15ms to ensure powered up
     charLcdCursor(1, 1);
     wait_ms(20);        // Wait 15ms to ensure powered up
-    charLcdEntryMode(1,0);
+    charLcdEntryMode(shift_inc);
 }
 
+ /** LCD constructor
+ * 
+ * More details about the function goes here
+ * and here
+ *
+ * @param x a variable used by foo
+ * @returns something magical done with x   
+ */
 void charLcd::charLcdClear (void){
     #ifdef DEBUG
             pc.printf("LCD Clear\r\n");
     #endif //DEBUG
     charLcdSendCommand(LCD_CLEAR);
 }
+
+ /** LCD constructor
+ * 
+ * More details about the function goes here
+ * and here
+ *
+ * @param x a variable used by foo
+ * @returns something magical done with x   
+ */
 void charLcd::charLcdReturnHome(){
     #ifdef DEBUG
             pc.printf("LCD Home\r\n");
@@ -68,8 +115,25 @@
     charLcdSendCommand(LCD_HOME);
 }
 
-void charLcd::charLcdEntryMode(uint8 increment, uint8 shift){
+ /** LCD constructor
+ * 
+ * More details about the function goes here
+ * and here
+ *
+ * @param x a variable used by foo
+ * @returns something magical done with x   
+ */
+//void charLcd::charLcdEntryMode(uint8 increment, uint8 shift){
+void charLcd::charLcdEntryMode(t_charlcd_entry_mode entrymode) {
     uint8 cmd = LCD_ENTRY_MODE;
+    
+    switch(entrymode) {
+        case shift_inc: {cmd |= (LCD_ENTRY_SHIFT | LCD_ENTRY_INC); break;};
+        case shift_dec: {cmd |= (LCD_ENTRY_SHIFT | LCD_ENTRY_DEC );break;};
+        case noshift_inc: {cmd |= (LCD_ENTRY_STAT | LCD_ENTRY_INC); break;};
+        case noshift_dec: {cmd |= (LCD_ENTRY_STAT | LCD_ENTRY_DEC); break;};
+    }
+    /*
     if (increment == 0x00){
         cmd |= LCD_ENTRY_DEC;
         #ifdef DEBUG
@@ -82,20 +146,30 @@
         #endif //DEBUG
     }
     if (shift == 0x00){
+        cmd |= LCD_ENTRY_STAT;
         #ifdef DEBUG
             pc.printf("LCD Entry Mode Static\r\n");
-        #endif //DEBUGcmd |= LCD_ENTRY_STAT;
+        #endif //DEBUG
+        
         
     } else {
         cmd |=LCD_ENTRY_SHIFT;
         #ifdef DEBUG
             pc.printf("LCD Entry Mode Shift\r\n");
         #endif //DEBUG
-    }    
+    }    */
     charLcdSendCommand(cmd);
     
 }
 
+ /** LCD constructor
+ * 
+ * More details about the function goes here
+ * and here
+ *
+ * @param x a variable used by foo
+ * @returns something magical done with x   
+ */
 void charLcd::charLcdDisplayOn(uint8 on){
     uint8 cmd = LCD_DISPLAY_CTR;
     if (on == 0x00){
@@ -112,6 +186,14 @@
     charLcdSendCommand(cmd);
 }
 
+ /** LCD constructor
+ * 
+ * More details about the function goes here
+ * and here
+ *
+ * @param x a variable used by foo
+ * @returns something magical done with x   
+ */
 void charLcd::charLcdCursor(uint8 cursor, uint8 blink){
     uint8 cmd = LCD_DISPLAY_CTR;
     if (cursor == 0x00){
@@ -139,6 +221,14 @@
     charLcdSendCommand(cmd);
 }
 
+ /** LCD constructor
+ * 
+ * More details about the function goes here
+ * and here
+ *
+ * @param x a variable used by foo
+ * @returns something magical done with x   
+ */
 void charLcd::charLcdShift(uint8 left, uint8 cursor){
     uint8 cmd = LCD_SHIFT;
     if (left == 0x00){
@@ -166,6 +256,14 @@
     charLcdSendCommand(cmd);
 }
 
+ /** LCD constructor
+ * 
+ * More details about the function goes here
+ * and here
+ *
+ * @param x a variable used by foo
+ * @returns something magical done with x   
+ */
 void charLcd::charLcdFunctionSet(uint8 dots, uint8 lines, uint8 bits){
     uint8 cmd = LCD_FUNCTION;
     if (dots == 0x00){
@@ -211,38 +309,97 @@
 //#define LCD_FUNC_4BIT   0x00
 }
 
+ /** LCD constructor
+ * 
+ * More details about the function goes here
+ * and here
+ *
+ * @param x a variable used by foo
+ * @returns something magical done with x   
+ */
 void charLcd::charLcdSetCGRAMaddress(uint8 adr) {
     charLcdSendCommand(LCD_SET_CGRAM & adr);
 }
 
+ /** LCD constructor
+ * 
+ * More details about the function goes here
+ * and here
+ *
+ * @param x a variable used by foo
+ * @returns something magical done with x   
+ */
 void charLcd::charLcdSetDDRAMaddress(uint8 adr) {
     charLcdSendCommand(LCD_SET_DDRAM & adr);
 }
 
+ /** LCD constructor
+ * 
+ * More details about the function goes here
+ * and here
+ *
+ * @param x a variable used by foo
+ * @returns something magical done with x   
+ */
 uint8 charLcd::charLcdReadBusyFlag() {
     return 0x00;
 }
 
+ /** LCD constructor
+ * 
+ * More details about the function goes here
+ * and here
+ *
+ * @param x a variable used by foo
+ * @returns something magical done with x   
+ */
 void charLcd::charLcdWriteData(uint8 dat){
     cl_rs = 1;
+    cl_rw = 1;
     charLcdWriteByte(dat);
 }
 
+ /** LCD constructor
+ * 
+ * More details about the function goes here
+ * and here
+ *
+ * @param x a variable used by foo
+ * @returns something magical done with x   
+ */
 uint8 charLcd::charLcdReadData(){
     cl_rs = 0;
+    cl_rw = 0;
     return 0x00;
 }
-        
+
+ /** LCD constructor
+ * 
+ * More details about the function goes here
+ * and here
+ *
+ * @param x a variable used by foo
+ * @returns something magical done with x   
+ */        
 void charLcd::charLcdSendCommand(uint8 cmd) {
     cl_rs = 0;
+    cl_rw = 0;
     charLcdWriteByte(cmd);
 }
 
+ /** LCD constructor
+ * 
+ * More details about the function goes here
+ * and here
+ *
+ * @param x a variable used by foo
+ * @returns something magical done with x   
+ */
 void charLcd::charLcdWriteByte(uint8 byte) {
     cl_charLcdData = byte;
     pc.printf("Write %#X to LCD\r\n", byte);
-    wait_us(40); // setup time
+    wait_us(500); // setup time
     cl_en = 0;
-    wait_us(40); //hold time
+    wait_us(500); //hold time
     cl_en = 1;
 }