📄 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.
//
//========================================================================================
// 工程名称: Temper.spj
// 功能描述: 用负温度系数热敏电阻进行温度采集并用语音提示温度值
// 温度范围:-20----80℃
// 文件来源: 《SPCE061单片机原理及应用技术》第八章 凌阳单片机应用及开发技术,第325页
// IDE环境: SUNPLUS u'nSPTM IDE 1.8.0(or later)
//
// 涉及的库: CMacro.lib、sacmv25.lib
//
// 组成文件: main.c
// FIQ.asm/hardware.asm/IR.asm/sys.asm
// hardware.inc/hardware.h
// 日期: 2002-6-12
//===========================================================================================
#include "a2000.h"
#define RSP_CURRENT_TEMP 00 //现在温度是
#define RSP_LOW_ZERO 01 //零下
#define RSP_NUM_BASE 02
#define RSP_NUM_TEN 12
#define RSP_CEL 13 //摄氏度
#define RSP_SORRY 14 //对不起
#define RSP_TEMP_OVER 15 //温度超出测量范围
//=========== 播放提示语音 ========================//
//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(); }
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(RSP_NUM_BASE);
if(Tem<0)
PlayRespond(RSP_LOW_ZERO); //零下
if((Tem/10)>1) //温度值的十位>1,报数字
PlayRespond(Tem/10+RSP_NUM_BASE);
if((Tem/10)>0) //十
PlayRespond(RSP_NUM_TEN);
if((Tem%10)!=0) //个位不为0则报
PlayRespond(Tem%10+RSP_NUM_BASE);
PlayRespond(RSP_CEL); //摄氏度
}
}
int Temper=0; //温度值
unsigned int Key=0; //键值
unsigned int TempAD=0; //温度的AD采样值
main()
{
System_Initial();
InitAD();
while(1)
{
Key=KeyScan();
if(Key==0x8000) //判断接IOA15的键是否被按下
{
InitAD();
TempAD=ReadAD(); //进行一次AD转换,ReadAD函数的返回值存在r1中。
Temper=76-0.1022*TempAD; //温度计算
if(Temper<-20 | Temper>80)
{
Clear_WatchDog();
Temper=0xFFFF;
} //温度超出范围
PlayVoice(Temper); //报温
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -