Paul Evans
/
Newhaven_LCD
Newhaven 320x240 LCD
newhaven.cpp@0:c8893901ef8a, 2011-02-27 (annotated)
- Committer:
- pbevans89
- Date:
- Sun Feb 27 21:01:16 2011 +0000
- Revision:
- 0:c8893901ef8a
- Child:
- 2:2058e2f79157
Who changed what in which revision?
User | Revision | Line number | New 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 | } |