Dependencies:   mbed

main.cpp

Committer:
cspista
Date:
2021-12-16
Revision:
0:3282b6c2db94

File content as of revision 0:3282b6c2db94:

#include "mbed.h"
#include "bitmap.h"

#define NOP                 0x00
#define Function_Set        0x20
#define Display_Control     0x08
#define Set_Y_Address       0x40
#define Set_X_Address       0x80
#define Set_V0              0x80
#define Set_Test_Mode       0x30
// The default settings of the SPI interface are 1MHz, 8-bit, Mode 0.
SPI spi(D11, D12, D13);    // Arduino compatible MOSI, MISO, SCLK
DigitalOut DC_pin(D10);    // Data/command selector
DigitalOut RST_pin(D9);    // HW Reset
DigitalOut CS_pin(D8);     // SPI chip select


void send_cmd(unsigned char cmd, unsigned char dat)
{
    DC_pin = false; //digitalWrite(RSX,LOW);
    CS_pin = false; //digitalWrite(CSX,LOW);
    spi.write(cmd|dat);
    CS_pin = true;  //digitalWrite(CSX,HIGH);
    DC_pin = true;  //digitalWrite(RSX,HIGH);
}

void send_dat(unsigned char dat)
{
    DC_pin = true;  //digitalWrite(RSX,HIGH);
    CS_pin = false; //digitalWrite(CSX,LOW);
    spi.write(dat);
    CS_pin = true;  //digitalWrite(CSX,HIGH);
}


void LCDInit()
{
    RST_pin = false; //digitalWrite(RESX,LOW);
    wait_ms(10);
    RST_pin = true;  //digitalWrite(RESX,HIGH);
    wait_ms(100);
    send_cmd(Function_Set,0x01);
    send_cmd(Set_V0,0x20);
    send_cmd(Set_Test_Mode,0x02);
    send_cmd(Function_Set,0x00);
    send_cmd(Display_Control,0x04);
}

void LCD_set_XY(unsigned char x,unsigned char y)
{
    send_cmd(Set_X_Address,x);
    send_cmd(Set_Y_Address,y);
}

void cls(void)
{
    int i;
    send_cmd(Set_X_Address,0);
    send_cmd(Set_Y_Address,0);
    for(i=0; i<960; i++)
        send_dat(0x00);
    send_cmd(Set_X_Address,0);
    send_cmd(Set_Y_Address,0);
}

void putch(unsigned char x, unsigned char y, unsigned int ch)
{
    unsigned char i;
    send_cmd(Set_X_Address,x);
    send_cmd(Set_Y_Address,y);
    for(i=0; i<5; i++)
        send_dat(FONT[(ch-0x20)*5+i]);
}

void putstr(unsigned char x, unsigned char y, char *str)
{
    while(*str!=0) {
        putch(x,y,*str++);
        x=x+6;
    }
}

void SHOW_BMP()
{
    unsigned int i,j,n=0;
    for(i=0; i<8; i++) {
        for(j=0; j<96; j++) {
            send_cmd(Set_Y_Address,7-i);
            send_cmd(Set_X_Address,j);
            send_dat(BMP[n++]);
        }
    }
}

void SHOW_ICO()
{
    unsigned char i;
    for(i=0; i<96; i++) {
        send_cmd(Set_Y_Address,8);
        send_cmd(Set_X_Address,i);
        send_dat(0xFF);
    }
}

void SHOW_LINE()
{
    unsigned int i,j;
    const unsigned char line[8] = {
        0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80
    };
    for(i=0; i<8; i++) {
        send_cmd(Set_Y_Address,7-i);
        for(j=0; j<8; j++) {
            send_cmd(Set_X_Address,j+8*i);
            send_dat(line[j]);
        }
    }
}

int main()
{
    spi.frequency(5000000);    // 5 Mhz clock
    spi.format(8,0);           // 8bits, mode 0
    LCDInit();
    cls();


    while(1) {
        SHOW_ICO();
        putstr(30,5,"ST7585");
        putstr(15,3,"96*64 GLCD");
        putstr(10,1,"ARM Mbed demo");
        wait_ms(5000);
        cls();
        SHOW_LINE();
        wait_ms(5000);
        cls();

        SHOW_BMP();
        wait_ms(5000);
        cls();
    }
}