128x64 grafical display with KS0107B and KS0108B controller
Display.cpp@0:45771b38d50d, 2009-11-17 (annotated)
- Committer:
- hornfeldt
- Date:
- Tue Nov 17 22:42:50 2009 +0000
- Revision:
- 0:45771b38d50d
- Child:
- 1:1d06bc155ef3
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
hornfeldt | 0:45771b38d50d | 1 | #include "mbed.h" |
hornfeldt | 0:45771b38d50d | 2 | #include "Display.h" |
hornfeldt | 0:45771b38d50d | 3 | |
hornfeldt | 0:45771b38d50d | 4 | 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) |
hornfeldt | 0:45771b38d50d | 5 | : DB(DB0,DB1,DB2,DB3,DB4,DB5,DB6,DB7), RS(_RS), RW(_RW), E(_E), CS1(_CS1), CS2(_CS2) { |
hornfeldt | 0:45771b38d50d | 6 | DB.mode(PullNone); |
hornfeldt | 0:45771b38d50d | 7 | E = 0; |
hornfeldt | 0:45771b38d50d | 8 | SendCommand(0x3F, 4|8); |
hornfeldt | 0:45771b38d50d | 9 | for (int c=0;c<128;c++) { |
hornfeldt | 0:45771b38d50d | 10 | for (int r=0;r<8;r++) |
hornfeldt | 0:45771b38d50d | 11 | { |
hornfeldt | 0:45771b38d50d | 12 | write(r,c,0); |
hornfeldt | 0:45771b38d50d | 13 | } |
hornfeldt | 0:45771b38d50d | 14 | } |
hornfeldt | 0:45771b38d50d | 15 | } |
hornfeldt | 0:45771b38d50d | 16 | DisplayTTY::DisplayTTY (Display *d, int row, int startY, int numOfChars=10, int numOfRows=1, int charOffset=6, int flags=0) |
hornfeldt | 0:45771b38d50d | 17 | { |
hornfeldt | 0:45771b38d50d | 18 | display = d; |
hornfeldt | 0:45771b38d50d | 19 | } |
hornfeldt | 0:45771b38d50d | 20 | int Display::SendCommand(unsigned int Command, int f) { |
hornfeldt | 0:45771b38d50d | 21 | int value = 1; |
hornfeldt | 0:45771b38d50d | 22 | E = 0; |
hornfeldt | 0:45771b38d50d | 23 | RS = 0; |
hornfeldt | 0:45771b38d50d | 24 | RW = 0; |
hornfeldt | 0:45771b38d50d | 25 | CS1 = 0; |
hornfeldt | 0:45771b38d50d | 26 | CS2 = 0; |
hornfeldt | 0:45771b38d50d | 27 | if (f&1) |
hornfeldt | 0:45771b38d50d | 28 | RS = 1; |
hornfeldt | 0:45771b38d50d | 29 | if (f&2) |
hornfeldt | 0:45771b38d50d | 30 | RW = 1; |
hornfeldt | 0:45771b38d50d | 31 | if (f&4) |
hornfeldt | 0:45771b38d50d | 32 | CS1 = 1; |
hornfeldt | 0:45771b38d50d | 33 | if (f&8) |
hornfeldt | 0:45771b38d50d | 34 | CS2 = 1; |
hornfeldt | 0:45771b38d50d | 35 | wait(0.0000005); // 500ns |
hornfeldt | 0:45771b38d50d | 36 | E = 1; |
hornfeldt | 0:45771b38d50d | 37 | if (f&2) |
hornfeldt | 0:45771b38d50d | 38 | { |
hornfeldt | 0:45771b38d50d | 39 | DB.input(); |
hornfeldt | 0:45771b38d50d | 40 | wait(0.0000004); |
hornfeldt | 0:45771b38d50d | 41 | value = DB; |
hornfeldt | 0:45771b38d50d | 42 | } |
hornfeldt | 0:45771b38d50d | 43 | else |
hornfeldt | 0:45771b38d50d | 44 | { |
hornfeldt | 0:45771b38d50d | 45 | DB.output(); |
hornfeldt | 0:45771b38d50d | 46 | wait(0.0000001); |
hornfeldt | 0:45771b38d50d | 47 | DB = Command; |
hornfeldt | 0:45771b38d50d | 48 | } |
hornfeldt | 0:45771b38d50d | 49 | E = 0; |
hornfeldt | 0:45771b38d50d | 50 | return value; |
hornfeldt | 0:45771b38d50d | 51 | } |
hornfeldt | 0:45771b38d50d | 52 | |
hornfeldt | 0:45771b38d50d | 53 | void Display::write (int page, int y, unsigned int data) { |
hornfeldt | 0:45771b38d50d | 54 | int f = 0; |
hornfeldt | 0:45771b38d50d | 55 | if (y<64) |
hornfeldt | 0:45771b38d50d | 56 | f = 4; |
hornfeldt | 0:45771b38d50d | 57 | else |
hornfeldt | 0:45771b38d50d | 58 | f = 8; |
hornfeldt | 0:45771b38d50d | 59 | CurCol = y; |
hornfeldt | 0:45771b38d50d | 60 | SendCommand(0xB8+(page&0x07), f); |
hornfeldt | 0:45771b38d50d | 61 | SendCommand(0x40+(y&0x3F),f); |
hornfeldt | 0:45771b38d50d | 62 | SendCommand(data, f+1); |
hornfeldt | 0:45771b38d50d | 63 | } |
hornfeldt | 0:45771b38d50d | 64 | |
hornfeldt | 0:45771b38d50d | 65 | void Display::writec (int row, int Y, char c) { |
hornfeldt | 0:45771b38d50d | 66 | if (c>31 && c<127) |
hornfeldt | 0:45771b38d50d | 67 | { |
hornfeldt | 0:45771b38d50d | 68 | write(row,Y,font5x8[(c-32)*5+0]); |
hornfeldt | 0:45771b38d50d | 69 | write(row,Y,font5x8[(c-32)*5+1]); |
hornfeldt | 0:45771b38d50d | 70 | write(row,Y,font5x8[(c-32)*5+2]); |
hornfeldt | 0:45771b38d50d | 71 | write(row,Y,font5x8[(c-32)*5+3]); |
hornfeldt | 0:45771b38d50d | 72 | write(row,Y,font5x8[(c-32)*5+4]); |
hornfeldt | 0:45771b38d50d | 73 | } |
hornfeldt | 0:45771b38d50d | 74 | } |