上面的电路很简单: 我们所要做的就是找一个SD卡座,按照我提供的SD卡接线图找到那6个脚,对应焊接到开发板即可。
二、代码移植 zhaojun_xf已经提供了SD的FAT的程序,他用的是LPC1114开发板。LPC1114和LPC1343在C代码里面管脚命名一样,SSP的寄存器的命名也一样。 1、直接把他提供的源程序里的相关文件直接复制到我们的项目里:SSP.C, SSP.H, SD.C, SD.H, FF.C, FF.H, DISKIO.C DISKIO.H, APP.C, APP.H, INTEGER.H, FFCONF.H, CONFIG.H, GPIO.C, GPIO.H。 2、在CONFIG.H文件里找到#include "LPC11xx.h" 改为:#include "LPC13xx.h"。 3、在我们需要引用的项目文件里(例如我的项目主程序是usbhidrom_main.c)添加#include "app.h"。 4、试一试修改的程序编译是否通过,根据情况再做修改。我没有碰到什么困难,编译通过了。 5、以后在项目文件就可以通过调用app.h定义好的那些文件读、写、删除等函数,实现对SD卡的文件的操作。 6、我这里要实现:读SD卡的BMP文件,然后将图形数据写到OLED屏显示。不需要写到UART串口,所以没有拷贝UART.C, UART.H文件。 7、对APP.C的读文件函数做修改,读SD卡的BMP文件,然后将图形数据写到OLED屏显示。 图形都是128*128分辨率的,24位真彩,为*.bmp文件。 每个*.bmp文件都有BMP文件头,我们只是显示,不需要仔细分析BMP文件头,所以在AppFileRead()里直接略过54字节BMP文件头,逐点读取24位真彩数据写到OLED显示。 /************************************************************************************** * FunctionName : AppFileRead() * Description : 读取文件 * EntryParameter : fileName - 需要读取的文件名或路径 * ReturnValue : 成功返回-0;失败返回-1 **************************************************************************************/ uint8_t AppFileRead(const TCHAR *fileName) { FATFS fs; /*Work area (file system object) for logical drive*/ FIL file; /*file objects*/ UINT br,ii=0; /*File R/W count*/
/*Register a work area for logical drive 0*/ f_mount(0, &fs);
/*Create file*/ if(f_open(&file, fileName, FA_READ)) { return 0; } else { //OLED屏幕写屏方式 cmd(0x05); data(0x02);
cmd(0x0A); //指定对OLED全屏幕写屏 data(0); data(0x00); // data(7); data(0x0f); //15 data(2); data(0x00); //64 //D-IC Change : 128128 IC -> 128160 IC data(9); data(0x0F); //127 cmd(0x0C); do { AppClearBuffer(0x00); // 缓冲清零 if(f_read(&file, Buffer, BUFFER_SIZE, &br)) { return 0; } else { //UARTSendString((const CHAR *)Buffer); // UART发送读取文件,我们不需要,注释掉 int i; for(i=0;i<br;i=i+3) { if (ii>=54) //丢掉我们不需要的BMP文件头,一共54个字节 { data(Buffer[i+2]>>2); //写到OLED,红色 data(Buffer[i+1]>>2); //写到OLED,绿色 data(Buffer>>2); //写到OLED,蓝色 } ii+=3; } } } while (br); // 判断是否读完(br == 0,表示读取完成)
/*Close all files*/ f_close(&file); // 关闭文件,必须和f_open函数成对出现 //write direction cmd(0x05); data(0x00); }
/*Unregister a work area before discard it*/ f_mount(0, 0);
return ii; }
[ 本帖最后由 zhdphao 于 2010-6-19 08:53 编辑 ] |