Test of an ST7585 driven mochrome LCD (96 x 64 + icons) by using a hardware SPI module
Embed:
(wiki syntax)
Show/hide line numbers
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
Generated on Fri Jun 2 2023 07:59:36 by
1.7.2