?? txt.h
字號:
#ifndef _TXT_INCLUDED_
#define _TXT_INCLUDED_
#include "fat.h"
//正點原子@scut 08/09/11
//實現功能:閱讀TXT文件
//文本文件讀取程序
//check ok 08/09/04
//實現功能:把文件 m_c[fpos] 打開.在液晶上顯示出來
void Read_Book(uchar fpos)//打開txt文件
{
unsigned long bfactor=0;//文件的扇區
unsigned long bclust=0;
uchar count=0; //扇區計數器
uint pointpos=0; //指針位置
unsigned long offlenth=0;//文件讀取的大小
uchar x=0,y=0;
uchar *p=0; //指向txt文件
uchar temp[2]={0,0}; //換扇區使用
bit bHz=0; //字符或者中文
unsigned char mat[24]; //保存12X12點陳內容
bclust=m_c[fpos].Clust;
bfactor=fatClustToSect(bclust);
Cleardisplay(4);//第一次進入,清屏
keyval=0;//清除鍵值
while(1)
{
ReadBlockToBuff(bfactor,pbuffer);//讀取文本到pbuffer
p=pbuffer;//指向txt數據首地址
do
{
while(*p!=0)//數據未結束
{
if(!bHz)
{
if(*p>0x80)bHz=1;//中文
else //字符
{
if(y>125){x++;y=0;}//一行已滿,換行
if(x>3)break;//越界返回
if(*p==13)//換行符號
{
x++;y=0;
p++;pointpos++;//跳過
}
else Show_char(x,y,*p);
p++;pointpos++;
y+=6;
}
}else
{
bHz=0;//有漢字庫
if(y>119){x++;y=0;}//換行
if(x>3)break;//越界返回
//臨界處理
if(pointpos==511)//保存上一扇區的最后一個字節,退出
{
temp[0]=*p; //記錄最后的字節
break; //此扇區數據已經讀完
}
if(temp[0])//上一次沒有顯示完
{
temp[1]=*p;//取第二扇區的第一個字節
Get_HzMat(temp,mat);//顯示上一次的最后一個字 (無字庫不起動系統)
p++;pointpos++;//偏移一個字節
temp[0]=0; //清除標記
}
else Get_HzMat(p,mat);//得到點陣數據 (無字庫不起動系統)
Show_font(x,y,mat);
p+=2;pointpos+=2;//指針偏移
y+=12;
}
if(pointpos>511)break;
}
if(pointpos>=511)break;//一個扇區讀取完畢,直接跳出,讀下一個扇區,防止停頓
while(1)
{
if(READY)keyval=key_process();
if(keyval==NEXT)
{
if(offlenth+pointpos+1>=m_c[fpos].FileLen){keyval=0;return ;}//文件讀取結束(長度結束)
if(x>3){x=0;y=0;Cleardisplay(4);}//非結尾返回,屏幕已滿,清屏
keyval=0;
break;
}
if(keyval==QUIT){keyval=0;return;}
keyval=0;//清除按鍵鍵值
}
}while(pointpos<511);
offlenth+=pointpos+1;//文件長度累加
pointpos=0;//清除指針計數器
count++; //扇區計數器加一
bfactor++; //扇區加
if(count>=SectorsPerCluster)
{
count=0;
bclust=fatNextCluster(bclust);
if(bclust==0x00)break;//讀取完畢
bfactor=fatClustToSect(bclust);
}
}
}
#endif
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -