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

📄 main.c

📁 凌阳大学计划61板可使用的温度测试系统
💻 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 + -