Marcelo Costanzo Miranda
/
ST7920_TEST_sem_lib_2
ST7920 Testes
main.cpp
- Committer:
- Marcelocostanzo
- Date:
- 2019-11-06
- Revision:
- 0:d93bec0d412f
- Child:
- 1:08481151e25e
File content as of revision 0:d93bec0d412f:
#include "mbed.h" #define OFF 0 #define ON 1 #define CURSOR 0b00011100 BusOut DB(D5, D6, D7, D8, D9, D10, D11, D12); // DB0 - DB7 RESPECTIVAMENTE //BusOut DB(D12, D11, D10, D9, D8, D7, D6, D5); // DB7 - DB0 RESPECTIVAMENTE DigitalOut RS(D2); DigitalOut RW(D3); DigitalOut EN(D4); Serial pc(USBTX, USBRX); //imagem 11x9 trator unsigned char trator[]={ 0x00, 0x00, 0x1E, 0x00, 0x92, 0x00, 0x92, 0x00, 0xFE, 0x03, 0xFB, 0x07, 0xF1, 0x03, 0x9B, 0x02, 0x8E, 0x03}; int main() { pc.printf("OI \n\r"); wait_ms(100); //function set 8-bit mode RS = 0; RW = 0; wait_us(100); EN = ON; DB = 0b00110000; wait_us(100); EN = OFF; //function set 8-bit mode again wait_us(1000); RS = 0; RW = 0; wait_us(100); EN = ON; DB = 0b00110000; wait_us(100); EN = OFF; // display on wait_us(1000); RS = 0; RW = 0; wait_us(100); EN = ON; DB = 0b00001100; wait_us(100); EN = OFF; // cursor - Display shift right by 1, cursor also follows to shift. wait_us(1000); RS = 0; RW = 0; wait_us(100); EN = ON; DB = 0b00011100; wait_us(100); EN = OFF; // clear screen wait_us(1000); RS = 0; RW = 0; wait_us(100); EN = ON; DB = 0b00000001; wait_us(2000); EN = OFF; // Returns to home. Cursor moves to starting point wait_us(1000); RS = 0; RW = 0; wait_us(100); EN = ON; DB = 0b00000010; wait_us(100); EN = OFF; // Setting location to write characters. In this case 0,0 - Top Left Corner wait_us(1000); RS = 0; RW = 0; wait_us(100); EN = ON; DB = 0x80; wait_us(100); EN = OFF; wait(2); // Extended instuction set, 8bit // wait_us(1000); // RS = 0; // RW = 0; // wait_us(100); // EN = ON; // DB = 0b00110100; // wait_us(100); // EN = OFF; // wait_us(20); // //-----> set graphics mode // Repeat instrution with bit1 set // wait_us(1000); // RS = 0; // RW = 0; // wait_us(100); // EN = ON; // DB = 0b00110110; // wait_us(100); // EN = OFF; // wait_us(20); // //=========== This function set all the pixels to off in the graphic controller ================= for(int y = 0; y < 64; y++) { if(y < 32) { wait_us(1000); RS = 0; RW = 0; wait_us(100); EN = ON; DB = (0x80 | y); wait_us(100); EN = OFF; wait_us(100); wait_us(1000); RS = 0; RW = 0; wait_us(100); EN = ON; DB = 0x80; wait_us(100); EN = OFF; wait_us(100); } else { wait_us(1000); RS = 0; RW = 0; wait_us(100); EN = ON; DB = (0x80 | (y - 32)); wait_us(100); EN = OFF; wait_us(100); wait_us(1000); RS = 0; RW = 0; wait_us(100); EN = ON; DB = 0x88; wait_us(100); EN = OFF; wait_us(100); } for(int x = 0; x < 16; x++) { wait_us(1000); RS = 1; RW = 0; wait_us(100); EN = ON; DB = 0x00; wait_us(100); EN = OFF; wait_us(20); } } //desenhando uma linha de tamanho T em Y, com X offset unsigned char X = 0; // 0 até 7 unsigned char Y = 0; // 0 até 31 unsigned int T = 5; // 1 até 256 wait_us(1000); RS = 0; RW = 0; wait_us(100); EN = ON; DB = 0x80 | Y; wait_us(100); EN = OFF; wait_us(100); wait_us(1000); RS = 0; RW = 0; wait_us(100); EN = ON; DB = 0x80 | X; wait_us(100); EN = OFF; wait_us(100); for(int i = 0; i < (T / 8); i++) { wait_us(1000); RS = 1; RW = 0; wait_us(100); EN = ON; DB = (255); wait_us(100); EN = OFF; wait_us(20); } if(T%8 != 0) { int T_rest = T - ((T / 8) * 8); int bus_rest; switch (T_rest) { case 1: bus_rest = 0x80; break; case 2: bus_rest = 0xC0; break; case 3: bus_rest = 0xE0; break; case 4: bus_rest = 0xF0; break; case 5: bus_rest = 0xF8; break; case 6: bus_rest = 0xFC; break; case 7: bus_rest = 0xFE; break; } pc.printf("%x\n\r",bus_rest); wait_us(1000); RS = 1; RW = 0; wait_us(100); EN = ON; DB = bus_rest; // tem que ser 254 no exemplo de T 255 wait_us(100); EN = OFF; wait_us(20); } pc.printf("teste 11 \n\r"); while(1) { } }