Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependents: Thermo_Voltmeter Freetronics_16x2_LCD DR14_DHT11_LCD Freetronics_16x2_LCD3 ... more
Fork of freetronicsLCDShield by
Diff: freetronicsLCDShield.cpp
- Revision:
- 0:01f3d38f8b6d
- Child:
- 1:ddcefddda4a7
diff -r 000000000000 -r 01f3d38f8b6d freetronicsLCDShield.cpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/freetronicsLCDShield.cpp Tue Oct 08 08:46:39 2013 +0000
@@ -0,0 +1,109 @@
+#include "mbed.h"
+#include "freetronicsLCDShield.h"
+
+#define PULSE_E wait(0.000001f); \
+ _e = 0; \
+ wait(0.000001f); \
+ _e = 1;
+
+
+freetronicsLCDShield::freetronicsLCDShield (PinName rs, PinName e, PinName d0, PinName d1, PinName d2, PinName d3, PinName bl, PinName a0)
+ : _rs(rs), _e(e), _d(d0, d1, d2, d3), _bl(bl), _a0(a0) {
+ // Class constructor
+ // Init the display, wait 15ms to insure the power is up
+ _e = true;
+ _rs = false;
+ wait(0.015f);
+
+ for (int i = 0; i < 3; i++){
+ writeByte(0x3);
+ wait(0.00164f); // this command takes 1.64ms, so wait for it
+ }
+
+ writeByte(0x2); // 4-bit mode
+ writeCommand(0x28); // Function set 001 BW N F - -
+ writeCommand(0x0C); // Display on/off controll 0000 1 D C B (D(isplay) On/Off C(ursor) On/Off B(link) On/Off
+ writeCommand(0x6); // Cursor Direction and Display Shift : 0000 01 CD S (CD 0-left, 1-right S(hift) 0-no, 1-yes
+ cls();
+
+ // Set the PWM period to 20ms
+ _bl.period_ms(1);
+ _bl.write(0.0);
+}
+
+void freetronicsLCDShield::setCursorPosition (int line, int col) {
+ // Set the new cursorposition
+ writeCommand(0x80 + (line * 0x40) + col);
+}
+
+void freetronicsLCDShield::setBackLight (bool blStatus) {
+ // Switch the backlight on (true) or off (false)
+ _bl = (blStatus) ? 1.0 : 0.0;
+}
+
+void freetronicsLCDShield::setBackLight (float blIntensity) {
+ // Switch the backlight on (true) or off (false)
+ _bl = blIntensity;
+}
+
+void freetronicsLCDShield::setCursor (bool cStatus, bool blink) {
+ int tmp = 0;
+
+ if (blink) tmp = 0x01;
+ if (cStatus) tmp |= 0x02;
+ writeCommand(0x0C + tmp);
+}
+
+void freetronicsLCDShield::shift (bool left) {
+ int tmp = 0;
+
+ if (left) tmp = 0x04;
+ writeCommand(0x18 + tmp);
+}
+
+void freetronicsLCDShield::cls(void) {
+ // Clear the display and place the cursor at 0, 0
+ writeCommand(0x01);
+ wait(0.00164f);
+}
+
+void freetronicsLCDShield::home(void) {
+ // Undo shift operations and place cursor at 0,0
+ writeCommand(0x02);
+ wait(0.00164f);
+}
+
+// Low level output functions
+void freetronicsLCDShield::writeByte (int byte) {
+ // Split the byte in high and low nibble, write high nibble first
+ _d = byte >> 4;
+ PULSE_E;
+ _d = byte >> 0;
+ PULSE_E;
+ // Most instructions take 40us
+ wait(0.000040f);
+}
+
+void freetronicsLCDShield::writeData (int data) {
+ _rs = true;
+ writeByte(data);
+}
+
+void freetronicsLCDShield::writeCommand (int command) {
+ _rs = false;
+ writeByte(command);
+}
+
+float freetronicsLCDShield::readButton(void) {
+ return(_a0.read());
+}
+
+// Virtual functions for stream
+int freetronicsLCDShield::_putc(int value) {
+ writeData(value);
+ return value;
+}
+
+int freetronicsLCDShield::_getc() {
+ return -1;
+}
\ No newline at end of file

Freetronics LCD Shield