📄 main.c
字号:
//===========================================================================
// The information contained herein is the exclusive property of
// Sunnnorth Technology Co. And shall not be distributed, reproduced,
// or disclosed in whole in part without prior written permission.
// (C) COPYRIGHT 2003 SUNNORTH TECHNOLOGY CO.
// ALL RIGHTS RESERVED
// The entire notice above must be reproduced on all authorized copies.
//============================================================================
//============================================================================
// 工程名称:electronicbook.spj
// 功能描述:利用61板外扩存储器进行读写书的资源,这个电子书主要有两部分的功能:
// 液晶显示功能
// 语音朗读功能
// 按键控制
//
// IDE 环境:SUNPLUS u'nSP IDE 1.8.4(or later)
//
// 涉及的库:SACMV25.lib,CMacro.lib,clib100.lib
//
// 组成文件: main.c
// Readbook.c/relist.c/ISR.asm/spce.asm/SP_lib.asm/
// SamsungFlashV11.asm/Resource.asm/SamsungFlashV11.asm
// /Splc501var.asm/Resource.inc/A2000.h等
//
// 硬件连接: LCD D0~D7接IOA8~IOA15
// LCD EP 接IOB6
// LCD RWP 接IOB5
// LCD A0 接IOB4
// LCD /CS1 接IOB9 或接地也可
// 维护记录: 2005.04.06 第1版本
// 开发者: Hongyan.Feng (hongyan@.sunnorth.com.cn (2963))
//
// 日期: 2005-4-06
//===============================================================================
//================================================================================
// 文件名称: main.c
// 功能描述: 主程序、开机显示动画图片程序、书的内容显示程序、读取存储器显示内容等
// 维护记录: 2005-4-16 v1.0
//================================================================================
#include "lab_parameter.h" //包含的库函数
#include "sacmv32.h"
#include "hardware.h"
#define P_IOA_Data (volatile unsigned int *)0x7000
#define P_IOA_Buffer (volatile unsigned int *)0x7001
#define P_IOA_Dir (volatile unsigned int *)0x7002
#define P_IOA_Attrib (volatile unsigned int *)0x7003
#define P_IOB_Data (volatile unsigned int *)0x7005
#define P_IOB_Buffer (volatile unsigned int *)0x7006
#define P_IOB_Dir (volatile unsigned int *)0x7007
#define P_IOB_Attrib (volatile unsigned int *)0x7008
#define P_Watchdog_Clear (volatile unsigned int *)0x7012
#define P_INT_Ctrl (volatile unsigned int *)0x7010
#define P_INT_Clear (volatile unsigned int *)0x7011
#define KEY_ALL 0xfe00
extern BIRD_Frame0; //鸟飞翔的各动作的外部申明
extern BIRD_Frame1;
extern BIRD_Frame2;
extern BIRD_Frame3;
extern BIRD_Frame4;
extern BIRD_Frame5;
extern BIRD_Frame6;
void ReadDisplay(void);
void ScreenAegis(void);
void Readbook(void);
void Readdata(void);
unsigned SearchSnd(unsigned uiBookIdx ,unsigned uiPageIdx,long *Text_StartAddr,long *Text_EndAddr,long *Voice_StartAddr,long *Voice_EndAddr);
//unsigned int GetKey(void);
int r=98;
int t=48;
int R_CharCode,flag=0;
int pno = 0;
int bno = 0;
//char bna[50];
unsigned KeyValue=0;
int k = 0;
int ReadBook_Flag=0;
char string[400]; //定义一个数组准备存放文本资源
//======================================================================
// 语法格式: int main()
// 功能描述: 按键读书程序
// 参数: 无
// 返回值: 无
//======================================================================
int main()
{
long Voice_StartAddr,Voice_EndAddr,Text_StartAddr,Text_EndAddr; //4.3
unsigned int ddd;
KeyValue=0;
StartDisplay(); //开机显示
while(1)
{
SP_INT_IRQ6();
switch(KeyValue){
case 0x0000:// if(flag<0) ScreenAegis(); //没有键按下
break;
case 0x0100: //1键按下
break;
case 0x0200: //2键按下
t+=10; //字母上移
if(t>200) //换屏
{
FG_ClearScreen(0);
ReadBook_Flag = 1;
Readdata();
t = 48;
}
ReadDisplay();
break;
case 0x0400: //3键按下
bno = 0;
t-=10; //字母下移
ReadDisplay();
break;
case 0x0800: //4键按下
Readdata();
ReadDisplay(); //显示文字
break;
case 0x1000: //5键按下
Readbook(); //朗读当前页的内容
Clear_Watch_Dog();
break;
case 0x2000: //6键按下
pno++; //翻到下页
if((pno==2&&bno==0)||(pno==3&&bno==1)) //当到最后一页时,翻到第一页
{
pno = 0;
}
Readdata(); //读资源
ReadDisplay(); //显示
break;
case 0x4000: //7键按下
pno--; //翻到上一页
if(pno<0&&bno==0)
{
pno = 1; //当翻到第一页时,跳到最后一页
}
if(pno<0&&bno==1)
{
pno = 2;
}
Readdata();
ReadDisplay();
break;
case 0x8000: //8键按下
bno++;
if(bno==2)
{
bno = 0;
}
Readdata();
ReadDisplay();
break;
default: break;
}
}
}
//=================================================================================================
//语法格式:StartDisplay()
//功能:开机显示动画图片
//参数:无
//返回值:无
//日期:2005.04.06
//=================================================================================================
StartDisplay()
{
int i,j;
int x=60;
Init_sys(); // 初始化系统时钟
FG_InitGraphic(); //初始化LCDIO口 函数定义在Splc501sys.asm
FG_SetBMPMode(DG_BMP_COVER); //设置位图模式 函数定义在Splc501sys.asm
/* SACM_A2000_Initial(Auto); //A2000播放初始化 函数包含在Sacmv32.lib
SACM_A2000_Play(0,DAC1+DAC2,Ramp_Up_On+Ramp_Dn_On); //A2000语音播放 函数包含在Sacmv32.lib*/
for(k=0;k<10&&KeyValue==0;k++)
{
/* if((SACM_A2000_Status()&0x01) == 0) //判断语音是否播放结束 函数包含在Sacmv32.lib
SACM_A2000_Play(0,DAC1+DAC2,Ramp_Up_On+Ramp_Dn_On);//语音播放 函数包含在Sacmv32.lib*/
x=x+10;
if(x==128) x=60;
FG_PutBitmap(&BIRD_Frame0,x,60); //显示第一个动作
for(j=0;j<=2;j++) //延时 保持整个显示屏点亮
{
for(i=0;i<0xffff;i++)
Clear_Watch_Dog(); //清看门狗 函数定义在Splc501sys.asm
}
FG_ClearScreen(0);
x+=3;
if(x==128) x=60;
FG_PutBitmap(&BIRD_Frame1,x,60); //显示第二个动作
for(j=0;j<=2;j++) //延时 保持整个显示屏点亮
for(i=0;i<0xffff;i++)
Clear_Watch_Dog(); //清看门狗 函数定义在Splc501sys.asm
FG_ClearScreen(0);
x+=3;
if(x==128) x=60;
FG_PutBitmap(&BIRD_Frame2,x,60); //显示第三个动作
for(j=0;j<=2;j++) //延时 保持整个显示屏点亮
for(i=0;i<0xffff;i++)
Clear_Watch_Dog(); //清看门狗 函数定义在Splc501sys.asm
FG_ClearScreen(0);
x+=3;
if(x==128) x=60;
FG_PutBitmap(&BIRD_Frame3,x,60); //显示第四个动作
for(j=0;j<=2;j++) //延时 保持整个显示屏点亮
for(i=0;i<0xffff;i++)
Clear_Watch_Dog(); //清看门狗 函数定义在Splc501sys.asm
FG_ClearScreen(0);
x+=3;
if(x==128) x=60;
FG_PutBitmap(&BIRD_Frame4,x,60); //显示第五个动作
for(j=0;j<=2;j++) //延时 保持整个显示屏点亮
for(i=0;i<0xffff;i++)
Clear_Watch_Dog(); //清看门狗 函数定义在Splc501sys.asm
FG_ClearScreen(0);
x+=3;
FG_PutBitmap(&BIRD_Frame5,x,60); //显示第六个动作
for(j=0;j<=2;j++) //延时 保持整个显示屏点亮
for(i=0;i<0xffff;i++)
Clear_Watch_Dog(); //清看门狗 函数定义在Splc501sys.asm
FG_ClearScreen(0);
x+=3;
if(x==128) x=60;
FG_PutBitmap(&BIRD_Frame6,x,60); //显示第六个动作
for(j=0;j<=2;j++) //延时 保持整个显示屏点亮
for(i=0;i<0xffff;i++)
Clear_Watch_Dog(); //清看门狗 函数定义在Splc501sys.asm
FG_ClearScreen(0); //清屏 函数定义在Splc501sys.asm
SP_INT_IRQ6(); //允许键盘中断
}
}
//===================================================================================================
//语法格式:void ScreenAegis(void)
//功能:屏幕保护动画图片显示
//参数:无
//返回值:无
//日期:2005.04.06
//====================================================================================================
void ScreenAegis(void)
{
int i,j;
int x=0;
Init_sys(); //初始化字库 函数定义在Splc501sys.asm
FG_InitGraphic(); //初始化LCDIO口 函数定义在Splc501sys.asm
while(!KeyValue)
{
FG_ClearScreen(0);
if(x==4)x=0;
FG_PutStr("SUNPLUS",x,95,60);
FG_PutStr("Technology for ",x,125,40);
FG_PutStr("Easy Living",x,85,20);
for(j=0;j<=4;j++) //延时 保持整个显示屏点亮
for(i=0;i<0xffff;i++)
Clear_Watch_Dog(); //清看门狗 函数定义在Splc501sys.asm
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -