📄 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.
//========================================================
//========================================================
// 工程名称: Ad_Led
// 功能描述:
// 涉及的库: CMacro.lib
// 组成文件: main.c
// 硬件连接: IOA口的低8位连接1*8键盘,键盘公共端接低电平
// IOB口的低8位接8个LED灯
// 如使用LED键盘模组,还需把IOA高8位连接到LED
// 键盘模组的DIG接口,作为LED灯的使能端(高电平有效)
// 维护记录: 2005-09-12 v1.0
//
//========================================================
//========================================================
// 文件名称: main.c
// 功能描述:
// 维护记录: 2005-09-12 v1.0
//========================================================
//#include "hardware.h"
#include "a2000.h"
#include "ptr.h"
#include "key.h"
#define KEY1 0x0001
#define KEY2 0x0002
#define KEY3 0x0004
#define KEY4 0x0008
#define KEY5 0x0010
#define KEY6 0x0020
#define KEY7 0x0040
#define KEY8 0x0080
#define C_IRQ5_2Hz 0x0004
#define C_IRQ5_4Hz 0x0008
#define C_IRQ6_TMB2 0x0001
#define C_IRQ6_TMB1 0x0002
unsigned int g_uiMode;
unsigned int g_uiConst;
unsigned int g_uiData;
unsigned int g_uiCount;
void PlaySnd_Auto(unsigned int uiSndIndex,unsigned int uiDAC_Channel);
#define P_Watchdog_Clear (volatile unsigned int *)0x7012
//========================================================
// 语法格式: int main(void)
// 实现功能:
// 参数: 无
// 返回值: 无
//========================================================
int main(void)
{
unsigned int uiKey;
*P_IOA_Dir = 0x4000;
*P_IOA_Attrib = 0x4000;
*P_IOA_Data = 0x4000; //先初始化A端口的IOA14,作为LED灯的使能用(为符合LED键盘模组)
*P_IOB_Dir = 0x00ff; //初始化IOB的低八位端口
*P_IOB_Attrib = 0x00ff;
*P_IOB_Data = 0x0000;
Key_Init(); //调用键盘初始化程序,初始化IOA低八位口以及中断
while(1)
{
uiKey = Key_Get(); //获取键值
switch(uiKey) //不同的按键,进入不同的响应模式,通过修改标志变量
{ //通知中断当前模式
case KEY1:
while(1)
{
PlaySnd_Auto(0,1); //调用播放程序,播放第0段语音,采用DAC1播放
//播放序号的列表在Resource.asm文件的最后的表中定义
*P_Watchdog_Clear = 0x0001;
}
g_uiMode = 0x0001;
*P_IOB_Data = 0x0055;
*P_INT_Ctrl = C_IRQ6_TMB2 | C_IRQ5_2Hz;
break;
case KEY2:
while(1)
{
PlaySnd_Auto(0,1); //调用播放程序,播放第0段语音,采用DAC1播放
//播放序号的列表在Resource.asm文件的最后的表中定义
*P_Watchdog_Clear = 0x0001;
}
g_uiMode = 0x0002;
*P_IOB_Data = 0x0001;
*P_INT_Ctrl = C_IRQ6_TMB2 | C_IRQ5_4Hz;
break;
case KEY3:
while(1)
{
PlaySnd_Auto(0,1); //调用播放程序,播放第0段语音,采用DAC1播放
//播放序号的列表在Resource.asm文件的最后的表中定义
*P_Watchdog_Clear = 0x0001;
}
g_uiMode = 0x0004;
g_uiConst = 0x000c;
*P_INT_Ctrl = C_IRQ6_TMB2 | C_IRQ5_4Hz;
break;
case KEY4:
while(1)
{
PlaySnd_Auto(0,1); //调用播放程序,播放第0段语音,采用DAC1播放
//播放序号的列表在Resource.asm文件的最后的表中定义
*P_Watchdog_Clear = 0x0001;
}
g_uiMode = 0x0008;
g_uiConst = 0x0000; //计数
g_uiData = 0x0000; //0:点亮,1:熄灭
*P_INT_Ctrl = C_IRQ6_TMB2 | C_IRQ5_4Hz;
break;
case KEY5:
while(1)
{
PlaySnd_Auto(0,1); //调用播放程序,播放第0段语音,采用DAC1播放
//播放序号的列表在Resource.asm文件的最后的表中定义
*P_Watchdog_Clear = 0x0001;
}
g_uiMode = 0x0010;
g_uiConst = 0x0000;
*P_INT_Ctrl = C_IRQ6_TMB2 | C_IRQ5_2Hz;
break;
case KEY6:
while(1)
{
PlaySnd_Auto(0,1); //调用播放程序,播放第0段语音,采用DAC1播放
//播放序号的列表在Resource.asm文件的最后的表中定义
*P_Watchdog_Clear = 0x0001;
}
g_uiMode = 0x0020;
g_uiConst = 0x0000;
*P_INT_Ctrl = C_IRQ6_TMB2 | C_IRQ5_4Hz;
break;
case KEY7:
while(1)
{
PlaySnd_Auto(0,1); //调用播放程序,播放第0段语音,采用DAC1播放
//播放序号的列表在Resource.asm文件的最后的表中定义
*P_Watchdog_Clear = 0x0001;
}
g_uiMode = 0x0040;
g_uiConst = 0x0000;
*P_INT_Ctrl = C_IRQ6_TMB2 | C_IRQ6_TMB1;
break;
case KEY8:
while(1)
{
PlaySnd_Auto(0,1); //调用播放程序,播放第0段语音,采用DAC1播放
//播放序号的列表在Resource.asm文件的最后的表中定义
*P_Watchdog_Clear = 0x0001;
}
g_uiMode = 0x0080;
g_uiConst = 0xffff;
*P_TimeBase_Setup = 0x0001; //选择16Hz
*P_INT_Ctrl = C_IRQ6_TMB2 | C_IRQ6_TMB1;
break;
default:
break;
}
*P_Watchdog_Clear = 0x0001;
}
}
void PlaySnd_Auto(unsigned int uiSndIndex,unsigned int uiDAC_Channel)
{
SACM_A2000_Initial(1); //初始化语音播放,自动方式
SACM_A2000_Play(uiSndIndex,uiDAC_Channel,3); //播放语音
while((SACM_A2000_Status() & 0x0001) != 0) //判断当前是否在播放?返回最低位为1则表示当前在播放
{
SACM_A2000_ServiceLoop(); //服务程序
*P_Watchdog_Clear = 0x0001;
}
SACM_A2000_Stop(); //停止
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -