Werner Mueller / Mbed 2 deprecated 2wirelcd

Dependencies:   mbed

Files at this revision

API Documentation at this revision

Comitter:
elektronaut
Date:
Sun Dec 25 17:33:53 2011 +0000
Commit message:

Changed in this revision

lcd_2wire.cpp Show annotated file Show diff for this revision Revisions of this file
lcd_2wire.h Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
diff -r 000000000000 -r 23e6b8ed8dbd lcd_2wire.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lcd_2wire.cpp	Sun Dec 25 17:33:53 2011 +0000
@@ -0,0 +1,192 @@
+#include "mbed.h"
+#include "lcd_2wire.h"
+
+
+lcd_2wire::lcd_2wire (PinName pinc, PinName pind ): _pinc(pinc),  _pind(pind) {
+    _pinc = 0;//clock signal
+    _pind = 0;// data signal
+}
+//-----------------------------
+void lcd_2wire::LCD_SET_CLK(void) {
+    _pinc = 1;
+}
+//---------------------------------
+void lcd_2wire::LCD_CLR_CLK(void) {
+    _pinc = 0;
+}
+//----------------------------------
+void lcd_2wire::LCD_SET_DATA(void) {
+    _pind = 1;
+}
+//----------------------------------
+void lcd_2wire::LCD_CLR_DATA(void) {
+    _pind = 0;
+}
+//----------------------------------
+int LCD_ROW_TABLE[4] = {  //Display row addresses
+    0x80,
+    0xC0,
+    0x80 + LCD_COLS,
+    0xC0 + LCD_COLS
+};
+//----------------------------------------
+void lcd_2wire::lcd_delay(void) { 
+    wait_us(100);
+}
+//-------------------------------------------
+void lcd_2wire::lcd_init_shift_reg(int mode) {   //Clear shift register, set E and RS
+    int n;
+
+    LCD_CLR_DATA(); //clear data signal
+    lcd_delay();
+
+//clear all outputs of shift register
+    for (n=7; n; n--) {
+        LCD_SET_CLK();
+        lcd_delay();
+        LCD_CLR_CLK();
+    }
+
+//Set high level for E at Q7
+    LCD_SET_DATA();
+    lcd_delay();
+    LCD_SET_CLK();
+    lcd_delay();
+    LCD_CLR_CLK();
+
+//Set level for RS at Q6
+    if (mode == LCD_DATA_MODE) {
+        LCD_SET_DATA();
+    } else {
+        LCD_CLR_DATA();
+    }
+    lcd_delay();
+    LCD_SET_CLK();
+    lcd_delay();
+    LCD_CLR_CLK();
+}
+//----------------------------------------------
+void lcd_2wire::lcd_shift_nibble(int data) { //Clock in 4 bits of data
+    int n, mask= 0x08;
+    for (n =4; n; n--) {   //do this for 4 databits
+        if (data & mask) {  // set or reset data signal
+            LCD_SET_DATA();
+        } else {
+            LCD_CLR_DATA();
+        }
+        LCD_SET_CLK();
+        lcd_delay();
+        LCD_CLR_CLK();
+        mask >>= 1;  // shift right
+    }
+    LCD_SET_CLK();
+    lcd_delay();
+    LCD_CLR_CLK();
+}
+//-------------------------------------------------
+
+void lcd_2wire::lcd_shift_byte(int data , int mode) {
+    lcd_init_shift_reg(mode);
+    lcd_shift_nibble(data >> 4);
+    LCD_SET_DATA();
+    lcd_delay();
+    if (mode != LCD_INIT_MODE) {
+        lcd_init_shift_reg(mode);
+        lcd_shift_nibble(data);
+        LCD_SET_DATA();
+        lcd_delay();
+    }
+    LCD_CLR_DATA();
+    lcd_delay();
+}
+//-------------------------------------------------
+void lcd_2wire::lcd_write_command(int command) {
+    lcd_shift_byte(command,LCD_CMD_MODE);
+}
+//---------------------------------------------------
+void lcd_2wire::lcd_write_data(int data) {
+    lcd_shift_byte(data,LCD_DATA_MODE);
+}
+//----------------------------------------------
+//Functions flags - Bit 0  0: 5x7 Dots   1:5x10 Dots
+//                  Bit 1  0: 1 Row      1: 2 Rows
+//                  Bit 2  0: 4-Bit Intf 1: 8-Bit Intf
+void lcd_2wire::lcd_function_mode(int function_mode) {
+    function_mode =((function_mode & 7) << 2) + 0x20;
+    lcd_write_command(function_mode);
+}
+//-------------------------------------------------
+void lcd_2wire::lcd_display_mode(int display_mode) {
+    display_mode =(display_mode & 7) + 0x08;
+    lcd_write_command(display_mode);
+}
+//-------------------------------------------------
+void lcd_2wire::lcd_entry_mode(int entry_mode) {
+    entry_mode =(entry_mode & 3) + 0x04;
+    lcd_write_command(entry_mode);
+}
+//-------------------------------------------------
+void lcd_2wire::lcd_clear(void) {
+    lcd_write_command(LCD_CLR);
+}
+//--------------------------------------------------
+void lcd_2wire::lcd_home(void) {
+    lcd_write_command(LCD_HOME);
+}
+//--------------------------------------------------
+void lcd_2wire::lcd_goto_xy(int xpos, int ypos) {
+    if (xpos < LCD_COLS && ypos <LCD_ROWS) {
+        lcd_write_command(LCD_ROW_TABLE[ypos] + xpos);
+    }
+}
+//---------------------------------------------------
+void lcd_2wire::lcd_write_char(int chr) {
+    lcd_write_data(chr);
+}
+//--------------------------------------------------
+void lcd_2wire::lcd_write_char_xy(int x, int y, int chr) {
+    lcd_goto_xy(x,y);
+    lcd_write_data(chr);
+}
+//------------------------------------------------
+void lcd_2wire::lcd_write_str(const char *sp) {
+    while (*sp) {
+        lcd_write_data(*sp++);
+    }
+}
+//----------------------------------------------------
+void lcd_2wire::lcd_write_str_xy(int x, int y, const char *sp) {
+    lcd_goto_xy(x,y);
+    lcd_write_data(*sp++);
+}
+//----------------------------------------------------
+void lcd_2wire::lcd_init(void) {
+    LCD_CLR_CLK();
+    LCD_CLR_DATA();
+
+    wait_ms(LCD_POWER_UP_DELAY_MS);
+
+//Startinitialisation
+
+    lcd_shift_byte(LCD_FUNCTION_8BIT_1LINE,LCD_INIT_MODE);
+    wait_ms(LCD_INIT_DELAY_MS);
+    lcd_shift_byte(LCD_FUNCTION_8BIT_1LINE,LCD_INIT_MODE);
+    wait_ms(LCD_INIT_DELAY_MS);
+    lcd_shift_byte(LCD_FUNCTION_8BIT_1LINE,LCD_INIT_MODE);
+    wait_ms(LCD_INIT_DELAY_MS);
+    lcd_shift_byte(LCD_FUNCTION_4BIT_1LINE,LCD_INIT_MODE);
+    wait_ms(LCD_INIT_DELAY_MS);
+//Display is in 4 bit I/O mode now
+#if (LCD_ROWS > 1)
+    lcd_write_command(LCD_FUNCTION_4BIT_2LINE);
+#else
+    lcd_write_command(LCD_FUNCTION_4BIT_1LINE);
+#endif
+    wait_ms(LCD_INIT_DELAY_MS);
+    lcd_write_command(LCD_DISP_ON);
+    wait_ms(LCD_INIT_DELAY_MS);
+    lcd_write_command(LCD_CLR);
+    lcd_write_command(LCD_HOME);
+    wait_ms(LCD_INIT_DELAY_MS);
+}
+
diff -r 000000000000 -r 23e6b8ed8dbd lcd_2wire.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lcd_2wire.h	Sun Dec 25 17:33:53 2011 +0000
@@ -0,0 +1,52 @@
+#ifndef MBED_LCD_2WIRE_H
+#define MBED_LCD_2WIRE_H
+
+#include "mbed.h"
+
+class lcd_2wire {
+public:
+    lcd_2wire(PinName pinc, PinName pind);
+
+#define LCD_CMD_MODE 0
+#define LCD_DATA_MODE 1
+#define LCD_INIT_MODE 2
+#define LCD_CLR 1
+#define LCD_HOME 2
+#define LCD_DISP_ON 0x0C
+#define LCD_FUNCTION_4BIT_1LINE 0x20
+#define LCD_FUNCTION_4BIT_2LINE 0x28
+#define LCD_FUNCTION_8BIT_1LINE 0x30
+#define LCD_FUNCTION_8BIT_2LINE 0x38
+#define LCD_COLS 20
+#define LCD_ROWS 4
+#define LCD_POWER_UP_DELAY_MS 50
+#define LCD_INIT_DELAY_MS 5
+
+
+    void lcd_init(void);
+    void lcd_clear();
+    void lcd_home(void);
+    void lcd_goto_xy(int xpos, int ypos);
+    void lcd_write_char(int chr);
+    void lcd_write_char_xy(int x, int y, int chr);
+    void lcd_write_str(const char *sp);
+    void lcd_write_str_xy(int x,int y,const char *sp);
+
+private:
+    DigitalOut _pinc;
+    DigitalOut _pind;
+    void LCD_SET_CLK();
+    void LCD_CLR_CLK();
+    void LCD_SET_DATA();
+    void LCD_CLR_DATA();
+    void lcd_delay();
+    void lcd_init_shift_reg(int mode);
+    void lcd_shift_nibble(int data);
+    void lcd_shift_byte(int data, int mode);
+    void lcd_write_command(int command);
+    void lcd_write_data(int data);
+    void lcd_function_mode(int function_mode);
+    void lcd_display_mode(int display_mode);
+    void lcd_entry_mode(int entry_mode);
+};
+#endif
\ No newline at end of file
diff -r 000000000000 -r 23e6b8ed8dbd main.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Sun Dec 25 17:33:53 2011 +0000
@@ -0,0 +1,38 @@
+#include "mbed.h"
+#include "lcd_2wire.h"
+
+
+lcd_2wire dis(p29,p30);
+AnalogIn input(p20);
+DigitalOut myled(LED1);
+
+float wert;
+char c[3];
+int main() {
+    dis.lcd_init();
+    dis.lcd_goto_xy(0,0);
+    dis.lcd_write_str("********************");
+    dis.lcd_goto_xy(7,1);
+    dis.lcd_write_str("Hallo");
+    dis.lcd_goto_xy(7,2);
+    dis.lcd_write_str("MBED!");
+    dis.lcd_goto_xy(0,3);
+    dis.lcd_write_str("********************");
+    wait(2);
+    
+    
+    while (1) {
+        wert = input.read();
+        sprintf(c,"%.3f",wert);
+        dis.lcd_clear();
+        dis.lcd_goto_xy(7,1);
+        dis.lcd_write_str("Analogwert:");
+        dis.lcd_goto_xy(7,2);
+        dis.lcd_write_str(c);
+        wait_ms(1);
+        myled = 1;
+        wait(0.1);
+        myled = 0;
+        wait(0.1);
+    }
+}
diff -r 000000000000 -r 23e6b8ed8dbd mbed.bld
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Sun Dec 25 17:33:53 2011 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/mbed_official/code/mbed/builds/63bcd7ba4912