István Cserny
/
Lab05_ST7585_SPI
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(); } }