📄 main.c
字号:
//===============================================================
//
// The information contained herein is the exclusive property of
// Sunplus Technology Co. And shall not be distributed, reproduced,
// or disclosed in whole in part without prior written permission.
//
// (C) COPYRIGHT 2001 SUNPLUS TECHNOLOGY CO.
// ALL RIGHTS RESERVED
//
// The entire notice above must be reproduced on all authorized copies.
//
//==============================================================
//============================================================
// 工程名称:infearedthermommeter
// 作者: (email: xinyan@sunnorth.com.cn)
// 联系方式: 010-62981668-2919
// 适应芯片: SPCE061A
// 实现功能: 多功能提醒器
//
// 系统要求: PC with CPU 233MHz,128MB RAM,
// SUNPLUS u'nSPTM IDE 1.6.2(or later)
//
// 涉及的库:(a) C-Lib: (CMacro.lib);
// (b) SACM-Lib: SacmV26.lib
//
// 组成文件:
// main.c
// boot.asm/hardware.asm
// drive.c/isr.c/iKey.c/voice.c
// 连接:
// V-->3.3v
// D-->IOA15
// C-->IOB8
// G-->GND
// A-->Key-->GND
//
// 当前版本: V1.0
// 日期: 2002-11-19
//
// 参考文件:
// 维护记录:
//--------------------------------------------------------------------------------------------------------
// Version YYYY-MM-DD-INDEX Modified By Description
// V1.0.0 2004-11-19 by Xinyan Liu update fix bug of …add SpeedContol
//===============================================
#define ClearWDog (*((volatile unsigned char *) 0x7012))=1
#define P_IOA_Data (volatile unsigned int *)0x7000
#define P_IOB_Buffer (volatile unsigned int *)0x7006
#define P_IOB_Data (volatile unsigned int *)0x7005
unsigned int uiFlag[16],uiSum=0,uiClock=1,uiSumFlag=0,uiWR=0;
//========================================================================================
//函数名称 : F_Tempplay(float temp)
//描述 : 温度播报函数
//入口参数 : 温度
//出口 : 无
//========================================================================================
void F_Tempplay(float temp)
{
int iShow[6]; //播报数存储数组
temp=temp*100;
iShow[5]=temp/10000;
iShow[4]=(temp/1000);
iShow[4]=iShow[4]%10;
iShow[3]=(temp/100);
iShow[3]=iShow[3]%10;
iShow[2]=(temp/10);
iShow[2]=iShow[2]%10;
iShow[1]=(temp);
iShow[1]=iShow[1]%10;
// F_PlayS480(11);
if(iShow[5]!=0)
{
play(iShow[5]);
F_PlayS480(15);
}
if(iShow[4]!=0)
{
play(iShow[4]);
F_PlayS480(10);
}
else F_PlayS480(0);
play(iShow[3]);
F_PlayS480(14);
play(iShow[2]);
play(iShow[1]);
F_PlayS480(18);
}
//========================================================================================
//函数名称 : main()
//描述 : 主函数
//入口参数 : 无
//出口 : 无
//========================================================================================
main()
{
int i,j,k,TData=0,iKey=0,iKeyture=0,Item,MSB,LSB,SUM,CR,iFlag=0,iTest[10],iDataFlag=0,iShow[6],iLastFlag=0;
float temp,temp1;
F_IOSET();
F_IrqInti();
i=0;
i=*P_IOB_Buffer;
i=i|0x0100;
*P_IOB_Data=i;
i=0;
i=*P_IOB_Buffer;
i=i|0x0200;
*P_IOB_Data=i;
while(1)
{
ClearWDog;
if(uiSum==0xaaaa) //开始一帧数据接收
{
iTest[0]=uiFlag[0]|uiFlag[1]|uiFlag[2]|uiFlag[3]|uiFlag[4]|uiFlag[5]|uiFlag[6]|uiFlag[7]|uiFlag[8]|uiFlag[9]|uiFlag[10]|uiFlag[11]|uiFlag[12]|uiFlag[13]|uiFlag[14]|uiFlag[15];
uiSum=0;
if((iTest[0]&0xff)!=0&&(iTest[0]&0xff00)!=0xff00)
{
uiSum=0;
while(uiSum!=0xaaaa)ClearWDog;
iTest[1]=uiFlag[0]|uiFlag[1]|uiFlag[2]|uiFlag[3]|uiFlag[4]|uiFlag[5]|uiFlag[6]|uiFlag[7]|uiFlag[8]|uiFlag[9]|uiFlag[10]|uiFlag[11]|uiFlag[12]|uiFlag[13]|uiFlag[14]|uiFlag[15];
uiSum=0;
while(uiSum!=0xaaaa)ClearWDog;
iTest[2]=uiFlag[0]|uiFlag[1]|uiFlag[2]|uiFlag[3]|uiFlag[4]|uiFlag[5]|uiFlag[6]|uiFlag[7]|uiFlag[8]|uiFlag[9]|uiFlag[10]|uiFlag[11]|uiFlag[12]|uiFlag[13]|uiFlag[14]|uiFlag[15];
uiSum=0;
while(uiSum!=0xaaaa)ClearWDog;
iTest[3]=uiFlag[0]|uiFlag[1]|uiFlag[2]|uiFlag[3]|uiFlag[4]|uiFlag[5]|uiFlag[6]|uiFlag[7]|uiFlag[8]|uiFlag[9]|uiFlag[10]|uiFlag[11]|uiFlag[12]|uiFlag[13]|uiFlag[14]|uiFlag[15];
uiSum=0;
while(uiSum!=0xaaaa)ClearWDog;
iTest[4]=uiFlag[0]|uiFlag[1]|uiFlag[2]|uiFlag[3]|uiFlag[4]|uiFlag[5]|uiFlag[6]|uiFlag[7]|uiFlag[8]|uiFlag[9]|uiFlag[10]|uiFlag[11]|uiFlag[12]|uiFlag[13]|uiFlag[14]|uiFlag[15];
i=0;
i=*P_IOB_Buffer;
i=i|0x0200;
*P_IOB_Data=i;
if(uiWR==1) //确定写入数据
{
while(uiSum!=0xaaaa)ClearWDog;
iTest[1]=uiFlag[0]|uiFlag[1]|uiFlag[2]|uiFlag[3]|uiFlag[4]|uiFlag[5]|uiFlag[6]|uiFlag[7]|uiFlag[8]|uiFlag[9]|uiFlag[10]|uiFlag[11]|uiFlag[12]|uiFlag[13]|uiFlag[14]|uiFlag[15];
while(uiSum!=0xaaaa)ClearWDog;
iTest[2]=uiFlag[0]|uiFlag[1]|uiFlag[2]|uiFlag[3]|uiFlag[4]|uiFlag[5]|uiFlag[6]|uiFlag[7]|uiFlag[8]|uiFlag[9]|uiFlag[10]|uiFlag[11]|uiFlag[12]|uiFlag[13]|uiFlag[14]|uiFlag[15];
while(uiSum!=0xaaaa)ClearWDog;
iTest[3]=uiFlag[0]|uiFlag[1]|uiFlag[2]|uiFlag[3]|uiFlag[4]|uiFlag[5]|uiFlag[6]|uiFlag[7]|uiFlag[8]|uiFlag[9]|uiFlag[10]|uiFlag[11]|uiFlag[12]|uiFlag[13]|uiFlag[14]|uiFlag[15];
while(uiSum!=0xaaaa)ClearWDog;
iTest[4]=uiFlag[0]|uiFlag[1]|uiFlag[2]|uiFlag[3]|uiFlag[4]|uiFlag[5]|uiFlag[6]|uiFlag[7]|uiFlag[8]|uiFlag[9]|uiFlag[10]|uiFlag[11]|uiFlag[12]|uiFlag[13]|uiFlag[14]|uiFlag[15];
while(uiSum!=0xaaaa)ClearWDog;
iTest[5]=uiFlag[0]|uiFlag[1]|uiFlag[2]|uiFlag[3]|uiFlag[4]|uiFlag[5]|uiFlag[6]|uiFlag[7]|uiFlag[8]|uiFlag[9]|uiFlag[10]|uiFlag[11]|uiFlag[12]|uiFlag[13]|uiFlag[14]|uiFlag[15];
while(uiSum!=0xaaaa)ClearWDog;
iTest[6]=uiFlag[0]|uiFlag[1]|uiFlag[2]|uiFlag[3]|uiFlag[4]|uiFlag[5]|uiFlag[6]|uiFlag[7]|uiFlag[8]|uiFlag[9]|uiFlag[10]|uiFlag[11]|uiFlag[12]|uiFlag[13]|uiFlag[14]|uiFlag[15];
while(uiSum!=0xaaaa)ClearWDog;
iTest[7]=uiFlag[0]|uiFlag[1]|uiFlag[2]|uiFlag[3]|uiFlag[4]|uiFlag[5]|uiFlag[6]|uiFlag[7]|uiFlag[8]|uiFlag[9]|uiFlag[10]|uiFlag[11]|uiFlag[12]|uiFlag[13]|uiFlag[14]|uiFlag[15];
}
uiSum=0; //计算最终温度值
uiSumFlag=0;
if((iTest[4]&0xf000)==0xf000)
{
iDataFlag++;
Item=(iTest[0]&0xff00)>>8;
MSB=(iTest[0]&0x00ff);
LSB=(iTest[1]&0xff00)>>8;
SUM=(iTest[1]&0x00ff);
CR=(iTest[2]&0xff00)>>8;
asm("int off\n");
for(i=0;i<0xff;i++);
if(Item==0x66&&CR==0x0d)
{
iLastFlag=1;
temp1=((MSB<<8)|LSB);
temp1=temp1/16;
temp1=temp1-273.15;
asm("int fiq,irq\n");
}
if(Item==0x4c&&CR==0x0d)
{
temp=((MSB<<8)|LSB);
temp=temp/16;
temp=temp-273.15;
if(iLastFlag==1)
{
F_PlayS480(11);
F_PlayS480(16);
F_Tempplay(temp1);
}
F_PlayS480(17);
F_Tempplay(temp);
asm("int fiq,irq\n");
}
}
}
}
asm("int fiq,irq\n");
if(*P_IOA_Data&0x0001) iKey++;
if(iKey>0xf0) iKeyture=1;
switch(iKeyture)
{ //确定有键按下
case 0x0001:
uiSum=0;
i=*P_IOB_Buffer;
i=i&0xfdff;
*P_IOB_Data=i;
iKey=0;
iKeyture=0;
break;
case 0x0000:
break;
default:
break;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -