Newhaven 320x240 LCD

Dependencies:   mbed

Committer:
pbevans89
Date:
Sun Feb 27 21:01:16 2011 +0000
Revision:
0:c8893901ef8a
Child:
2:2058e2f79157

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
pbevans89 0:c8893901ef8a 1 #include "mbed.h"
pbevans89 0:c8893901ef8a 2 #include "newhaven.h"
pbevans89 0:c8893901ef8a 3
pbevans89 0:c8893901ef8a 4 NHLCD::NHLCD(PinName PIN_E,PinName PIN_RW,PinName PIN_A0,PinName PIN_CS,PinName PIN_RST, BusInOut *BUSLCD)
pbevans89 0:c8893901ef8a 5 : E(PIN_E),RW(PIN_RW),A0(PIN_A0),CS(PIN_CS),RST(PIN_RST){
pbevans89 0:c8893901ef8a 6 LCD_PORT = BUSLCD;
pbevans89 0:c8893901ef8a 7 }
pbevans89 0:c8893901ef8a 8
pbevans89 0:c8893901ef8a 9 void delay(unsigned int n)
pbevans89 0:c8893901ef8a 10 {
pbevans89 0:c8893901ef8a 11 unsigned int i,j;
pbevans89 0:c8893901ef8a 12 for (i=0;i<n;i++)
pbevans89 0:c8893901ef8a 13 for (j=0;j<350;j++)
pbevans89 0:c8893901ef8a 14 {;}
pbevans89 0:c8893901ef8a 15 }
pbevans89 0:c8893901ef8a 16 void delay1(unsigned int i)
pbevans89 0:c8893901ef8a 17 {
pbevans89 0:c8893901ef8a 18 while(i--);
pbevans89 0:c8893901ef8a 19 }
pbevans89 0:c8893901ef8a 20
pbevans89 0:c8893901ef8a 21
pbevans89 0:c8893901ef8a 22 void NHLCD::comm_out(unsigned char j){
pbevans89 0:c8893901ef8a 23 LCD_PORT->output();
pbevans89 0:c8893901ef8a 24 A0 = 1;
pbevans89 0:c8893901ef8a 25 LCD_PORT->write(j);
pbevans89 0:c8893901ef8a 26 CS = 0;
pbevans89 0:c8893901ef8a 27 RW = 0;
pbevans89 0:c8893901ef8a 28 E = 1;
pbevans89 0:c8893901ef8a 29 delay(1);
pbevans89 0:c8893901ef8a 30 E = 0;
pbevans89 0:c8893901ef8a 31 RW = 1;
pbevans89 0:c8893901ef8a 32 CS = 1;
pbevans89 0:c8893901ef8a 33 }
pbevans89 0:c8893901ef8a 34
pbevans89 0:c8893901ef8a 35 void NHLCD::data_out(unsigned char j){
pbevans89 0:c8893901ef8a 36 LCD_PORT->output();
pbevans89 0:c8893901ef8a 37 A0 = 0;
pbevans89 0:c8893901ef8a 38 LCD_PORT->write(j);
pbevans89 0:c8893901ef8a 39 CS = 0;
pbevans89 0:c8893901ef8a 40 RW = 0;
pbevans89 0:c8893901ef8a 41 E = 1;
pbevans89 0:c8893901ef8a 42 delay(1);
pbevans89 0:c8893901ef8a 43 E = 0;
pbevans89 0:c8893901ef8a 44 RW = 1;
pbevans89 0:c8893901ef8a 45 CS = 1;
pbevans89 0:c8893901ef8a 46 }
pbevans89 0:c8893901ef8a 47
pbevans89 0:c8893901ef8a 48 void NHLCD::clearScreen(){
pbevans89 0:c8893901ef8a 49 int n;
pbevans89 0:c8893901ef8a 50 comm_out(0x46);
pbevans89 0:c8893901ef8a 51 data_out(0x00);
pbevans89 0:c8893901ef8a 52 data_out(0x00);
pbevans89 0:c8893901ef8a 53 comm_out(0x42);
pbevans89 0:c8893901ef8a 54 for(n=0;n<1200;n++){
pbevans89 0:c8893901ef8a 55 data_out(0x20);
pbevans89 0:c8893901ef8a 56 }
pbevans89 0:c8893901ef8a 57 comm_out(0x46);
pbevans89 0:c8893901ef8a 58 data_out(0xB0);
pbevans89 0:c8893901ef8a 59 data_out(0x04);
pbevans89 0:c8893901ef8a 60 comm_out(0x42);
pbevans89 0:c8893901ef8a 61 for(n=0;n<9600;n++){
pbevans89 0:c8893901ef8a 62 data_out(0x00);
pbevans89 0:c8893901ef8a 63 }
pbevans89 0:c8893901ef8a 64 }
pbevans89 0:c8893901ef8a 65
pbevans89 0:c8893901ef8a 66 void NHLCD::text(char *text, char row, char col){
pbevans89 0:c8893901ef8a 67 int c = row*40+col;
pbevans89 0:c8893901ef8a 68 comm_out(0x46);
pbevans89 0:c8893901ef8a 69 data_out((unsigned char)(c&0xFF));
pbevans89 0:c8893901ef8a 70 data_out((unsigned char)((c&0xFF00)>>8));
pbevans89 0:c8893901ef8a 71 comm_out(0x42);
pbevans89 0:c8893901ef8a 72 while(*text != 0) {
pbevans89 0:c8893901ef8a 73 data_out(*text);
pbevans89 0:c8893901ef8a 74 text++;
pbevans89 0:c8893901ef8a 75 }
pbevans89 0:c8893901ef8a 76 }
pbevans89 0:c8893901ef8a 77
pbevans89 0:c8893901ef8a 78
pbevans89 0:c8893901ef8a 79 void NHLCD::Init(void){
pbevans89 0:c8893901ef8a 80 RST = 0;
pbevans89 0:c8893901ef8a 81 delay(5);
pbevans89 0:c8893901ef8a 82 RST = 1;
pbevans89 0:c8893901ef8a 83 delay(10);
pbevans89 0:c8893901ef8a 84
pbevans89 0:c8893901ef8a 85 comm_out(0x40);
pbevans89 0:c8893901ef8a 86 delay(5);
pbevans89 0:c8893901ef8a 87 data_out(0x30); //parameters
pbevans89 0:c8893901ef8a 88 data_out(0x87); //horizontal character size (0x80 = 1) MUST BE MULTIPLE OF 320
pbevans89 0:c8893901ef8a 89 data_out(0x07); //vertical character size (0x00 = 1) MUST BE MULTIPLE OF 240
pbevans89 0:c8893901ef8a 90 data_out(40); //addresses per line
pbevans89 0:c8893901ef8a 91 data_out(80);
pbevans89 0:c8893901ef8a 92 data_out(0xEF);
pbevans89 0:c8893901ef8a 93 data_out(0x28);
pbevans89 0:c8893901ef8a 94 data_out(0x00);
pbevans89 0:c8893901ef8a 95
pbevans89 0:c8893901ef8a 96 comm_out(0x44);
pbevans89 0:c8893901ef8a 97 data_out(0x00);
pbevans89 0:c8893901ef8a 98 data_out(0x00);
pbevans89 0:c8893901ef8a 99 data_out(0xEF);
pbevans89 0:c8893901ef8a 100 data_out(0xB0);
pbevans89 0:c8893901ef8a 101 data_out(0x04);
pbevans89 0:c8893901ef8a 102 data_out(0xEF);
pbevans89 0:c8893901ef8a 103 data_out(0x00);
pbevans89 0:c8893901ef8a 104 data_out(0x00);
pbevans89 0:c8893901ef8a 105 data_out(0x00);
pbevans89 0:c8893901ef8a 106 data_out(0x00);
pbevans89 0:c8893901ef8a 107
pbevans89 0:c8893901ef8a 108 comm_out(0x5A);
pbevans89 0:c8893901ef8a 109 data_out(0x00);
pbevans89 0:c8893901ef8a 110
pbevans89 0:c8893901ef8a 111 comm_out(0x5B);
pbevans89 0:c8893901ef8a 112 data_out(0x00);
pbevans89 0:c8893901ef8a 113
pbevans89 0:c8893901ef8a 114 comm_out(0x58);
pbevans89 0:c8893901ef8a 115 data_out(0x56);
pbevans89 0:c8893901ef8a 116
pbevans89 0:c8893901ef8a 117 comm_out(0x5D);
pbevans89 0:c8893901ef8a 118 data_out(0x04);
pbevans89 0:c8893901ef8a 119 data_out(0x86);
pbevans89 0:c8893901ef8a 120
pbevans89 0:c8893901ef8a 121 comm_out(0x4C);
pbevans89 0:c8893901ef8a 122
pbevans89 0:c8893901ef8a 123 comm_out(0x59);
pbevans89 0:c8893901ef8a 124 data_out(0x16);
pbevans89 0:c8893901ef8a 125 wait_ms(5);
pbevans89 0:c8893901ef8a 126 }
pbevans89 0:c8893901ef8a 127
pbevans89 0:c8893901ef8a 128 void NHLCD::setPixel(int row, int col){
pbevans89 0:c8893901ef8a 129 int loc = (0x04<<8)|(0xB0);
pbevans89 0:c8893901ef8a 130 int c = loc+row*40+(col/8);
pbevans89 0:c8893901ef8a 131 comm_out(0x46);
pbevans89 0:c8893901ef8a 132 data_out((unsigned char)(c&0xFF));
pbevans89 0:c8893901ef8a 133 data_out((unsigned char)((c&0xFF00)>>8));
pbevans89 0:c8893901ef8a 134 comm_out(0x43);
pbevans89 0:c8893901ef8a 135 LCD_PORT->input();
pbevans89 0:c8893901ef8a 136 unsigned char buffer = LCD_PORT->read();
pbevans89 0:c8893901ef8a 137 buffer = buffer|(1<<(7-((row*320+col)%8)));
pbevans89 0:c8893901ef8a 138 LCD_PORT->output();
pbevans89 0:c8893901ef8a 139
pbevans89 0:c8893901ef8a 140 comm_out(0x46);
pbevans89 0:c8893901ef8a 141 data_out((unsigned char)(c&0xFF));
pbevans89 0:c8893901ef8a 142 data_out((unsigned char)((c&0xFF00)>>8));
pbevans89 0:c8893901ef8a 143 comm_out(0x42);
pbevans89 0:c8893901ef8a 144 data_out(buffer);
pbevans89 0:c8893901ef8a 145 }