128x64 grafical display with KS0107B and KS0108B controller

Committer:
hornfeldt
Date:
Tue Nov 17 22:42:50 2009 +0000
Revision:
0:45771b38d50d
Child:
1:1d06bc155ef3

        

Who changed what in which revision?

UserRevisionLine numberNew 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 }