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.
Revision 0:0cc7719c6d87, committed 2010-12-25
- Comitter:
- hapoo
- Date:
- Sat Dec 25 10:14:10 2010 +0000
- Commit message:
Changed in this revision
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Display.cpp Sat Dec 25 10:14:10 2010 +0000
@@ -0,0 +1,124 @@
+#include "Display.h"
+#include "font.h"
+
+Display::Display (PinName _RS, PinName _RW, PinName _E, PinName _CS1, PinName _CS2, PinName DB0, PinName DB1, PinName DB2, PinName DB3, PinName DB4, PinName DB5, PinName DB6, PinName DB7)
+ : DB(DB0,DB1,DB2,DB3,DB4,DB5,DB6,DB7), RS(_RS), RW(_RW), E(_E), CS1(_CS1), CS2(_CS2) {
+ DB.mode(PullNone);
+ E = 0;
+ SendCommand(0x3F, 4|8);
+ for (int c=0;c<128;c++) {
+ for (int r=0;r<8;r++)
+ {
+ write(r,c,0);
+ }
+ }
+ prevPage = -2;
+ prevY = -2;
+}
+DisplayTTY::DisplayTTY (Display *d, int _row, int _startY, int _numOfChars, int _numOfRows, int _charOffset, int _flags)
+{
+ kalle = d;
+ row = _row;
+ startY = _startY;
+ numOfChars = _numOfChars;
+ numOfRows = _numOfRows;
+ charOffset = _charOffset;
+ flags = _flags;
+ CursPosY = 0;
+ CursPosW = row;
+ cls();
+}
+int Display::SendCommand(unsigned int Command, int f) {
+ int value = 1;
+ E = 0;
+ RS = 0;
+ RW = 0;
+ CS1 = 0;
+ CS2 = 0;
+ if (f&1)
+ RS = 1;
+ if (f&2)
+ RW = 1;
+ if (f&4)
+ CS1 = 1;
+
+ if (f&8)
+ CS2 = 1;
+ //wait(0.0000003); // 300ns
+ E = 1;
+ if (f&2)
+ {
+ DB.input();
+ //wait(0.0000003);
+ value = DB;
+ }
+ else
+ {
+ DB.output();
+ DB = Command;
+ }
+ //wait(0.0000001);
+ E = 0;
+ return value;
+}
+
+void Display::write (int page, int y, unsigned int data) {
+ int f = 0;
+ if (y<64)
+ f = 4;
+ else
+ f = 8;
+ CurCol = y;
+ if( ( page != prevPage ) || ( y != (prevY+1) ) || (y == 64) )
+ {
+ SendCommand(0xB8+(page&0x07), f);
+ SendCommand(0x40+(y&0x3F),f);
+ prevPage = page;
+ }
+ SendCommand(data, f+1);
+
+ prevY = y;
+}
+
+void Display::writec (int row, int Y, int c) {
+ if (c>31 && c<127)
+ {
+ write(row,Y+0,font5x8[(c-32)*5+0]);
+ write(row,Y+1,font5x8[(c-32)*5+1]);
+ write(row,Y+2,font5x8[(c-32)*5+2]);
+ write(row,Y+3,font5x8[(c-32)*5+3]);
+ write(row,Y+4,font5x8[(c-32)*5+4]);
+ }
+}
+int DisplayTTY::_putc (int c)
+{
+ if (c == '\n')
+ newline();
+ else
+ {
+ kalle->writec(CursPosW, startY+CursPosY*charOffset, c);
+
+ if (++CursPosY>=numOfChars)
+ newline();
+ }
+
+ return 0;
+}
+int DisplayTTY::_getc() {
+ return 0;
+}
+void DisplayTTY::newline() {
+ CursPosY=0;
+ if ((++CursPosW-row)>=numOfRows)
+ {
+ CursPosW = row;
+ }
+}
+void DisplayTTY::cls() {
+ CursPosY=0;
+ CursPosW = row;
+ for (int c=0;c<numOfChars*numOfRows;c++)
+ {
+ _putc(' ');
+ }
+}
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Display.h Sat Dec 25 10:14:10 2010 +0000
@@ -0,0 +1,56 @@
+#ifndef DISPLAY_H
+#define DISPLAY_H
+
+#define RS_f = 1
+#define RW_f = 2
+#define CS1_f = 4
+#define CS2_f = 8
+
+#include "mbed.h"
+#include "font.h"
+
+class Display {
+ public:
+ // Constructor:
+ Display (PinName _RS, PinName _RW, PinName _E, PinName _CS1, PinName _CS2, PinName DB0, PinName DB1, PinName DB2, PinName DB3, PinName DB4, PinName DB5, PinName DB6, PinName DB7);
+ // Send write command to Display
+ // Page 0-7, y 0-127
+ void write (int page, int y, unsigned int data);
+ //
+ void SetAddress(int);
+ int SendCommand(unsigned int, int);
+ // Row 0-7, col 0-122
+ void writec(int row, int Y, int c);
+
+ private:
+ int prevPage;
+ int prevY;
+ BusInOut DB;
+ DigitalOut RS;
+ DigitalOut RW;
+ DigitalOut E;
+ DigitalOut CS1;
+ DigitalOut CS2;
+ int CurCol;
+};
+
+class DisplayTTY : public Stream {
+ public:
+ DisplayTTY (Display *d, int _row, int _startY, int _numOfChars=10, int _numOfRows=1, int _charOffset=6, int _flags=0);
+ void cls();
+ protected:
+ virtual int _putc (int c);
+ virtual int _getc();
+ virtual void newline();
+ Display *kalle;
+ int row;
+ int startY;
+ int numOfChars;
+ int numOfRows;
+ int charOffset;
+ int flags;
+ int CursPosY;
+ int CursPosW;
+};
+
+#endif
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/font.h Sat Dec 25 10:14:10 2010 +0000
@@ -0,0 +1,102 @@
+#ifndef FONT_H
+#define FONT_H
+// (c) Radosław Kwiecień - http://en.radzio.dxp.pl/ks0108/
+static const char font5x8[] = {
+0x00, 0x00, 0x00, 0x00, 0x00,// (spacja)
+0x00, 0x00, 0x5F, 0x00, 0x00,// !
+0x00, 0x07, 0x00, 0x07, 0x00,// "
+0x14, 0x7F, 0x14, 0x7F, 0x14,// #
+0x24, 0x2A, 0x7F, 0x2A, 0x12,// $
+0x23, 0x13, 0x08, 0x64, 0x62,// %
+0x36, 0x49, 0x55, 0x22, 0x50,// &
+0x00, 0x05, 0x03, 0x00, 0x00,// '
+0x00, 0x1C, 0x22, 0x41, 0x00,// (
+0x00, 0x41, 0x22, 0x1C, 0x00,// )
+0x08, 0x2A, 0x1C, 0x2A, 0x08,// *
+0x08, 0x08, 0x3E, 0x08, 0x08,// +
+0x00, 0x50, 0x30, 0x00, 0x00,// ,
+0x08, 0x08, 0x08, 0x08, 0x08,// -
+0x00, 0x30, 0x30, 0x00, 0x00,// .
+0x20, 0x10, 0x08, 0x04, 0x02,// /
+0x3E, 0x51, 0x49, 0x45, 0x3E,// 0
+0x00, 0x42, 0x7F, 0x40, 0x00,// 1
+0x42, 0x61, 0x51, 0x49, 0x46,// 2
+0x21, 0x41, 0x45, 0x4B, 0x31,// 3
+0x18, 0x14, 0x12, 0x7F, 0x10,// 4
+0x27, 0x45, 0x45, 0x45, 0x39,// 5
+0x3C, 0x4A, 0x49, 0x49, 0x30,// 6
+0x01, 0x71, 0x09, 0x05, 0x03,// 7
+0x36, 0x49, 0x49, 0x49, 0x36,// 8
+0x06, 0x49, 0x49, 0x29, 0x1E,// 9
+0x00, 0x36, 0x36, 0x00, 0x00,// :
+0x00, 0x56, 0x36, 0x00, 0x00,// ;
+0x00, 0x08, 0x14, 0x22, 0x41,// <
+0x14, 0x14, 0x14, 0x14, 0x14,// =
+0x41, 0x22, 0x14, 0x08, 0x00,// >
+0x02, 0x01, 0x51, 0x09, 0x06,// ?
+0x32, 0x49, 0x79, 0x41, 0x3E,// @
+0x7E, 0x11, 0x11, 0x11, 0x7E,// A
+0x7F, 0x49, 0x49, 0x49, 0x36,// B
+0x3E, 0x41, 0x41, 0x41, 0x22,// C
+0x7F, 0x41, 0x41, 0x22, 0x1C,// D
+0x7F, 0x49, 0x49, 0x49, 0x41,// E
+0x7F, 0x09, 0x09, 0x01, 0x01,// F
+0x3E, 0x41, 0x41, 0x51, 0x32,// G
+0x7F, 0x08, 0x08, 0x08, 0x7F,// H
+0x00, 0x41, 0x7F, 0x41, 0x00,// I
+0x20, 0x40, 0x41, 0x3F, 0x01,// J
+0x7F, 0x08, 0x14, 0x22, 0x41,// K
+0x7F, 0x40, 0x40, 0x40, 0x40,// L
+0x7F, 0x02, 0x04, 0x02, 0x7F,// M
+0x7F, 0x04, 0x08, 0x10, 0x7F,// N
+0x3E, 0x41, 0x41, 0x41, 0x3E,// O
+0x7F, 0x09, 0x09, 0x09, 0x06,// P
+0x3E, 0x41, 0x51, 0x21, 0x5E,// Q
+0x7F, 0x09, 0x19, 0x29, 0x46,// R
+0x46, 0x49, 0x49, 0x49, 0x31,// S
+0x01, 0x01, 0x7F, 0x01, 0x01,// T
+0x3F, 0x40, 0x40, 0x40, 0x3F,// U
+0x1F, 0x20, 0x40, 0x20, 0x1F,// V
+0x7F, 0x20, 0x18, 0x20, 0x7F,// W
+0x63, 0x14, 0x08, 0x14, 0x63,// X
+0x03, 0x04, 0x78, 0x04, 0x03,// Y
+0x61, 0x51, 0x49, 0x45, 0x43,// Z
+0x00, 0x00, 0x7F, 0x41, 0x41,// [
+0x02, 0x04, 0x08, 0x10, 0x20,// "\"
+0x41, 0x41, 0x7F, 0x00, 0x00,// ]
+0x04, 0x02, 0x01, 0x02, 0x04,// ^
+0x40, 0x40, 0x40, 0x40, 0x40,// _
+0x00, 0x01, 0x02, 0x04, 0x00,// `
+0x20, 0x54, 0x54, 0x54, 0x78,// a
+0x7F, 0x48, 0x44, 0x44, 0x38,// b
+0x38, 0x44, 0x44, 0x44, 0x20,// c
+0x38, 0x44, 0x44, 0x48, 0x7F,// d
+0x38, 0x54, 0x54, 0x54, 0x18,// e
+0x08, 0x7E, 0x09, 0x01, 0x02,// f
+0x08, 0x14, 0x54, 0x54, 0x3C,// g
+0x7F, 0x08, 0x04, 0x04, 0x78,// h
+0x00, 0x44, 0x7D, 0x40, 0x00,// i
+0x20, 0x40, 0x44, 0x3D, 0x00,// j
+0x00, 0x7F, 0x10, 0x28, 0x44,// k
+0x00, 0x41, 0x7F, 0x40, 0x00,// l
+0x7C, 0x04, 0x18, 0x04, 0x78,// m
+0x7C, 0x08, 0x04, 0x04, 0x78,// n
+0x38, 0x44, 0x44, 0x44, 0x38,// o
+0x7C, 0x14, 0x14, 0x14, 0x08,// p
+0x08, 0x14, 0x14, 0x18, 0x7C,// q
+0x7C, 0x08, 0x04, 0x04, 0x08,// r
+0x48, 0x54, 0x54, 0x54, 0x20,// s
+0x04, 0x3F, 0x44, 0x40, 0x20,// t
+0x3C, 0x40, 0x40, 0x20, 0x7C,// u
+0x1C, 0x20, 0x40, 0x20, 0x1C,// v
+0x3C, 0x40, 0x30, 0x40, 0x3C,// w
+0x44, 0x28, 0x10, 0x28, 0x44,// x
+0x0C, 0x50, 0x50, 0x50, 0x3C,// y
+0x44, 0x64, 0x54, 0x4C, 0x44,// z
+0x00, 0x08, 0x36, 0x41, 0x00,// {
+0x00, 0x00, 0x7F, 0x00, 0x00,// |
+0x00, 0x41, 0x36, 0x08, 0x00,// }
+0x08, 0x08, 0x2A, 0x1C, 0x08,// ->
+0x08, 0x1C, 0x2A, 0x08, 0x08 // <-
+};
+#endif
\ No newline at end of file