István Cserny
/
Lab05_ST7585_test
main.cpp
- Committer:
- cspista
- Date:
- 2021-12-16
- Revision:
- 0:f89c213df477
File content as of revision 0:f89c213df477:
#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 DigitalOut SCK_pin(D13); // SPI clock DigitalOut SDI_pin(D11); // SPI MOSI DigitalOut DC_pin(D10); // Data/command selector DigitalOut RST_pin(D9); // HW Reset DigitalOut CS_pin(D8); // SPI chip select void LCDShiftWrite(unsigned char dat) { unsigned char i; unsigned char Series,Temp; SCK_pin = false; Series = dat; for(i=0; i<8; i++) { SCK_pin = false; Temp=Series & 0x80; if(Temp) { SDI_pin = true; } else { SDI_pin = false; } SCK_pin = true; Series = Series << 1; } } void send_cmd(unsigned char cmd, unsigned char dat) { DC_pin = false; //digitalWrite(RSX,LOW); CS_pin = false; //digitalWrite(CSX,LOW); LCDShiftWrite(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); LCDShiftWrite(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() { LCDInit(); 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(); } }