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: DatatypesLength AsciiCode IntegerFormatSpecifiers FloatFormatSpecifier
Revision 3:52fb10c44695, committed 2010-11-29
- Comitter:
- Eduard
- Date:
- Mon Nov 29 22:27:13 2010 +0000
- Parent:
- 2:9e13bd7280e1
- Commit message:
Changed in this revision
--- a/OptrexLCD.cpp Mon Nov 29 22:26:12 2010 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,180 +0,0 @@
-/* mbed TextLCD Library, for a 4-bit LCD based on Optrex DCM20481 NY-LY-ABE
-*
-* Copyright (c) 2007-2010, sford modified by E.Sjoukes
-*
-* Permission is hereby granted, free of charge, to any person obtaining a copy
-* of this software and associated documentation files (the "Software"), to deal
-* in the Software without restriction, including without limitation the rights
-* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-* copies of the Software, and to permit persons to whom the Software i
-* furnished to do so, subject to the following conditions:
-*
-* The above copyright notice and this permission notice shall be included in
-* all copies or substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-* THE SOFTWARE.
-*/
-
-#include "OptrexLCD.h"
-#include "mbed.h"
-
-// initialiseer
-TextLCD::TextLCD(PinName rs, PinName e, PinName d0, PinName d1, PinName d2,
- PinName d3, LCDType type) : _rs(rs), _e(e), _d(d0, d1, d2, d3), _type(type)
-{
- _e = 1; // enable normaly high
- _rs = 0; // command mode
-
- wait(0.015); // Wait 15ms to ensure powered up
-
- for (int i=0; i<3; i++) // send "Display Settings" 3 times
- {
- writeByte(0x3);
- wait(0.00164); // this command takes 1.64ms, so wait for it
- }
- writeByte(0x2); // 4-bit mode
- wait(0.000040f); // most instructions take 40us
-
- writeCommand(0x28); // Function set 001 BW N F - -
- writeCommand(0x0C);
- writeCommand(0x6); // Cursor Direction and Display Shift : 0000 01 CD S (CD 0-left, 1-right S(hift) 0-no, 1-yes
- cls();
-}
-
-void TextLCD::character(int column, int row, int c)
-{
- int a = address(column, row);
- writeCommand(a);
- writeData(c);
-}
-
-void TextLCD::cls()
-{
- writeCommand(0x01); // cls, and set cursor to 0
- wait(0.003000f); // This command takes 3ms with Optrex, normaly it wood be 1.64ms
- locate(0, 0);
-}
-
-void TextLCD::locate(int column, int row)
-{
- _column = column;
- _row = row;
-}
-
-int TextLCD::_putc(int value)
-{
- if (value == '\n')
- {
- _column = 0;
- _row++;
- if (_row >= rows())
- {
- _row = 0;
- }
- }
- else
- {
- character(_column, _row, value);
- _column++;
- if (_column >= columns())
- {
- _column = 0;
- _row++;
- if (_row >= rows())
- {
- _row = 0;
- }
- }
- }
- return value;
-}
-
-int TextLCD::_getc()
-{
- return -1;
-}
-
-void TextLCD::writeByte(int value)
-{
- _d = value >> 4;
- wait(0.000040f); // most instructions take 40us
- _e = 0;
- wait(0.000075f); // enable puls of Optrex needs to be 75us
- _e = 1;
- _d = value >> 0;
- wait(0.000075f); // enable puls of Optrex needs to be 75us
- _e = 0;
- wait(0.000075f); // enable puls of Optrex needs to be 75us
- _e = 1;
-}
-
-void TextLCD::writeCommand(int command)
-{
- _rs = 0;
- writeByte(command);
-}
-
-void TextLCD::writeData(int data)
-{
- _rs = 1;
- writeByte(data);
-}
-
-int TextLCD::address(int column, int row)
-{
- switch (_type)
- {
- case LCD20x4:
- switch (row)
- {
- case 0:
- return 0x80 + column;
- case 1:
- return 0xc0 + column;
- case 2:
- return 0x94 + column;
- case 3:
- return 0xd4 + column;
- }
- case LCD16x2B:
- return 0x80 + (row * 40) + column;
- case LCD16x2:
- case LCD20x2:
- default:
- return 0x80 + (row * 0x40) + column;
- }
-}
-
-int TextLCD::columns()
-{
- switch (_type)
- {
- case LCD20x4:
- case LCD20x2:
- return 20;
- case LCD16x2:
- case LCD16x2B:
- default:
- return 16;
- }
-}
-
-int TextLCD::rows()
-{
- switch (_type)
- {
- case LCD20x4:
- return 4;
- case LCD16x2:
- case LCD16x2B:
- case LCD20x2:
- default:
- return 2;
- }
-}
--- a/OptrexLCD.h Mon Nov 29 22:26:12 2010 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,105 +0,0 @@
-/* mbed TextLCD Library, for a 4-bit LCD based on Optrex DCM20481 NY-LY-ABE
-* Copyright (c) 2007-2010, sford modified by E.Sjoukes
-*
-* Permission is hereby granted, free of charge, to any person obtaining a copy
-* of this software and associated documentation files (the "Software"), to deal
-* in the Software without restriction, including without limitation the rights
-* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-* copies of the Software, and to permit persons to whom the Software is
-* furnished to do so, subject to the following conditions:
-*
-* The above copyright notice and this permission notice shall be included in
-* all copies or substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-* THE SOFTWARE.
-*/
-
-#ifndef MBED_OptrexLCD_H
-#define MBED_OptrexLCD_H
-
-#include "mbed.h"
-
-/** A TextLCD interface for driving 4-bit HD44780-based LCDs
-*
-* Currently supports 16x2, 20x2 and 20x4 panels
-*
-* @code
-* #include "mbed.h"
-* #include "OptrexLCD.h"
-*
-* TextLCD lcd(p10, p12, p15, p16, p17, p18 ); // rs, e, d0-d3
-*
-* int main() {
-* lcd.printf("Hello World!\n");
-* }
-* @endcode
-*/
-class TextLCD : public Stream
-{
-public:
- /** LCD panel format */
- enum LCDType
- {
- LCD16x2, /**< 16x2 LCD panel (default) */
- LCD16x2B, /**< 16x2 LCD panel alternate addressing */
- LCD20x2, /**< 20x2 LCD panel */
- LCD20x4 /**< 20x4 LCD panel */
- };
-
- /** Create a TextLCD interface
- * @param rs Instruction/data control line
- * @param e Enable line (clock)
- * @param d0-d3 Data lines
- * @param type Sets the panel size/addressing mode (default = LCD16x2)
- */
- TextLCD(PinName rs, PinName e, PinName d0, PinName d1, PinName d2, PinName d3, LCDType type = LCD16x2);
-
-#if DOXYGEN_ONLY
- /** Write a character to the LCD
- * @param c The character to write to the display
- */
- int putc(int c);
-
- /** Write a formated string to the LCD
- * @param format A printf-style format string, followed by the variables to use in formating the string.
- */
- int printf(const char* format, ...);
-#endif
-
- /** Locate to a screen column and row
- * @param column The horizontal position from the left, indexed from 0
- * @param row The vertical position from the top, indexed from 0
- */
- void locate(int column, int row);
-
- /** Clear the screen and locate to 0,0 */
- void cls();
- int rows();
- int columns();
-
-protected:
- // Stream implementation functions
- virtual int _putc(int value);
- virtual int _getc();
-
- int address(int column, int row);
- void character(int column, int row, int c);
- void writeByte(int value);
- void writeCommand(int command);
- void writeData(int data);
-
- DigitalOut _rs, _e;
- BusOut _d;
- LCDType _type;
-
- int _column;
- int _row;
-};
-
-#endif
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp Mon Nov 29 22:27:13 2010 +0000
@@ -0,0 +1,76 @@
+/*******************************************************************************************
+* Program to test OptrexLCD library witch is a clone of TextLCD only with a different timing.
+* Normaly it takes a 40us enable puls to execute an instruction, but with the optrex 20x4 LCD
+* it takes 75us. Also the cls command takes 3ms instead of the 1.64ms which is normal.
+* Because the timing is the only difference, all functionality is equal to TextLCD.
+* Probally the OptrexLCD library works with other LCD as well, if not the origenal TextLCD library
+* can included instead.
+* The program write the text: "Start" and after half a second: "Hello rownr:0" next to it on the first row.
+* After another half a second it writes: "Second row? rownr:1" on the next row, then it
+* will write: "Third row? rownr:2" on the next and: "Fourth row? rownr:3" on the last.
+* After 1 second the screen got cleared and ASCII character nr.65 ("A") is put to the LCD at column "0"
+* and row "0". Then character nr.66 ("B") is written to column "1" and row "1". Next nr67 ("C") is written
+* to column "2", row "2" and nr68 ("D") on "3,3". Row "3" is the last row. When trying to select row "4" the
+* LCD goes in "Two Rows" mode instead of "Four Rows" mode. The characters "E" to "H" are written
+* in upwards direction.
+**********************************************************************************************/
+#include "mbed.h"
+#include "OptrexLCD.h"
+
+DigitalOut BlinkLed(LED4); // when the led is blinking the program runs well
+
+TextLCD lcd(p10, p12, p15, p16, p17, p18, TextLCD::LCD20x4 ); // rs, e, d0-d3
+
+int main()
+{
+ while(1)
+ {
+ BlinkLed = !BlinkLed; //indicates the programm is running
+
+ lcd.printf("Start "); // the printf instruction writes a text string to the LCD
+ wait(0.5);
+ lcd.printf("Hello rownr:0\n"); // the "\n" directive tells the program to go to the next row.
+ wait(0.5);
+ lcd.printf("Second row? rownr:1\n");
+ wait(0.5);
+ lcd.printf("Third row? rownr:2\n");
+ wait(0.5);
+ lcd.printf("Fourth row? rownr:3\n");
+ wait(0.5);
+ lcd.printf("Fifth row? rownr:4\n"); // there are only four rows, the fifth wil be at the first row, rownr:0.
+ wait(0.5);
+ lcd.printf("Sixth row? rownr:5\n"); // this wil be written on the second row
+ wait(2);
+
+ lcd.cls(); // clear the LCD and go to column "0" and row "0"
+ wait(0.5);
+
+ lcd.putc(65); // put character 65 (A) at column "0" and row "0"
+ wait(0.5);
+ lcd.locate(1,1); // go to column "1" and row "1"
+ lcd.putc(66); // put a "B" in (1,1)
+ wait(0.5);
+ lcd.locate(2,2);
+ lcd.putc(67); // put a "C" in (2,2)
+ wait(0.5);
+ lcd.locate(3,3);
+ lcd.putc(68);
+ wait(0.5);
+
+ lcd.locate(4,3);
+ lcd.putc(69);
+ wait(0.5);
+ lcd.locate(5,2);
+ lcd.putc(70);
+ wait(0.5);
+ lcd.locate(6,1);
+ lcd.putc(71);
+ wait(0.5);
+ lcd.locate(7,0);
+ lcd.putc(72);
+ wait(0.5);
+
+ lcd.cls();
+ wait(0.5);
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed.bld Mon Nov 29 22:27:13 2010 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/mbed_official/code/mbed/builds/e2ac27c8e93e