📄 txt.h~
字号:
#ifndef _TXT_INCLUDED_
#define _TXT_INCLUDED_
#include "fat.h"
//文本文件读取程序
//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 + -