📄 main.c
字号:
//============================================================
// 工程名称:LCD501Music.spj
// 作者: xinqiang (email: xinqiang@sunnorth.com.cn)
// 联系方式:010-62981668-2916
// 适应芯片: SPCE061A
// 实现功能: SPLC501液晶显示模组驱动演示 音乐动画
//
// 系统要求: PC with CPU 233MHz,128MB RAM,
// SUNPLUS u'nSP IDE 1.8.4(or later)
//
// 涉及的库:(a) CMacro.lib
// (b)
//
// 组成文件:
// main.c/PicData.c
// SPLC501User.c
// SPLC501Driver_IO.asm/DataOSforLCD.asm
// SPLC501User.h/SPLC501Driver_IO.inc/PicData.h
//
// 当前版本: V1.0
// 日期: 2005-8-12
//
// 参考文件:
// 维护记录:
//--------------------------------------------------------------------------------------------------------
// Version YYYY-MM-DD-INDEX Modified By Description
//
//===============================================
///////////////////////////////////////////////////////////////////////////////
//文件名称: main.c
//描述: SPLC501模组驱动程序演示Demo 带音乐的动画
// LCD D0~D7接IOA8~IOA15
// LCD EP 接IOB6
// LCD RWP 接IOB5
// LCD A0 接IOB4
// LCD /CS1 接IOB9 或接地也可
//
// IO高电平:3.3V
//========================================================================================
#define P_SystemClock (volatile unsigned int *)0x7013
#define P_INT_Ctrl (volatile unsigned int *)0x7010
#define P_INT_Clear (volatile unsigned int *)0x7011
#define P_INT_Ctrl_New (volatile unsigned int *)0x702D
#define P_Watchdog_Clear (volatile unsigned int *)0x7012
#include "PicData.h"
#include "SPLC501User.h"
#include "A2000.h"
const unsigned int* BMP_Cartoon3[] = //动画帧数据链表(小人)
{(unsigned int*)9,(unsigned int*)encoding_00,(unsigned int*)encoding_01,
(unsigned int*)encoding_02,(unsigned int*)encoding_03,(unsigned int*)encoding_04,
(unsigned int*)encoding_05,(unsigned int*)encoding_06,(unsigned int*)encoding_07,
(unsigned int*)encoding_09};
//****上面的链接第一个值为表中有效的图像帧数,后面跟着都是各帧图像的字模数据首地址****//
unsigned int IRQ1KHz_Couter; //定义一个全局的变量,作为计数的Counter
int main(void)
{
unsigned int uiTemp;
int i=1;
LCD501_Init(0x0000); //初始化液晶
SACM_A2000_Initial(1); //初始化语音播放,为自动播放
LCD501_SetPaintMode(4); //设置LCD显示模式
uiTemp = *P_INT_Ctrl_New; //...
uiTemp = uiTemp|0x0010;
*P_INT_Ctrl_New = uiTemp; //打开1KHz中断
__asm("IRQ ON"); //打开IRQ中断
LCD501_Bitmap(16,0,(unsigned int *)BMP_Cartoon3[1]); //先显示第一帧
IRQ1KHz_Couter=0; //计数器清零
SACM_A2000_Play(0,3,3);
while(1)
{
if(IRQ1KHz_Couter>=300) //到达预定时延时
{
IRQ1KHz_Couter=0; //清Counter
LCD501_Bitmap(16,0,(unsigned int *)BMP_Cartoon3[i]); //显示第i帧图像
i++; //自加
if(i==10) //到达上限,则m变为负数
{
i=1; //i重新指为1
}
}
if((SACM_A2000_Status()&0x0001)==0) //判断,播放结束,则调用下列代码
{
SACM_A2000_Stop(); //把上次的停止
SACM_A2000_Play(0,3,3); //重新播放
}
*P_Watchdog_Clear = 0x0001; //清看门狗
}
}
//
void BMP_Play_IRQ_Service(void)
{//动画显示程序中,在1KHz中断需要调用的子函数,作为计数用
IRQ1KHz_Couter++; //Counter自加1
SACM_A2000_ServiceLoop(); //在中断服务程序中完成语音循环服务程序
}
//=====================================================================//
//函数:void IRQ4(void)
//描述:IRQ4中断入口程序
//参数:无
//返回:无
//注意:采用了1KHz中断
//=====================================================================//
void IRQ4(void)__attribute__((ISR));
void IRQ4(void)
{
if(*P_INT_Ctrl&0x0010)
{
*P_INT_Clear = 0x0010;
BMP_Play_IRQ_Service(); //调用动画显示的中断服务程序
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -