⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 本方案主要介绍了利用凌阳SPCE061A精简开发板作为控制核心
💻 C
📖 第 1 页 / 共 2 页
字号:
//===========================================================================
//  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 + -