Test of an ST7585 driven mochrome LCD (96 x 64 + icons) by using a hardware SPI module

Dependencies:   mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "mbed.h"
00002 #include "bitmap.h"
00003 
00004 #define NOP                 0x00
00005 #define Function_Set        0x20
00006 #define Display_Control     0x08
00007 #define Set_Y_Address       0x40
00008 #define Set_X_Address       0x80
00009 #define Set_V0              0x80
00010 #define Set_Test_Mode       0x30
00011 // The default settings of the SPI interface are 1MHz, 8-bit, Mode 0.
00012 SPI spi(D11, D12, D13);    // Arduino compatible MOSI, MISO, SCLK
00013 DigitalOut DC_pin(D10);    // Data/command selector
00014 DigitalOut RST_pin(D9);    // HW Reset
00015 DigitalOut CS_pin(D8);     // SPI chip select
00016 
00017 
00018 void send_cmd(unsigned char cmd, unsigned char dat)
00019 {
00020     DC_pin = false; //digitalWrite(RSX,LOW);
00021     CS_pin = false; //digitalWrite(CSX,LOW);
00022     spi.write(cmd|dat);
00023     CS_pin = true;  //digitalWrite(CSX,HIGH);
00024     DC_pin = true;  //digitalWrite(RSX,HIGH);
00025 }
00026 
00027 void send_dat(unsigned char dat)
00028 {
00029     DC_pin = true;  //digitalWrite(RSX,HIGH);
00030     CS_pin = false; //digitalWrite(CSX,LOW);
00031     spi.write(dat);
00032     CS_pin = true;  //digitalWrite(CSX,HIGH);
00033 }
00034 
00035 
00036 void LCDInit()
00037 {
00038     RST_pin = false; //digitalWrite(RESX,LOW);
00039     wait_ms(10);
00040     RST_pin = true;  //digitalWrite(RESX,HIGH);
00041     wait_ms(100);
00042     send_cmd(Function_Set,0x01);
00043     send_cmd(Set_V0,0x20);
00044     send_cmd(Set_Test_Mode,0x02);
00045     send_cmd(Function_Set,0x00);
00046     send_cmd(Display_Control,0x04);
00047 }
00048 
00049 void LCD_set_XY(unsigned char x,unsigned char y)
00050 {
00051     send_cmd(Set_X_Address,x);
00052     send_cmd(Set_Y_Address,y);
00053 }
00054 
00055 void cls(void)
00056 {
00057     int i;
00058     send_cmd(Set_X_Address,0);
00059     send_cmd(Set_Y_Address,0);
00060     for(i=0; i<960; i++)
00061         send_dat(0x00);
00062     send_cmd(Set_X_Address,0);
00063     send_cmd(Set_Y_Address,0);
00064 }
00065 
00066 void putch(unsigned char x, unsigned char y, unsigned int ch)
00067 {
00068     unsigned char i;
00069     send_cmd(Set_X_Address,x);
00070     send_cmd(Set_Y_Address,y);
00071     for(i=0; i<5; i++)
00072         send_dat(FONT[(ch-0x20)*5+i]);
00073 }
00074 
00075 void putstr(unsigned char x, unsigned char y, char *str)
00076 {
00077     while(*str!=0) {
00078         putch(x,y,*str++);
00079         x=x+6;
00080     }
00081 }
00082 
00083 void SHOW_BMP()
00084 {
00085     unsigned int i,j,n=0;
00086     for(i=0; i<8; i++) {
00087         for(j=0; j<96; j++) {
00088             send_cmd(Set_Y_Address,7-i);
00089             send_cmd(Set_X_Address,j);
00090             send_dat(BMP[n++]);
00091         }
00092     }
00093 }
00094 
00095 void SHOW_ICO()
00096 {
00097     unsigned char i;
00098     for(i=0; i<96; i++) {
00099         send_cmd(Set_Y_Address,8);
00100         send_cmd(Set_X_Address,i);
00101         send_dat(0xFF);
00102     }
00103 }
00104 
00105 void SHOW_LINE()
00106 {
00107     unsigned int i,j;
00108     const unsigned char line[8] = {
00109         0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80
00110     };
00111     for(i=0; i<8; i++) {
00112         send_cmd(Set_Y_Address,7-i);
00113         for(j=0; j<8; j++) {
00114             send_cmd(Set_X_Address,j+8*i);
00115             send_dat(line[j]);
00116         }
00117     }
00118 }
00119 
00120 int main()
00121 {
00122     spi.frequency(5000000);    // 5 Mhz clock
00123     spi.format(8,0);           // 8bits, mode 0
00124     LCDInit();
00125     cls();
00126 
00127 
00128     while(1) {
00129         SHOW_ICO();
00130         putstr(30,5,"ST7585");
00131         putstr(15,3,"96*64 GLCD");
00132         putstr(10,1,"ARM Mbed demo");
00133         wait_ms(5000);
00134         cls();
00135         SHOW_LINE();
00136         wait_ms(5000);
00137         cls();
00138 
00139         SHOW_BMP();
00140         wait_ms(5000);
00141         cls();
00142     }
00143 }
00144