?? 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 + -