Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: dsf SDFileSystem TextLCD mbed stepper_moter
Fork of my_example_Nucleo_Ex05_SD_zhangyuxiang2 by
Revision 4:c88bf297ee75, committed 2018-05-08
- Comitter:
- brainliang
- Date:
- Tue May 08 01:50:44 2018 +0000
- Parent:
- 3:1e51c10aa4f2
- Commit message:
- sdfa
Changed in this revision
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/LCDShow/LCDShow.cpp Tue May 08 01:50:44 2018 +0000
@@ -0,0 +1,116 @@
+#include "LCDShow.h"
+
+LCDShow::LCDShow(PinName rs,PinName e,PinName d4,PinName d5,PinName d6,PinName d7,LCDType type):TextLCD(rs,e,d4,d5,d6,d7,type)
+{
+ Max_pos = PrePos = now_pos = 0;
+ start = true;
+ Pos_fresh = false;
+ Neg_fresh = false;
+ Now_fresh = false;
+ Read_file = false;
+}
+void LCDShow::CurrPos()
+{
+ int i = Choose.pulses_ % 4;
+ if(i < 0)
+ {
+ Choose.pulses_ = 0;
+ i = 0;
+ }
+ if(PrePos == 3 && i == 0)
+ {
+ Pos_fresh = true;
+ }
+ else if(PrePos == 0 && i == 3)
+ {
+ Neg_fresh = true;
+ }
+ else if(PrePos != i)
+ {
+ Now_fresh = true;
+ }
+
+ if(!Read_file)
+ {
+ PrePos = i;
+ this->locate(18,i);
+ this->printf("<-");
+ }
+}
+
+void LCDShow::ReadFile()
+{
+ if(!btn3.read())
+ {
+ file_name = "/sd/";
+ file_name += File_dir[now_pos + (PrePos - 4)];
+ Read_file = true;
+ }
+}
+void LCDShow::getDir(vector<string> _dir)
+{
+ File_dir = _dir;
+}
+void LCDShow::showdir()
+{
+ if(start)
+ {
+ t1.attach(this,&LCDShow::showdir,0.2);
+ t2.attach(this,&LCDShow::ReadFile,0.5);
+ Max_pos = File_dir.size();
+ for(;now_pos < 4; now_pos ++)
+ {
+ this->printf("%s\n",File_dir[now_pos]);
+ }
+ start = false;
+ return;
+ }
+ CurrPos();
+ if(!Read_file)
+ {
+ if(Pos_fresh == true)
+ {
+ this->cls();
+ for(int i = 0;i < 4; i ++)
+ {
+ if(now_pos >= Max_pos)
+ {
+ continue;
+ }
+ this->printf("%s\n",File_dir[now_pos]);
+ now_pos ++;
+ }
+ Pos_fresh = false;
+ }
+ else if(Neg_fresh == true)
+ {
+ this->cls();
+ now_pos -= 8;
+ if(now_pos < 0)
+ now_pos = 0;
+ for(int i = 0;i < 4; i ++)
+ {
+ this->printf("%s\n",File_dir[now_pos]);
+ now_pos ++;
+ }
+ Neg_fresh = false;
+ }
+ else if(Now_fresh == true)
+ {
+ this->cls();
+ now_pos -= 4;
+ for(int i = 0;i < 4; i ++)
+ {
+ this->printf("%s\n",File_dir[now_pos]);
+ now_pos ++;
+ }
+ Now_fresh = false;
+ }
+ }
+ else if(Read_file)
+ {
+ this->cls();
+ this->printf("OPEN %s\n",file_name);
+ }
+ return;
+}
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/LCDShow/LCDShow.h Tue May 08 01:50:44 2018 +0000
@@ -0,0 +1,37 @@
+#ifndef LCDSHOW_h
+#define LCDSHOW_h
+#include "mbed.h"
+#include "TextLCD.h"
+#include <vector>
+#include <string>
+#include "QEI.h"
+
+
+extern QEI Choose;
+extern InterruptIn btn3;
+
+class LCDShow:public TextLCD
+{
+public:
+ LCDShow(PinName rs,PinName e,PinName d4,PinName d5,PinName d6,PinName d7,LCDType type = LCD16x2);
+ void showdir();
+ void getDir(vector<string> _dir);
+ void CurrPos();
+ void ReadFile();
+ string file_name;
+ bool Read_file;
+private:
+ vector<string> File_dir;
+
+ int PrePos;
+ int now_pos;
+ int Max_pos;
+ Ticker t1;
+ Ticker t2;
+ bool start;
+ bool Pos_fresh;
+ bool Neg_fresh;
+ bool Now_fresh;
+};
+
+#endif
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/QEI.lib Tue May 08 01:50:44 2018 +0000 @@ -0,0 +1,1 @@ +https://os.mbed.com/users/brainliang/code/dsf/#3753789f4288
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/SDRead/SDRead.cpp Tue May 08 01:50:44 2018 +0000
@@ -0,0 +1,40 @@
+#include "SDRead.h"
+
+SDRead::SDRead(PinName mosi,PinName miso,PinName sclk,PinName cs,const char *name):SDFileSystem(mosi,miso,sclk,cs,name)
+{}
+bool SDRead:: Get_FileDir()
+{
+ this -> mount();
+ DirHandle *dh = opendir("/sd/");
+ if(!dh){
+ return false;
+ }
+ dirent *entry;
+ for(;;)
+ {
+ entry = dh -> readdir();
+ if(!entry)
+ {break;}
+ string dir_name = entry -> d_name;
+ if(dir_name == "System Volume Information")
+ continue;
+ File_dir.push_back(dir_name);
+ }
+ dh -> closedir();
+ return true;
+}
+bool SDRead::Read_File(const char* FileName)
+{
+ FILE *fp1 = fopen(FileName,"r");
+ if(fp1 == NULL)
+ {
+ return false;
+ }
+ char buf[200];
+ while(fgets(buf,sizeof(buf),fp1) != NULL)
+ {
+ string info = buf;
+ Info.push_back(info);
+ }
+ return true;
+}
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/SDRead/SDRead.h Tue May 08 01:50:44 2018 +0000
@@ -0,0 +1,17 @@
+#ifndef SDREAD_H
+#define SDREAD_H
+#include "SDFileSystem.h"
+#include "mbed.h"
+#include <vector>
+#include <string>
+
+class SDRead:public SDFileSystem
+{
+public:
+ SDRead(PinName mosi,PinName miso,PinName sclk,PinName cs,const char *name);
+ vector<string> File_dir;
+ vector<string> Info;
+ bool Get_FileDir();
+ bool Read_File(const char* FileName);
+};
+#endif
\ No newline at end of file
--- a/main.cpp Thu May 03 10:53:02 2018 +0000
+++ b/main.cpp Tue May 08 01:50:44 2018 +0000
@@ -1,86 +1,33 @@
#include "mbed.h"
-#include "TextLCD.h"
-#include "SDFileSystem.h"
+#include "SDRead.h"
+#include "LCDShow.h"
+
+QEI Choose(PB_5,PB_8, NC, 11, QEI::X2_ENCODING);
+InterruptIn btn3(PA_5);
//LCD显示屏 rs, e, d4-d7, model
-TextLCD lcd(PC_13, PC_14, PC_15, PA_0, PA_1, PA_4, TextLCD::LCD20x4); // rs, e, d4-d7, model V4版本
-
-//SD卡 mosi, miso, sclk, cs, name 用SPI端口
-SDFileSystem sd(PB_15, PB_14, PB_13, PB_12, "sd");
-Serial pc(PA_9, PA_10); //与电脑通讯的串口
+LCDShow lcd(PC_13, PC_14, PC_15, PA_0, PA_1, PA_4, TextLCD::LCD20x4); // rs, e, d4-d7, model V4版本 屏幕为4行,每行20字符(列)
+SDRead sd(PB_15, PB_14, PB_13, PB_12, "sd");
-int main() {
- DirHandle *dh = opendir("/sd/"); //读取SD卡中的文件列表
- if(!dh){
- pc.printf("opendir error\n");
- return 1;
- }
- dirent *entry;
- for(;;){
- entry = dh->readdir();
- if(!entry)
- break;
- pc.printf("%s\r\n", entry->d_name);
- }
- dh->closedir();
-
- // 写文件例子
- FILE *fp2 = fopen("/sd/write.txt", "w");
- if (fp2 == NULL)
+int main()
+{
+ sd.mount(); //加注释!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ while(1)
{
- pc.printf("open error2!!\r\n");
- return 1;
- }
- pc.printf("file opened for write\r\n");
- fprintf(fp2, "hello\r\n");
- fprintf(fp2, "%d", 23333);
- fclose(fp2); //写完文件要记得关闭,不然可能没保存上
-
- // 读文件例子
- FILE *fp = fopen("/sd/test.txt", "r"); //打开文件,路径以“/sd/”开头
-
- if (fp == NULL) //打开失败,原因可能是文件不存在,或卡没有连接好
- {
- pc.printf("open error!!\r\n");
- return 1;
+ if(sd.Get_FileDir()) //加注释!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ {
+ lcd.getDir(sd.File_dir); //加注释!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ lcd.showdir();//LCD显示文件目录
+ }
+ if(lcd.Read_file) //加注释!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ {
+ if(sd.Read_File(lcd.file_name.data()))
+ {
+ for(int i = 0; i < sd.Info.size(); i++)//sd.Info 就是读取到的文件信息向量
+ {
+ printf("%s\n",sd.Info[i]);
+ }
+ }
+ }
}
- pc.printf("file opened for read\r\n");
- char buf[64];
- while (fgets(buf, sizeof(buf), fp) != NULL) //读入一行的C函数
- {
- pc.printf("%s", buf);
- }
- fclose(fp); //关闭文件,释放资源
-
- //pc.printf("card type is 0x%x\r\n" , sd.card_type());
-
- return 0;
-
-
- lcd.printf("Hello World!");
- wait_ms(1000); //等待1秒
- lcd.cls(); //清屏
-
- for(int i=0; i<10000; i+=4){
- lcd.locate(0,0); //分别控制起始的列和行,从0开始
- lcd.printf("%d", i);
- wait_ms(1000); //等待1秒
-
- lcd.locate(0,1);
- lcd.printf("%d", i+1);
- wait_ms(1000);
-
- lcd.locate(0,2);
- lcd.printf("%d", i+2);
- wait_ms(1000);
-
- lcd.locate(0,3);
- lcd.printf("%d", i+3);
- wait_ms(1000);
-
- lcd.cls(); //清屏
- }
-
-
-
-}
+}
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/stepper_moter.lib Tue May 08 01:50:44 2018 +0000 @@ -0,0 +1,1 @@ +https://os.mbed.com/users/brainliang/code/stepper_moter/#ab0f997c2d9c
