📄 main.c
字号:
x++;
}
}
//======================================================================================================
//语法格式: void ReadDisplay(void)
//功能:液晶显示
//参数:无
//返回值:无
//日期:2005.04.06
//======================================================================================================
void ReadDisplay(void)
{
char *string1 = "person"; //定义两个书名
char *string2 = "business";
char *TPage1 = "002"; //定义两本书的总页码
char *TPage2 = "003";
char *StrPtr;
unsigned int ch[10];
char pn[4] = {'0','0','0','\0'} ; //定义两个一维数组存放页码和书码
char bn[3] = {'0','0','\0'};
char str[20][21]; //定义一个数组处理显示文字
char word[20]; //定义一个数组存放一个单词
int i=0,j,m=0;
int a,b,c,r1,r2;
int length = 98;
int line = 0;
int Flag_end = 0;
int n = 0;
pn[0] = (int)(pno)/10 + '0'; //把页码换算成个、十、百位的数存放在数组中
pn[1] = (int)(pno)/10%10 + '0';
pn[2] = (int)(pno)%10 + '0';
bn[0] = (int)(bno)/10 + '0';
bn[1] = (int)(bno)%10 + '0';
for(i=0;i<400;i++)
{
if(string[i] == '\0') //清空数组中没有存放数据的单元
{
for(j=i;j<400;j++)
string[j] = 0x0000;
}
}
i = 0;
length = 98;
while(string[i]&&line<20)
{
for(j=0;j<20&&(Flag_end == 0);j++) //开始按单词存放文本
{
a = 0;
b = 0;
c = 0;
if(string[i]>='A'&&string[i]<='Z') //大写字母时位长度减8
{
length-=8;
a++;
}
else if(string[i]>='a'&&string[i]<='z'&&string[i]!='i'&&string[i]!='l')
{
length-=6; //除“i"和"l"之外的小写字母位长度减6
b++;
}
else if(string[i] == 'i'||string[i] == 'l')
{ //"i"或"l"时位长度减2
length-=2;
c++;
}
else if(string[i] == 0x0020||string[i] == '?') //空格或者问号时位长度减6
{
length-=6;
Flag_end = 1;
b++;
}
else if(string[i] == 0x000a||string[i] == 0x000d||string[i] == 0xffff) //amend 2005.4.2.16.05
{
string[i] = 0x0020; //出现换行或者缩进符时换成空格
length-=6;
Flag_end = 1;
b++;
}
else //其他情况位长度减2
{
length-=2;
Flag_end = 1;
c++;
}
word[j] = string[i]; //把单词存入单词数组
i++;
Clear_Watch_Dog();
}
if(length <8) //如果剩余位长度还能显示一个字符
{
for(m=n;m<21;m++)
{
str[line][m] = 0x0020; //先把二维数组中没有用到的单元清空
}
n = 0; //否则,存入下一行
line++;
length = 98 - 8*a - 6*b - 2*c;
}
for(m=0;m<j;m++)
{
str[line][n] = word[m]; //把单词存入已经选好的二维数组
n++;
}
Flag_end = 0;
Clear_Watch_Dog();
}
for(i=n;i<21;i++)
{
str[line][i] = 0x0020;
}
if(line<20)
{
for(i=line+1;i<20;i++) //把二维数组中没有用到的单元清空
{
for(j=0;j<21;j++)
{
str[i][j] = 0x0020;
Clear_Watch_Dog();
}
}
}
Init_sys(); //amend 14:10
FG_InitGraphic(); //初始化LCDIO口 函数定义在Splc501sys.asm
FG_ClearScreen(1);
FG_Bar(0,0,100,50);
FG_Bar(0,51,100,64);
FG_Bar(101,51,128,64);
FG_Bar(101,0,128,30);
FG_Bar(101,31,128,50); //画出6个分区
FG_PutStr("Total",0,126,28);
FG_PutStr("read",0,124,60);
FG_PutStr("page",0,126,50); //显示各区定义好的字符串
for(i=0;*(pn+i)!='\0';i++)
*(ch+i) = *(pn+i);
*(ch+3) = '\0';
FG_PutStr(pn,0,124,42); //显示页码
i = 0;
FG_PutStr(str[i],0,r,t); //显示当前页的内容
r1 = r;
r2 = t;
for(i=1;i<20;i++)
{
t -= 10;
FG_PutStr(str[i],0,r,t);
Clear_Watch_Dog();
}
r = r1;
t = r2; //把开始显示的位置保存
FG_Bar(0,51,100,64);
FG_Bar(0,51,100,64);
FG_Bar(101,0,128,30);
FG_PutStr("Total",0,126,28);
FG_PutStr("No.",0,98,60); //显示书码及其书名
StrPtr = string1;
FG_PutStr(TPage1,0,126,18);
if(bno==1)
{
StrPtr = string2; //
FG_PutStr(TPage2,0,126,18); //第2本书时显示的总页数为3
}
FG_PutStr(StrPtr,0,70,60); //第1本书时显示的总页书为2
for(i=0;*(bn+i)!='\0';i++)
*(ch+i) = *(bn+i);
*(ch+i) = '\0';
FG_PutStr(bn,0,82,60);
Clear_Watch_Dog();
}
//=============================================================
//语法格式:void Readdata()
//功能:读存储器文字资源
//参数:无
//返回值:无
//日期:2005.04.06
//=============================================================
void Readdata()
{
int i,ret;
unsigned int Block,Page,Column;
long Addr,Addr_end;
long Text_StartAddr,Text_EndAddr,Voice_StartAddr,Voice_EndAddr;
//*************************************************************
//初始化
//*************************************************************
System_Initial();
InitSignalLine();
SP_InitSamsungFlash();
//**************************************************************
if(ReadBook_Flag==0)
{
SearchSnd(bno,pno,&Text_StartAddr,&Text_EndAddr,&Voice_StartAddr,&Voice_EndAddr);
Addr = Text_StartAddr;
Addr_end = Text_EndAddr; //读索引表,取出初始地址和结束地址
}
Block = (unsigned int)(Addr>>14); //
Page = (unsigned int)((Addr&0x3fff)>>9); //
Column = (unsigned int)(Addr&0x1ff); //根据地址计算所在的块、页和页内地址
SP_InitReadSamsungFlash_1(Column,Page,Block); //初始化读flash
for(i=0;i<400;i+=2)
{
if(Column>=511) //如果大于一个,换页读取
{
Page += 1;
Column = 0;
SP_InitReadSamsungFlash_1(Column,Page,Block);
}
ret =SP_ExtractSamsungFlash(); //读flash存放在string数组中
Addr += 2;
string[i] = ret&0x00ff;
ret = ret >>8;
string[i+1] = ret&0x00ff;
Column += 2;
Clear_Watch_Dog();
}
}
//=============================================================
// 语法格式: int Delay()
// 功能描述: 延时并清看门狗
// 参 数: 无
// 返 回 值: 无
// 日 期: 2005.04.06
//=============================================================
int Delay()
{
int DelayValue = 0;
for (DelayValue = 0; DelayValue < 0x2000; DelayValue++)
*P_Watchdog_Clear = 1;
}
//=============================================================
// 语法格式: unsigned int GetKey(void)
// 功能描述: 延时等待,返回键值,没有去抖处理
// 参 数: 无
// 返 回 值: 返回16位键值
// 日 期: 2005.04.06
//=============================================================
unsigned int GetKey(void)
{
int i;
//使用IOA9~IOA15作为键盘输入口
*P_IOA_Dir &= (~KEY_ALL|0x0100); //定义的相应端口为上拉输入
*P_IOA_Attrib &= (~KEY_ALL|0x0100);
*P_IOA_Buffer |= KEY_ALL;
for(i=0;i<200;i++) //延时
{
Clear_Watch_Dog();
}
KeyValue = ((*P_IOA_Data) & KEY_ALL) ^ KEY_ALL; //取键值
//return KeyValue;
}
//=============================================================
// main.c 结束
//=============================================================
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -