#include "mcc_generated_files/mcc.h"
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include "myProject.h"
#include "QT095B.h"
#include "spi_Mem0.h"
#define OLED_BF_SIZE 80
enum { NON = 0, TXT, CSV, BIN = 8, BMP };
FRESULT result;
FATFS drive;
FIL file;
char FilNam[16] = "FLOWER.BMP";
uint8_t F_ext = BMP;
uint16_t Length[2];
char Buffer[192];
char Msg[40];
char msg2[]="=== SD Test ===";
uint8_t tMode = 1;
uint8_t tFlag;
uint16_t Counter;
char RBuf[EU_BFSIZE];
uint8_t SFlg;
uint8_t CrtLn = 0;
uint8_t gBf[OLED_BF_SIZE];
char msg1[] = "Test QT095B";
void TMR0_Process(void){
tFlag = 1;
}
FRESULT SD_Mount(void){
uint8_t ct = 10;
FRESULT res;
do{
res = f_mount(&drive,"0:",1);
EUSART_Write('.');
}while((res != FR_OK) && ct--);
if(res != FR_OK){
EU_Puts("** SD Not Mounted !!");
}else{
EU_Puts("SD Mount OK!");
LED_SetHigh();
}
return res;
}
void SD_All_Close(void){
f_close(&file);
f_mount(0, "0:", 0);
EU_Puts("closed & Un_Mounted");
LED_SetLow();
}
void SD_cmd_T(void){
EU_Puts("Start Command T");
gCS_SetHigh();
if(SD_Mount() == FR_OK){
__delay_ms(2000);
f_mount(0, "0:", 0);
EU_Puts("Un_Mounted");
}
LED_SetLow();
}
void SD_cmd_R(void){
FRESULT res;
if(F_ext != TXT){
sprintf(Msg,"%s is not Text File!",FilNam);
EU_Puts(Msg);
return;
}
EU_Puts("Start Command R");
if(SD_Mount() == FR_OK){
res = f_open(&file, FilNam, FA_READ);
if(res == FR_OK){
sprintf(Msg,"Open %s",FilNam);
EU_Puts(Msg);
do{
f_read(&file, Buffer, 64, (UINT *)Length);
Buffer[Length[0]] = 0;
EU_Puts(Buffer);
}while(Length[0]!=0);
}else{
sprintf(Msg,"** Can't open %s !!",FilNam);
EU_Puts(Msg);
}
SD_All_Close();
}
}
void SD_cmd_W(void){
FRESULT res;
EU_Puts("Start Command W");
if(SD_Mount() == FR_OK){
res = f_open(&file, FilNam, FA_WRITE | FA_OPEN_APPEND);
if(res == FR_OK){
sprintf(Msg,"Open %s",FilNam);
EU_Puts(Msg);
sprintf(Msg, "%07d,", Counter);
f_write(&file, Msg, 8, (UINT *)Length);
EU_Puts(Msg);
}else{
sprintf(Msg,"** Can't open %s !!",FilNam);
EU_Puts(Msg);
}
SD_All_Close();
}
}
void SD_cmd_F(char *str){
size_t i,n;
char *p;
n = strlen(str);
if(n > 1){
if(n > 12) n = 12;
for(i = 0; i < n; i++)
FilNam[i] = (char)toupper(str[i+1]);
FilNam[n]=0;
}
p = strchr(FilNam,'.');
if (strncmp(p+1,"TXT",3)==0) F_ext = TXT;
else if(strncmp(p+1,"CSV",3)==0) F_ext = CSV;
else if(strncmp(p+1,"BIN",3)==0) F_ext = BIN;
else if(strncmp(p+1,"BMP",3)==0) F_ext = BMP;
else F_ext = NON;
sprintf(Msg,"NewFileName = %s: %d\n",FilNam,F_ext);
EU_Puts(Msg);
}
void SD_cmd_D(void){
FRESULT res;
uint8_t i, n;
uint32_t adr = 0x40000;
EU_Puts("Start Command D");
if(SD_Mount() == FR_OK){
res = f_open(&file, FilNam, FA_READ);
if(res == FR_OK){
sprintf(Msg,"Open %s",FilNam);
EU_Puts(Msg);
do{
f_read(&file, Buffer, 192, (UINT *)Length);
n = (uint8_t)Length[0];
SSPEN_ON();
for(i = 0; i < n; i++){
SPI_Mem_Write(adr++, Buffer[i]);
}
EUSART_Write('.');
SSPEN_OFF();
}while(Length[0]!=0);
EU_Write_CR();
}else{
sprintf(Msg,"** Can't open %s !!",FilNam);
EU_Puts(Msg);
}
SD_All_Close();
}
}
void SD_cmd_V(void){
uint8_t c[2];
uint16_t j;
uint32_t adr = 0x40000 + 138;
SSPEN_ON();
gSetMode(COLOR64K2,0);
gRstArea();
gDC_SetHigh();
for(j=0; j<6144; j++){
c[0]= SPI_Mem_Read(adr++);
c[1]= SPI_Mem_Read(adr++);
gCS_SetLow();
SPI_EXCHG(c[1]);
SPI_EXCHG(c[0]);
gCS_SetHigh();
}
SSPEN_OFF();
}
void SD_cmd_P(char *str){
uint8_t xpos;
SSPEN_ON();
gSetMode(COLOR256,0);
if(strlen(str)==1){
gOLED_ZchrX( 2,2,0x692C,gRGB256(7,7,0),2,0);
gOLED_ZchrX(78,2,0x692F,gRGB256(7,7,0),2,0);
}else{
xpos = gOLED_strX(20,54,str+1,gRGB256(0,7,7),0);
}
gSetMode(COLOR256,0);
gRstArea();
SSPEN_OFF();
}
void QT_cmd_G(char *str){
SSPEN_ON();
if(strlen(str) > 1){
switch(str[1]){
case '1': QT095B_Test1(); break;
case '2': QT095B_Test2(); break;
case '3': QT095B_Test3(); break;
}
}else{
QT095B_Test1();
}
SSPEN_OFF();
}
void QT_cmd_C(void){
SSPEN_ON();
gOLED_Clr(0,0,95,63);
SSPEN_OFF();
}
void sM_cmd_K(char *str){
SSPEN_ON();
gOLED_strX(0,0,str,gRGB256(7,7,0),0);
spiMem_cmd_K(str);
SSPEN_OFF();
}
void sM_cmd_L(char *str){
SSPEN_ON();
gOLED_strX(0,0,str,gRGB256(7,7,0),0);
spiMem_cmd_L(str);
SSPEN_OFF();
}
void sM_cmd_U(char *str){
SSPEN_ON();
gOLED_strX(0,0,str,gRGB256(7,7,0),0);
spiMem_cmd_U(str);
SSPEN_OFF();
}
void ck_SSP(void){
uint8_t a,b,c;
a = SSP2STAT;
b = SSP2CON1;
c = SSP2CON3;
sprintf(Msg,"%02X %02X %02X",a,b,c);
EU_Puts(Msg);
}
void main(void){
char cmd;
SYSTEM_Initialize();
SSPEN_ON();
SSD1331_Init();
SSPEN_OFF();
TMR0_SetInterruptHandler(TMR0_Process);
INTERRUPT_GlobalInterruptEnable();
INTERRUPT_PeripheralInterruptEnable();
EU_Puts(msg2);
SSPEN_ON();
gOLED_strX(0,0,msg2,gRGB256(7,7,7),1);
SSPEN_OFF();
while(1){
if(tFlag == 1){
LED_Toggle();
tFlag = 0;
if(tMode == 0){
sprintf(Msg,"Counter = %05d",Counter++);
EU_Puts(Msg);
}
}
if(SFlg){
cmd = RBuf[0];
sprintf(Msg,"Input = %s\n",RBuf);
EU_Puts(Msg);
switch(cmd){
case 'X': tMode ^= 1; break;
case 'C': QT_cmd_C(); break;
case 'G': QT_cmd_G(RBuf); break;
case 'T': SD_cmd_T(); break;
case 'R': SD_cmd_R(); break;
case 'W': SD_cmd_W(); break;
case 'F': SD_cmd_F(RBuf); break;
case 'D': SD_cmd_D(); break;
case 'V': SD_cmd_V(); break;
case 'P': SD_cmd_P(RBuf); break;
case 'U': sM_cmd_U(RBuf); break;
case 'K': sM_cmd_K(RBuf); break;
case 'L': sM_cmd_L(RBuf); break;
default: EU_Puts("???"); break;
}
SFlg = 0;
}
}
}
|