完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我发现我存的目录名称是小写字母,可是在显示屏显示出来的却是大写字符!!!!综合实验的源程序的电子书部分也是如此,比如readme.txt 在TFT上显示就是README.TXT了........我换过两张SD卡都是这样。
还有我的程序显示不了中文的目录名称,可是却能显示txt文档里面的中文......还有浏览目录时,只能浏览文件夹和.TXT .FON,可是.JPG却不行.........请高手帮看看,下面付上重点程序Show_Str()直接用原子源代码 //打开文件 //aa:所要到开文件夹的开始簇 void opencon(DWORD aa) { FileInfoStruct *file; u16 i; file=&F_Info[0];filenum=0;txtnum=0; Get_File_Info(aa,file,T_FILE,&filenum); //找出文件夹个数 Get_File_Info(aa,file,T_TXT|T_JPG|T_FON,&txtnum); //找出.txt.jpg.fon个数 totalnum=filenum+txtnum; if(totalnum>8) totalnum=8; //最多只能显示8个 for(shownum=1;shownum file=&F_Info[shownum-1]; Get_File_Info(aa,file,T_FILE,&shownum); } for(;shownum i++; file=&F_Info[shownum-1]; Get_File_Info(aa,file,T_TXT|T_JPG|T_FON|T_BMP,&i); } for(shownum=0;shownum Show_Str(90,20+32*shownum,F_Info[shownum].F_Name,16,0); //显示中文时候出错 乱码 printf("%sn",F_Info[shownum].F_Name); if(shownum } } #define FSIZE 16 void read_txt(FileInfoStruct *file) { u16 pointpos=0; //指针位置 u16 x=0,y=0; u8 *p=0; //指向txt文件 u8 temp[2]={0,0}; //换扇区使用 u8 bHz=0; //字符或者中文 if((file->F_Type&(T_LRC|T_TXT|T_C|T_H))==0)return;//不是TXT类型的文件 F_Open(file);//打开文件 LCD_Clear(WHITE);//清屏 POINT_COLOR=DARKBLUE;//深蓝色字体 F_Read(file,fat_buffer);//读取数据 p=fat_buffer; //指向txt数据首地址 while(*p!=0)//数据未结束 { if(!bHz) { if(*p>0x80)bHz=1;//中文字符 else //ASCII字符 { if(x>(240-FSIZE/2)){y+=FSIZE;x=0;}//一行已满,换行 if(y>(320-FSIZE))break;//越界返回 if(*p==13)//换行符号 { y+=FSIZE; x=0; p++;pointpos++;//跳过 } else LCD_ShowChar(x,y,*p,FSIZE,1); p++;pointpos++; x+=FSIZE/2; //字符,为全字的一半 } }else { bHz=0;//清除汉字标志 if(x>(240-FSIZE)){y+=FSIZE;x=0;}//换行 if(y>(320-FSIZE))break;//越界返回 //临界处理 if(pointpos==511)//保存上一扇区的最后一个字节,退出 { temp[0]=*p; //记录最后的字节 break; //此扇区数据已经读完 } if(temp[0])//上一次没有显示完 { temp[1]=*p;//取第二扇区的第一个字节 Show_Font(x,y,temp,16,1); //显示这个汉字,空心显示 p++;pointpos++;//偏移一个字节 temp[0]=0; //清除标记 }else Show_Font(x,y,p,16,1); //显示这个汉字,空心显示 p+=2;pointpos+=2; //指针偏移 x+=FSIZE; //下一个汉字偏移 } if(pointpos>511)break; } pointpos=0;//清除指针计数器 while(1) //打开txt文档后等待key0键退出浏览文档(暂时无翻页功能) { if(KEY0==0) { while(KEY0==0); LCD_Clear(WHITE); opencon(Fat_Dir_Cluster); //打开上层目录(父目录)在CopyDirentruyItem修改 return; } } } int main(void) { u8 i; STM32_Clock_Init(9);//系统时钟设置 delay_init(72); //延时初始化 uart_init(72,9600); //串口1初始化 LCD_Init(); //初始化液晶 LED_Init(); //LED初始化 KEY_Init(); SPI_Flash_Init(); //SPI FLASH初始化 RTC_Init(); OINT_COLOR=RED; if(SD_Init()) LCD_ShowString(60,20,"SD ERROR"); else LCD_ShowString(60,20,"SD OK!!"); if(FAT_Init()) LCD_ShowString(60,40,"FAT ERROR"); else LCD_ShowString(60,40,"FAT OK!!"); if(Font_Init()) LCD_ShowString(60,60,"FONT ERROR"); else LCD_ShowString(60,60,"FONT OK!!"); delay_ms(500);delay_ms(500); LCD_Clear(WHITE); opencon(FirstDirClust); //打开根目录 while(1) { if(KEY0==0) //光标进行 目标选择 { while(KEY0==0); LCD_Fill(5,20+(keynum-1)*32,38,52+keynum*32,WHITE); if(keynum==totalnum) keynum=0; LCD_ShowString(7,20+32*keynum,"->"); keynum++; } if(KEY1==0) //打开选择的目标 { while(KEY1==0); LCD_Clear(WHITE); if(F_Info[keynum-1].F_Attr!=0x20) //打开文件夹 opencon(F_Info[keynum-1].F_StartCluster); else { read_txt(&F_Info[keynum-1]); //打开txt文档 } keynum=0; //光标从头开始 } delay_ms(10); i++; if(i>=40) { LED0=!LED0; i=0; } } } |
|
相关推荐
1个回答
|
|
是fat文件系统的问题.短文件名就是大写的!电脑有另外一套处理方法,fatfs也有.不过我们的文件系统没做处理,所以你看到文件名字符数小于等于8个的都是大写.
中文目录名是可以的,具体参考我们的代码. |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1641 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1562 浏览 1 评论
988 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
691 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1608 浏览 2 评论
1869浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
655浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
525浏览 3评论
540浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
512浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-25 23:34 , Processed in 0.686585 second(s), Total 48, Slave 41 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号