📄 main.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 + -