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

📄 main.c

📁 凌阳单片机流水灯程序
💻 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 + -