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

📄 main.c

📁 凌阳单片机解码SAA3010T(通用无线遥控) sunplus IDE(集成开发环境)
💻 C
字号:
//========================================================================

//========================================================================
//项目名称:SAA3010T.spj
//功能描述:接收并解码SAA3010T发送的按键代码
//注意事项:添加库文件sacmv26e.lib
//
//组成文件:main.c, SAA3010T.c ,SAA3010T.h,hardware.arm
//A2000.h,A2000.inc,hardware.inc
//日期:2007.06.09
//作者:张丰盛
//审核:张丰盛
//================================================================

//================================================================
#include "SAA3010T.h"
#include "A2000.h"
#define  RSP_CURRENT_TEMP  11  //现在温度是
#define  RSP_LOW_ZERO      12  //零下
#define  RSP_NUM_BASE      00
#define  RSP_CEL           13  //摄氏度	
#define  RSP_SORRY         14  //对不起
#define  RSP_TEMP_OVER     16 //温度超出测量范围
unsigned int key_flag=0;
unsigned int key_val=2;
int temper=0;
void system_init(void);    //系统初使化
void IRQ3(void)__attribute__((ISR));
int ds18b20GetTemperature(void);
//===============================================================
/*
//=========== 播放提示语音 ========================//
//input:voice index
//=================================================//
void PlayRespond(unsigned int Result)      	//播放语音
{  
   SACM_A2000_Initial(1);
   SACM_A2000_Play(Result,3,3);
   while((SACM_A2000_Status()&0x0001) != 0)
    { 
    	SACM_A2000_ServiceLoop();
    	*P_Watchdog_Clear=0x01;
    }
   SACM_A2000_Stop();
}

//=========== 播放温度  ===========================//
//input:十六进制温度值
//=================================================//
void PlayVoice(int Tem)
{
     if(Tem==0xFFFF)  					//温度超出范围
     	PlayRespond(RSP_TEMP_OVER);
     else 
     {
        PlayRespond(RSP_CURRENT_TEMP); 
        if(Tem == 0)         				//0
        	PlayRespond(0);    //0
        if(Tem<0) 
        	PlayRespond(RSP_LOW_ZERO); 		//零下		            
        if((Tem/10)>1)        				//温度值的十位>1,报数字
        PlayRespond(Tem/10);	   
        if((Tem/10)>0)  				//十
        	PlayRespond(10);
        if((Tem%10)!=0)   				//个位不为0则报
        PlayRespond(Tem%10);
	    *P_Watchdog_Clear=0x01;	           
        PlayRespond(RSP_CEL); 			//摄氏度
      }
}
//===============================================================
*/
//===============================================================
//函数名称:void system_init(void)
//函数功能:系统初使化
//输入参数:无
//输出参数:无
//日期:2007.06.09
//===============================================================
void system_init(void)      
{
	asm("irq off");
	*P_IOA_Dir=0xffff;
	*P_IOA_Data=0x0000;
	*P_IOA_Attrib=0xffff;                
	*P_IOB_Dir=0x0000;   //IOB2输入
	*P_IOB_Data=0xffff;  //IOB2悬浮式输入
	*P_IOB_Attrib=0x0000;                                                      ;
	*P_INT_Ctrl=0x0100;  //IRQ3_EXT1
	asm("irq on");

}
//===============================================================

//===============================================================
//函数名称:void IRQ3(void)_attribute__((ISR))
//函数功能:红外接收中断
//输入参数:无
//输出参数:无
//日期:2007.06.09
//===============================================================
void IRQ3(void)
{
	unsigned int i;
	unsigned int temp;
	unsigned int iob;
	unsigned int code;
	asm("irq off");
    if(*P_INT_Ctrl&0x0100)
    {
    	*P_INT_Clear=0x0100;
	    for(temp=14;temp>0;temp--);
	    iob=*P_IOB_Data;
	    iob=iob&0x0004;
    	if(iob==0)
    	{
    		for(i=0;i<14;i++)
    		{ 
    			code=code<<1;
    			iob=*P_IOB_Data;
    			iob=iob&0x0004;
    			if(iob)
    				code=code|0x01;
    			for(temp=47;temp>0;temp--)
    				*P_Watchdog_Clear=0x01;
    			*P_Watchdog_Clear=0x01;
    		}
    		code=code&0x07ff;
    		switch(code)
    		{
    			case 0x0600:key_val=0;  break;
    			case 0x0601:key_val=1;  break;	 //数字键
    			case 0x0602:key_val=2;  break;	
    			case 0x0603:key_val=3;  break;	
    			case 0x0604:key_val=4;  break;
    			case 0x0605:key_val=5;  break;	
    			case 0x0606:key_val=6;  break;	
    			case 0x0607:key_val=7;  break;	
    			case 0x0608:key_val=8;  break;
    			case 0x0609:key_val=9;  break;	
    			case 0x060a:key_val=13;  break;
    			case 0x060b:key_val=12;  break;	
    			case 0x060c:key_val=11;  break;	
    			case 0x060d:key_val=12;  break;	
    			case 0x060e:key_val=23;  break;
    			case 0x060f:key_val=21;  break;				
    			case 0x061e:key_val=14;  break;	
    			case 0x061d:key_val=29;  break;	
    			case 0x061c:key_val=25;  break;	
    			case 0x061b:key_val=20;  break;
    			case 0x061a:key_val=29;  break;		
    			case 0x0615:key_val=30;  break;	    			
    			case 0x0614:key_val=26;  break;	
    			case 0x0613:key_val=31;  break;	
    			case 0x0612:key_val=27;  break;	
    			case 0x0611:key_val=22;  break;
    			case 0x0610:key_val=19;  break;
    				
    			case 0x062c:key_val=18;  break;	
    			case 0x062b:key_val=17;  break;	
    			case 0x0629:key_val=20;  break;
    			case 0x0626:key_val=24;  break;	
    			case 0x0622:key_val=32;  break;
    			case 0x0621:key_val=16;  break;	
    			case 0x0620:key_val=15;  break;
    			
    			case 0x063f:key_val=32;  break;	
    			case 0x0638:key_val=28;  break;			
    			default:break;
    		}
    		key_flag=1;   		
    	}
    }
    //asm("irq on");
}

//===============================================================
/*
//===============================================================
//函数名称:void PlaySnd_Auto(unsigned int uiSndIndex)
//函数功能:通过自动方式播放语音资源
//参数:1.uiSndIndex:语音资源序号 
//返回值:无
//=============================================================

void PlaySnd_Auto(unsigned int uiSndIndex)
{
	SACM_A2000_Initial(1);	//初始化语音播放,自动方式
	SACM_A2000_Play(uiSndIndex,1,0);//播放语音   通道1,禁止音量调节
	while((SACM_A2000_Status()&0x0001) != 0)	//判断当前是否在播放?返回最低位为1则表示当前在播放
	{
		SACM_A2000_ServiceLoop();
		*P_Watchdog_Clear = 0x0001;			
	}
	SACM_A2000_Stop(); //停止
}

//===============================================================

//===============================================================
//函数名称:void play_num(unsigned int num)
//函数功能:播放数字
//输入参数:将要播放的数字  (0-99)
//输出参数:无
//日期:2007.06.09
//===============================================================
void play_num(unsigned int num) 
{
	if(num>10)
	{
		PlaySnd_Auto(num/10);
    	   PlaySnd_Auto(10);
    	if(num%10!=0)
	    	PlaySnd_Auto(num%10);
	}
	else
	    PlaySnd_Auto(num);
}
		
//===============================================================
*/
//===============================================================
//函数名称:void main(void)
//函数功能:
//输入参数:
//输出参数:
//日期:2007.06.09
//===============================================================
void main(void)
{
	unsigned int i;
	unsigned int temp;
	asm("irq off");
	*P_IOA_Dir=0xffff;
	*P_IOA_Data=0x0000;
	*P_IOA_Attrib=0xffff;                
	*P_IOB_Dir=0x0000;   //IOB2输入
	*P_IOB_Data=0xffff;  //IOB2悬浮式输入
	*P_IOB_Attrib=0x0000;                                                      ;
	*P_INT_Ctrl=0x0100;  //IRQ3_EXT1
    *P_INT_Ctrl=0x0100;
	*P_SystemClock=0x0013;
	asm("irq on");
	while(1)
	{
		if(key_flag)
		{  
			key_flag=0;
    		*P_IOA_Data=key_val;
		}
		 asm("irq on");
		*P_Watchdog_Clear=0x01;	
	}	
}

//===============================================================

//===========================================================================
//main.c结束
//===========================================================================
			
	

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -