Marcelo Costanzo Miranda
/
ST7920_TEST_sem_lib_2
ST7920 Testes
main.cpp@0:d93bec0d412f, 2019-11-06 (annotated)
- Committer:
- Marcelocostanzo
- Date:
- Wed Nov 06 10:58:12 2019 +0000
- Revision:
- 0:d93bec0d412f
- Child:
- 1:08481151e25e
ST7920 horizontal line
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Marcelocostanzo | 0:d93bec0d412f | 1 | #include "mbed.h" |
Marcelocostanzo | 0:d93bec0d412f | 2 | #define OFF 0 |
Marcelocostanzo | 0:d93bec0d412f | 3 | #define ON 1 |
Marcelocostanzo | 0:d93bec0d412f | 4 | #define CURSOR 0b00011100 |
Marcelocostanzo | 0:d93bec0d412f | 5 | |
Marcelocostanzo | 0:d93bec0d412f | 6 | BusOut DB(D5, D6, D7, D8, D9, D10, D11, D12); // DB0 - DB7 RESPECTIVAMENTE |
Marcelocostanzo | 0:d93bec0d412f | 7 | //BusOut DB(D12, D11, D10, D9, D8, D7, D6, D5); // DB7 - DB0 RESPECTIVAMENTE |
Marcelocostanzo | 0:d93bec0d412f | 8 | |
Marcelocostanzo | 0:d93bec0d412f | 9 | DigitalOut RS(D2); |
Marcelocostanzo | 0:d93bec0d412f | 10 | DigitalOut RW(D3); |
Marcelocostanzo | 0:d93bec0d412f | 11 | DigitalOut EN(D4); |
Marcelocostanzo | 0:d93bec0d412f | 12 | |
Marcelocostanzo | 0:d93bec0d412f | 13 | Serial pc(USBTX, USBRX); |
Marcelocostanzo | 0:d93bec0d412f | 14 | |
Marcelocostanzo | 0:d93bec0d412f | 15 | |
Marcelocostanzo | 0:d93bec0d412f | 16 | //imagem 11x9 trator |
Marcelocostanzo | 0:d93bec0d412f | 17 | unsigned char trator[]={ |
Marcelocostanzo | 0:d93bec0d412f | 18 | 0x00, 0x00, 0x1E, 0x00, 0x92, 0x00, 0x92, 0x00, |
Marcelocostanzo | 0:d93bec0d412f | 19 | 0xFE, 0x03, 0xFB, 0x07, 0xF1, 0x03, 0x9B, 0x02, |
Marcelocostanzo | 0:d93bec0d412f | 20 | 0x8E, 0x03}; |
Marcelocostanzo | 0:d93bec0d412f | 21 | |
Marcelocostanzo | 0:d93bec0d412f | 22 | int main() |
Marcelocostanzo | 0:d93bec0d412f | 23 | { |
Marcelocostanzo | 0:d93bec0d412f | 24 | pc.printf("OI \n\r"); |
Marcelocostanzo | 0:d93bec0d412f | 25 | wait_ms(100); |
Marcelocostanzo | 0:d93bec0d412f | 26 | |
Marcelocostanzo | 0:d93bec0d412f | 27 | //function set 8-bit mode |
Marcelocostanzo | 0:d93bec0d412f | 28 | RS = 0; |
Marcelocostanzo | 0:d93bec0d412f | 29 | RW = 0; |
Marcelocostanzo | 0:d93bec0d412f | 30 | wait_us(100); |
Marcelocostanzo | 0:d93bec0d412f | 31 | EN = ON; |
Marcelocostanzo | 0:d93bec0d412f | 32 | DB = 0b00110000; |
Marcelocostanzo | 0:d93bec0d412f | 33 | wait_us(100); |
Marcelocostanzo | 0:d93bec0d412f | 34 | EN = OFF; |
Marcelocostanzo | 0:d93bec0d412f | 35 | |
Marcelocostanzo | 0:d93bec0d412f | 36 | //function set 8-bit mode again |
Marcelocostanzo | 0:d93bec0d412f | 37 | wait_us(1000); |
Marcelocostanzo | 0:d93bec0d412f | 38 | RS = 0; |
Marcelocostanzo | 0:d93bec0d412f | 39 | RW = 0; |
Marcelocostanzo | 0:d93bec0d412f | 40 | wait_us(100); |
Marcelocostanzo | 0:d93bec0d412f | 41 | EN = ON; |
Marcelocostanzo | 0:d93bec0d412f | 42 | DB = 0b00110000; |
Marcelocostanzo | 0:d93bec0d412f | 43 | wait_us(100); |
Marcelocostanzo | 0:d93bec0d412f | 44 | EN = OFF; |
Marcelocostanzo | 0:d93bec0d412f | 45 | |
Marcelocostanzo | 0:d93bec0d412f | 46 | // display on |
Marcelocostanzo | 0:d93bec0d412f | 47 | wait_us(1000); |
Marcelocostanzo | 0:d93bec0d412f | 48 | RS = 0; |
Marcelocostanzo | 0:d93bec0d412f | 49 | RW = 0; |
Marcelocostanzo | 0:d93bec0d412f | 50 | wait_us(100); |
Marcelocostanzo | 0:d93bec0d412f | 51 | EN = ON; |
Marcelocostanzo | 0:d93bec0d412f | 52 | DB = 0b00001100; |
Marcelocostanzo | 0:d93bec0d412f | 53 | wait_us(100); |
Marcelocostanzo | 0:d93bec0d412f | 54 | EN = OFF; |
Marcelocostanzo | 0:d93bec0d412f | 55 | |
Marcelocostanzo | 0:d93bec0d412f | 56 | // cursor - Display shift right by 1, cursor also follows to shift. |
Marcelocostanzo | 0:d93bec0d412f | 57 | wait_us(1000); |
Marcelocostanzo | 0:d93bec0d412f | 58 | RS = 0; |
Marcelocostanzo | 0:d93bec0d412f | 59 | RW = 0; |
Marcelocostanzo | 0:d93bec0d412f | 60 | wait_us(100); |
Marcelocostanzo | 0:d93bec0d412f | 61 | EN = ON; |
Marcelocostanzo | 0:d93bec0d412f | 62 | DB = 0b00011100; |
Marcelocostanzo | 0:d93bec0d412f | 63 | wait_us(100); |
Marcelocostanzo | 0:d93bec0d412f | 64 | EN = OFF; |
Marcelocostanzo | 0:d93bec0d412f | 65 | |
Marcelocostanzo | 0:d93bec0d412f | 66 | // clear screen |
Marcelocostanzo | 0:d93bec0d412f | 67 | wait_us(1000); |
Marcelocostanzo | 0:d93bec0d412f | 68 | RS = 0; |
Marcelocostanzo | 0:d93bec0d412f | 69 | RW = 0; |
Marcelocostanzo | 0:d93bec0d412f | 70 | wait_us(100); |
Marcelocostanzo | 0:d93bec0d412f | 71 | EN = ON; |
Marcelocostanzo | 0:d93bec0d412f | 72 | DB = 0b00000001; |
Marcelocostanzo | 0:d93bec0d412f | 73 | wait_us(2000); |
Marcelocostanzo | 0:d93bec0d412f | 74 | EN = OFF; |
Marcelocostanzo | 0:d93bec0d412f | 75 | |
Marcelocostanzo | 0:d93bec0d412f | 76 | // Returns to home. Cursor moves to starting point |
Marcelocostanzo | 0:d93bec0d412f | 77 | wait_us(1000); |
Marcelocostanzo | 0:d93bec0d412f | 78 | RS = 0; |
Marcelocostanzo | 0:d93bec0d412f | 79 | RW = 0; |
Marcelocostanzo | 0:d93bec0d412f | 80 | wait_us(100); |
Marcelocostanzo | 0:d93bec0d412f | 81 | EN = ON; |
Marcelocostanzo | 0:d93bec0d412f | 82 | DB = 0b00000010; |
Marcelocostanzo | 0:d93bec0d412f | 83 | wait_us(100); |
Marcelocostanzo | 0:d93bec0d412f | 84 | EN = OFF; |
Marcelocostanzo | 0:d93bec0d412f | 85 | |
Marcelocostanzo | 0:d93bec0d412f | 86 | // Setting location to write characters. In this case 0,0 - Top Left Corner |
Marcelocostanzo | 0:d93bec0d412f | 87 | wait_us(1000); |
Marcelocostanzo | 0:d93bec0d412f | 88 | RS = 0; |
Marcelocostanzo | 0:d93bec0d412f | 89 | RW = 0; |
Marcelocostanzo | 0:d93bec0d412f | 90 | wait_us(100); |
Marcelocostanzo | 0:d93bec0d412f | 91 | EN = ON; |
Marcelocostanzo | 0:d93bec0d412f | 92 | DB = 0x80; |
Marcelocostanzo | 0:d93bec0d412f | 93 | wait_us(100); |
Marcelocostanzo | 0:d93bec0d412f | 94 | EN = OFF; |
Marcelocostanzo | 0:d93bec0d412f | 95 | |
Marcelocostanzo | 0:d93bec0d412f | 96 | wait(2); |
Marcelocostanzo | 0:d93bec0d412f | 97 | |
Marcelocostanzo | 0:d93bec0d412f | 98 | // Extended instuction set, 8bit // |
Marcelocostanzo | 0:d93bec0d412f | 99 | wait_us(1000); // |
Marcelocostanzo | 0:d93bec0d412f | 100 | RS = 0; // |
Marcelocostanzo | 0:d93bec0d412f | 101 | RW = 0; // |
Marcelocostanzo | 0:d93bec0d412f | 102 | wait_us(100); // |
Marcelocostanzo | 0:d93bec0d412f | 103 | EN = ON; // |
Marcelocostanzo | 0:d93bec0d412f | 104 | DB = 0b00110100; // |
Marcelocostanzo | 0:d93bec0d412f | 105 | wait_us(100); // |
Marcelocostanzo | 0:d93bec0d412f | 106 | EN = OFF; // |
Marcelocostanzo | 0:d93bec0d412f | 107 | wait_us(20); // |
Marcelocostanzo | 0:d93bec0d412f | 108 | //-----> set graphics mode |
Marcelocostanzo | 0:d93bec0d412f | 109 | // Repeat instrution with bit1 set // |
Marcelocostanzo | 0:d93bec0d412f | 110 | wait_us(1000); // |
Marcelocostanzo | 0:d93bec0d412f | 111 | RS = 0; // |
Marcelocostanzo | 0:d93bec0d412f | 112 | RW = 0; // |
Marcelocostanzo | 0:d93bec0d412f | 113 | wait_us(100); // |
Marcelocostanzo | 0:d93bec0d412f | 114 | EN = ON; // |
Marcelocostanzo | 0:d93bec0d412f | 115 | DB = 0b00110110; // |
Marcelocostanzo | 0:d93bec0d412f | 116 | wait_us(100); // |
Marcelocostanzo | 0:d93bec0d412f | 117 | EN = OFF; // |
Marcelocostanzo | 0:d93bec0d412f | 118 | wait_us(20); // |
Marcelocostanzo | 0:d93bec0d412f | 119 | |
Marcelocostanzo | 0:d93bec0d412f | 120 | //=========== This function set all the pixels to off in the graphic controller ================= |
Marcelocostanzo | 0:d93bec0d412f | 121 | for(int y = 0; y < 64; y++) |
Marcelocostanzo | 0:d93bec0d412f | 122 | { |
Marcelocostanzo | 0:d93bec0d412f | 123 | if(y < 32) |
Marcelocostanzo | 0:d93bec0d412f | 124 | { |
Marcelocostanzo | 0:d93bec0d412f | 125 | wait_us(1000); |
Marcelocostanzo | 0:d93bec0d412f | 126 | RS = 0; |
Marcelocostanzo | 0:d93bec0d412f | 127 | RW = 0; |
Marcelocostanzo | 0:d93bec0d412f | 128 | wait_us(100); |
Marcelocostanzo | 0:d93bec0d412f | 129 | EN = ON; |
Marcelocostanzo | 0:d93bec0d412f | 130 | DB = (0x80 | y); |
Marcelocostanzo | 0:d93bec0d412f | 131 | wait_us(100); |
Marcelocostanzo | 0:d93bec0d412f | 132 | EN = OFF; |
Marcelocostanzo | 0:d93bec0d412f | 133 | wait_us(100); |
Marcelocostanzo | 0:d93bec0d412f | 134 | |
Marcelocostanzo | 0:d93bec0d412f | 135 | wait_us(1000); |
Marcelocostanzo | 0:d93bec0d412f | 136 | RS = 0; |
Marcelocostanzo | 0:d93bec0d412f | 137 | RW = 0; |
Marcelocostanzo | 0:d93bec0d412f | 138 | wait_us(100); |
Marcelocostanzo | 0:d93bec0d412f | 139 | EN = ON; |
Marcelocostanzo | 0:d93bec0d412f | 140 | DB = 0x80; |
Marcelocostanzo | 0:d93bec0d412f | 141 | wait_us(100); |
Marcelocostanzo | 0:d93bec0d412f | 142 | EN = OFF; |
Marcelocostanzo | 0:d93bec0d412f | 143 | wait_us(100); |
Marcelocostanzo | 0:d93bec0d412f | 144 | } |
Marcelocostanzo | 0:d93bec0d412f | 145 | |
Marcelocostanzo | 0:d93bec0d412f | 146 | else |
Marcelocostanzo | 0:d93bec0d412f | 147 | { |
Marcelocostanzo | 0:d93bec0d412f | 148 | wait_us(1000); |
Marcelocostanzo | 0:d93bec0d412f | 149 | RS = 0; |
Marcelocostanzo | 0:d93bec0d412f | 150 | RW = 0; |
Marcelocostanzo | 0:d93bec0d412f | 151 | wait_us(100); |
Marcelocostanzo | 0:d93bec0d412f | 152 | EN = ON; |
Marcelocostanzo | 0:d93bec0d412f | 153 | DB = (0x80 | (y - 32)); |
Marcelocostanzo | 0:d93bec0d412f | 154 | wait_us(100); |
Marcelocostanzo | 0:d93bec0d412f | 155 | EN = OFF; |
Marcelocostanzo | 0:d93bec0d412f | 156 | wait_us(100); |
Marcelocostanzo | 0:d93bec0d412f | 157 | |
Marcelocostanzo | 0:d93bec0d412f | 158 | wait_us(1000); |
Marcelocostanzo | 0:d93bec0d412f | 159 | RS = 0; |
Marcelocostanzo | 0:d93bec0d412f | 160 | RW = 0; |
Marcelocostanzo | 0:d93bec0d412f | 161 | wait_us(100); |
Marcelocostanzo | 0:d93bec0d412f | 162 | EN = ON; |
Marcelocostanzo | 0:d93bec0d412f | 163 | DB = 0x88; |
Marcelocostanzo | 0:d93bec0d412f | 164 | wait_us(100); |
Marcelocostanzo | 0:d93bec0d412f | 165 | EN = OFF; |
Marcelocostanzo | 0:d93bec0d412f | 166 | wait_us(100); |
Marcelocostanzo | 0:d93bec0d412f | 167 | } |
Marcelocostanzo | 0:d93bec0d412f | 168 | |
Marcelocostanzo | 0:d93bec0d412f | 169 | for(int x = 0; x < 16; x++) |
Marcelocostanzo | 0:d93bec0d412f | 170 | { |
Marcelocostanzo | 0:d93bec0d412f | 171 | wait_us(1000); |
Marcelocostanzo | 0:d93bec0d412f | 172 | RS = 1; |
Marcelocostanzo | 0:d93bec0d412f | 173 | RW = 0; |
Marcelocostanzo | 0:d93bec0d412f | 174 | wait_us(100); |
Marcelocostanzo | 0:d93bec0d412f | 175 | EN = ON; |
Marcelocostanzo | 0:d93bec0d412f | 176 | DB = 0x00; |
Marcelocostanzo | 0:d93bec0d412f | 177 | wait_us(100); |
Marcelocostanzo | 0:d93bec0d412f | 178 | EN = OFF; |
Marcelocostanzo | 0:d93bec0d412f | 179 | wait_us(20); |
Marcelocostanzo | 0:d93bec0d412f | 180 | } |
Marcelocostanzo | 0:d93bec0d412f | 181 | } |
Marcelocostanzo | 0:d93bec0d412f | 182 | |
Marcelocostanzo | 0:d93bec0d412f | 183 | |
Marcelocostanzo | 0:d93bec0d412f | 184 | //desenhando uma linha de tamanho T em Y, com X offset |
Marcelocostanzo | 0:d93bec0d412f | 185 | |
Marcelocostanzo | 0:d93bec0d412f | 186 | unsigned char X = 0; // 0 até 7 |
Marcelocostanzo | 0:d93bec0d412f | 187 | unsigned char Y = 0; // 0 até 31 |
Marcelocostanzo | 0:d93bec0d412f | 188 | unsigned int T = 5; // 1 até 256 |
Marcelocostanzo | 0:d93bec0d412f | 189 | |
Marcelocostanzo | 0:d93bec0d412f | 190 | wait_us(1000); |
Marcelocostanzo | 0:d93bec0d412f | 191 | RS = 0; |
Marcelocostanzo | 0:d93bec0d412f | 192 | RW = 0; |
Marcelocostanzo | 0:d93bec0d412f | 193 | wait_us(100); |
Marcelocostanzo | 0:d93bec0d412f | 194 | EN = ON; |
Marcelocostanzo | 0:d93bec0d412f | 195 | DB = 0x80 | Y; |
Marcelocostanzo | 0:d93bec0d412f | 196 | wait_us(100); |
Marcelocostanzo | 0:d93bec0d412f | 197 | EN = OFF; |
Marcelocostanzo | 0:d93bec0d412f | 198 | wait_us(100); |
Marcelocostanzo | 0:d93bec0d412f | 199 | |
Marcelocostanzo | 0:d93bec0d412f | 200 | wait_us(1000); |
Marcelocostanzo | 0:d93bec0d412f | 201 | RS = 0; |
Marcelocostanzo | 0:d93bec0d412f | 202 | RW = 0; |
Marcelocostanzo | 0:d93bec0d412f | 203 | wait_us(100); |
Marcelocostanzo | 0:d93bec0d412f | 204 | EN = ON; |
Marcelocostanzo | 0:d93bec0d412f | 205 | DB = 0x80 | X; |
Marcelocostanzo | 0:d93bec0d412f | 206 | wait_us(100); |
Marcelocostanzo | 0:d93bec0d412f | 207 | EN = OFF; |
Marcelocostanzo | 0:d93bec0d412f | 208 | wait_us(100); |
Marcelocostanzo | 0:d93bec0d412f | 209 | |
Marcelocostanzo | 0:d93bec0d412f | 210 | for(int i = 0; i < (T / 8); i++) |
Marcelocostanzo | 0:d93bec0d412f | 211 | { |
Marcelocostanzo | 0:d93bec0d412f | 212 | wait_us(1000); |
Marcelocostanzo | 0:d93bec0d412f | 213 | RS = 1; |
Marcelocostanzo | 0:d93bec0d412f | 214 | RW = 0; |
Marcelocostanzo | 0:d93bec0d412f | 215 | wait_us(100); |
Marcelocostanzo | 0:d93bec0d412f | 216 | EN = ON; |
Marcelocostanzo | 0:d93bec0d412f | 217 | DB = (255); |
Marcelocostanzo | 0:d93bec0d412f | 218 | wait_us(100); |
Marcelocostanzo | 0:d93bec0d412f | 219 | EN = OFF; |
Marcelocostanzo | 0:d93bec0d412f | 220 | wait_us(20); |
Marcelocostanzo | 0:d93bec0d412f | 221 | } |
Marcelocostanzo | 0:d93bec0d412f | 222 | |
Marcelocostanzo | 0:d93bec0d412f | 223 | if(T%8 != 0) |
Marcelocostanzo | 0:d93bec0d412f | 224 | { |
Marcelocostanzo | 0:d93bec0d412f | 225 | int T_rest = T - ((T / 8) * 8); |
Marcelocostanzo | 0:d93bec0d412f | 226 | int bus_rest; |
Marcelocostanzo | 0:d93bec0d412f | 227 | |
Marcelocostanzo | 0:d93bec0d412f | 228 | switch (T_rest) |
Marcelocostanzo | 0:d93bec0d412f | 229 | { |
Marcelocostanzo | 0:d93bec0d412f | 230 | case 1: bus_rest = 0x80; break; |
Marcelocostanzo | 0:d93bec0d412f | 231 | case 2: bus_rest = 0xC0; break; |
Marcelocostanzo | 0:d93bec0d412f | 232 | case 3: bus_rest = 0xE0; break; |
Marcelocostanzo | 0:d93bec0d412f | 233 | case 4: bus_rest = 0xF0; break; |
Marcelocostanzo | 0:d93bec0d412f | 234 | case 5: bus_rest = 0xF8; break; |
Marcelocostanzo | 0:d93bec0d412f | 235 | case 6: bus_rest = 0xFC; break; |
Marcelocostanzo | 0:d93bec0d412f | 236 | case 7: bus_rest = 0xFE; break; |
Marcelocostanzo | 0:d93bec0d412f | 237 | } |
Marcelocostanzo | 0:d93bec0d412f | 238 | pc.printf("%x\n\r",bus_rest); |
Marcelocostanzo | 0:d93bec0d412f | 239 | wait_us(1000); |
Marcelocostanzo | 0:d93bec0d412f | 240 | RS = 1; |
Marcelocostanzo | 0:d93bec0d412f | 241 | RW = 0; |
Marcelocostanzo | 0:d93bec0d412f | 242 | wait_us(100); |
Marcelocostanzo | 0:d93bec0d412f | 243 | EN = ON; |
Marcelocostanzo | 0:d93bec0d412f | 244 | DB = bus_rest; // tem que ser 254 no exemplo de T 255 |
Marcelocostanzo | 0:d93bec0d412f | 245 | wait_us(100); |
Marcelocostanzo | 0:d93bec0d412f | 246 | EN = OFF; |
Marcelocostanzo | 0:d93bec0d412f | 247 | wait_us(20); |
Marcelocostanzo | 0:d93bec0d412f | 248 | } |
Marcelocostanzo | 0:d93bec0d412f | 249 | |
Marcelocostanzo | 0:d93bec0d412f | 250 | |
Marcelocostanzo | 0:d93bec0d412f | 251 | pc.printf("teste 11 \n\r"); |
Marcelocostanzo | 0:d93bec0d412f | 252 | |
Marcelocostanzo | 0:d93bec0d412f | 253 | while(1) |
Marcelocostanzo | 0:d93bec0d412f | 254 | { |
Marcelocostanzo | 0:d93bec0d412f | 255 | |
Marcelocostanzo | 0:d93bec0d412f | 256 | } |
Marcelocostanzo | 0:d93bec0d412f | 257 | } |