📄 main.c
字号:
#include "a2000.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_IOA_Latch (volatile unsigned int *)0x7004
#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_INT_Ctrl (volatile unsigned int *)0x7010
#define P_INT_Clear (volatile unsigned int *)0x7011
#define P_Watchdog_Clear (volatile unsigned int *)0x7012
#define P_SystemClock (volatile unsigned int *)0x7013
#define C_IRQ3_KEY (volatile unsigned int *)0x0080
#define C_IRQ3_EXT1 (volatile unsigned int *)0x0100
#define C_IRQ3_EXT2 (volatile unsigned int *)0x0200
#define P_Watchdog_Clear (volatile unsigned int *)0x7012
void PlaySnd_Auto(int uiSndIndex);
unsigned int Volume_Index=7,uiSndIndex=0,volume=0xf000;
unsigned int i,j,m=4,n=0,k=0x003f,l=0,h=0,a1=0,a2=0,sum=0;
unsigned int a[10]={0x003f,0x0006,0x005b,0x004f,0x0066,0x006d,0x007d,0x0007,0x007f,0x006f}; //a为代码数据数组
unsigned int b[8]={0xffe7,0xffeb,0xffed,0xffee,0xffd7,0xffdb,0xffdd,0xffde}; //b为地址数组
unsigned int c[4]={0x0006,0x005b,0x004f,0x0066}; //c为显示缓冲区数组
unsigned int d[4]={0}; //d为数据缓冲区数组
unsigned int e[10]={0,1,2,3,4,5,6,7,8,9}; //e为真实数据数组
//========================================================
// 程序名称:简易mp3播放器的设计
// 端口占用资源:pa口的低八位接led的abcdefg dip
// pa口的高八位接数码灯d0d1d2d3d4d5d6d7
// pb0-pb3接x4-x1
// pb4,pb5接y1,y2
//========================================================
int main(void)
{
Init(); //调用初始化端口子程序
for(uiSndIndex=0;uiSndIndex<4;uiSndIndex++)
{
PlaySnd_Auto(uiSndIndex); //调用播放程序,播放第0段语音,采用DAC1播放
//播放序号的列表在Resource.asm文件的最后的表中定义
*P_Watchdog_Clear=0x0001;
}
}
//========================================================
// 语法格式: void PlaySnd_Auto(unsigned int uiSndIndex,unsigned int
//
//
// 实现功能: 通过自动方式播放语音资源
// 参数: 1.uiSndIndex:语音资源序号 2.uiDAC_Channel:语音播放通道
// 返回值: 无
//========================================================
//////////////////////////////////////////////////////////////////////////////////////////////////////
void Init(void)
{
*P_IOA_Dir=0xffff; //设置IOA口为同相低电平输出
*P_IOA_Attrib=0xffff;
*P_IOA_Data=0x0000;
/////////////////////////////
*P_IOB_Dir=0xff0f; //设置IOB口4,5位为带上拉电阻的输入;0-3位为同相高电平输出
*P_IOB_Attrib=0xff0f;
*P_IOB_Data=0x00f0;
}
//////////////////////////////////////////////////////////////////////////////////////////////////////
void PlaySnd_Auto(int uiSndIndex)
{
SACM_A2000_Initial(1); //初始化语音播放,自动方式
SACM_A2000_Play(uiSndIndex,1,3); //播放语音
while((SACM_A2000_Status() & 0x0001) != 0) //判断当前是否在播放?返回最低位为1则表示当前在播放
{
SACM_A2000_ServiceLoop(); //服务程序
*P_IOB_Data=0xfff0;
Scan(); //查找判断
Disp();
Get_Volume();
if(n)
{
Write_Fun();
}
*P_Watchdog_Clear=0x0001;
}
SACM_A2000_Stop(); //停止
}
///////////////////////////////////////////////////////////////////////////////////////////////////////
void Volume_Add(void) //音量加
{
Volume_Index++;
if(Volume_Index>15) Volume_Index=15;
SACM_A2000_Volume(Volume_Index);
}
//////////////////////////////////////////////////////////////////////////////////////////////////////
void Volume_Sub(void) //音量减
{
Volume_Index--;
if(Volume_Index<=0) Volume_Index=0;
SACM_A2000_Volume(Volume_Index);
}
//////////////////////////////////////////////////////////////////////////////////////////////////////
void Up(void) //上曲
{
uiSndIndex--;
if(uiSndIndex<0) uiSndIndex=3;
SACM_A2000_Play(uiSndIndex,1,3);
*P_Watchdog_Clear=0x0001;
}
//////////////////////////////////////////////////////////////////////////////////////////////////////
void Down(void) //下曲
{
uiSndIndex++;
if(uiSndIndex>=4) uiSndIndex=0;
SACM_A2000_Play(uiSndIndex,1,3);
*P_Watchdog_Clear=0x0001;
}
//////////////////////////////////////////////////////////////////////////////////////////////////////
void Scan(void)
{
i=*P_IOB_Data;
if((i | 0xffef) == 0xffef) //判断是否为上排按健按下
{
for(j=0;j<4;j++) //如果是,判断是哪一纵行
{
*P_IOB_Data=b[j];
if((*P_IOB_Data) == b[j])
{
k=a[j];
l=e[j];
while((*P_IOB_Data | 0xffef) == 0xffef) //判断按健是否抬起
*P_Watchdog_Clear=0x0001;
n=1; //保留标志位
break;
}
}
}
else if((i | 0xffdf) == 0xffdf) //判断是否为下排按键按下
{
for(j=4;j<8;j++)
{
*P_IOB_Data=b[j];
if((*P_IOB_Data) == b[j])
{
k=a[j];
l=e[j]; //保留以后将要执行操作的标志
while((*P_IOB_Data | 0xffdf) == 0xffdf)
*P_Watchdog_Clear=0x0001;
n=1;
break;
}
}
}
else
n=0; //如果没有按件按下,清标志位
*P_Watchdog_Clear=0x0001;
}
///////////////////////////////////////////////////////////////////////////////////////////////////////
void Write_Fun(void)
{
switch(l)
{
case 7: //标志为7做“音量加”
Volume_Add();
break;
case 6: //标志为6做“音量减”
Volume_Sub();
break;
case 5: //标志为5做“下曲”
Down();
break;
case 4: //标志为4做 “上曲”
Up();
break;
}
}
//////////////////////////////////////////////////////////////////////////////////////////////////////
void Disp(void) //显示操作
{
*P_IOA_Data=(0x003e|volume);//0xff00
*P_IOB_Data=0xfff7;
Delay();
*P_IOA_Data=(0x0000|volume);
*P_IOB_Data=0xfffb;
Delay();
*P_IOA_Data=(0x003f|volume);
*P_IOB_Data=0xfffd;
Delay();
*P_IOA_Data=(c[uiSndIndex]|volume);
*P_IOB_Data=0xfffe;
Delay();
}
//////////////////////////////////////////////////////////////////////////////////////////////////////
void Delay(void) //延迟操作
{
unsigned int uiCount;
for(uiCount=0;uiCount < 150; uiCount++)
{
*P_Watchdog_Clear=0x0001;//清看门狗操作
}
}
//////////////////////////////////////////////////////////////////////////////////////////////////////
void Get_Volume(void) //这个还米搞粗来。。。。。。。。。。。。。。。。。。。。。。。。。……
{
switch(Volume_Index)
{
case 0:
volume=0xff00;
break;
case 1:
volume=0xfe00;
break;
case 2:
volume=0xfe00;
break;
case 3:
volume=0xfc00;
break;
case 4:
volume=0xfc00;
break;
case 5:
volume=0xf800;
break;
case 6:
volume=0xf800;
break;
case 7:
volume=0xf000;
break;
case 8:
volume=0xf000;
break;
case 9:
volume=0xe000;
break;
case 10:
volume=0xe000;
break;
case 11:
volume=0xc000;
break;
case 12:
volume=0xc000;
break;
case 13:
volume=0x8000;
break;
case 14:
volume=0x8000;
break;
case 15:
volume=0x0000;
break;
}
Delay();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -