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

📄 main.c

📁 人的进出门检测 发出语音播报 并有数码管显示商店的总来访人数及剩余人数
💻 C
📖 第 1 页 / 共 2 页
字号:
#include "key.h"  
#include "SPCE061A.h"
#include "s480.h"
#include "Dig.h"
#define P_Watchdog_Clear		(volatile unsigned int *)0x7012

void Delay(void);
 
unsigned int Status=0;           //状态标识0--下午,1--上午,默认为下午
unsigned int Tens;
unsigned int Ones;
unsigned int Alltime;
unsigned long int count=0;
int  IN=0;
int  OUT=0;
 
 
unsigned int g_Data[10] = {0x003f,0x0006,0x005b,0x004f,0x0066,0x006d,0x007d,0x0007,0x007f,0x006f};
						   //0,		1,	  2,	 3,		 4,	    5,	  6,	 7,		8,		9

void PlaySnd_Auto(unsigned int uiSndIndex,unsigned int uiDAC_Channel);

 

void PlaySnd_Auto(unsigned int uiSndIndex,unsigned int uiDAC_Channel)
{
	SACM_S480_Initial(1);						//初始化为自动播放方式
	SACM_S480_Play(uiSndIndex,uiDAC_Channel,3);	//播放
 	while((SACM_S480_Status()&0x0001) != 0)
 	{											//判断播放状态,如还在播放则继续循环
	 
		SACM_S480_ServiceLoop();				//播放系统服务程序  
		   				
		
		show();
		rshow(); 
		*P_Watchdog_Clear = 0x0001;			
 	}	
 	SACM_S480_Stop();							//停止播放
}
 
 
void  TPlayData(unsigned int Alltime)
 {
 	unsigned  shi;							//分别存放百和十的语音索引号
 	unsigned int Bw,Sw,Gw;						//分别存放百位\十位和个位数据
 	shi = 10;  									//初始化十的语音索引号 
	                      
	 
 	Sw =Alltime/10;						        //计算十位 
 	Gw =Alltime%10;								//计算个位
	
 	if(Sw!=0)
 	{                            
 		PlaySnd_Auto(Sw,3); 						//如果十位不为0,播放十位
 		PlaySnd_Auto(shi,3);							//播放十 
 	}
 	else
 		if((Bw!=0))								//如果百位不为0,十位为0,播放0
 		PlaySnd_Auto(Sw,3);                    
 	if(Gw!=0)									//如果个位不为0,播放个位
 		PlaySnd_Auto(Gw,3);                         
  	else
 		if((Bw==0)&&(Sw==0))					//如果百位、十位、个位都为0,播放0
 		PlaySnd_Auto(Gw,3);
 	*P_Watchdog_Clear = 0x0001;
 } 

int main(void)
{
	
	   unsigned int uiKey = 0;					            //定义键值,并初始化为0

	   *P_IOA_Data=0x0000;               
       *P_IOA_Attrib=0x0000;              //初始化IOA口为带上拉电阻输入口
       *P_IOA_Dir=0x0000;                 //A2(进门) A3(出门)为检测端口

	 			
	   *P_IOB_Dir = 0xffff;			      //初始化IOB口为输出口
       *P_IOB_Attrib = 0xffff;            // 初始化IOB口为同相
       *P_IOB_Data =0x0000;              // 段选为B0(a),B1,B2,B3,B4,B5,B6(g),位选为B8 B9   
	    Key_Init();							            	//调用键盘初始化程序,在key.asm中定义

	   PlaySnd_Auto(18,3);
	   
	    while(1)
  {
		 
           uiKey = Key_Get();                              //调用取键值程序获取键值,在key.asm中定义
      
           show();
           rshow();
 //        Delay();         
	 
		 switch(uiKey)
		 {	
		 	 case 0x0000:                 
            break;
		 	  case 0x0001: 	 Status=1; 	 	 //IOA1 按下     //上午
            break;
		 	  
		 	  case 0x0004:                  //IOA2 按下
		 	 Alltime=count*0.5;		 	 
		 	 TPlayData(Alltime);			 //播报已运行时间
		 	 Tens=Alltime/10;
             Ones=Alltime%10; 
		 	 while(*P_IOA_Data==0x0000)
		 {
			   showT();
			   rshowT();
		       *P_Watchdog_Clear = 0x0001;           //清看门狗 
		      
		 }	  
		 	 *P_Watchdog_Clear = 0x0001;           //清看门狗
			 break;
		 	 
		 	 
		 	 
		 	 case 0x0008:                       //若IOA4为高电平,即有人进门
                    	                    
           {           	  
          	   IN++;
               OUT++;
               if(IN==10)
               { 	 IN=1;
                     OUT=1;
                 PlaySnd_Auto(11,3);  
               }     
               if(OUT==10)
               {	 OUT=1;      
                  PlaySnd_Auto(11,3);  
               }          
             }
            
           if(Status==0)
		   {
		   PlaySnd_Auto(16,3);
           PlaySnd_Auto(13,3);
            
           }
            if(Status==1)
           {
           PlaySnd_Auto(14,3);
            PlaySnd_Auto(13,3);
           }
		    PlaySnd_Auto(12,3);	
		   			
 	       PlaySnd_Auto(IN,3);        
		 while(*P_IOA_Data==0x0000)
		 {
			   show();
		       rshow(); 
			   
		       
		       *P_Watchdog_Clear = 0x0001;           //清看门狗
		 }	  
 	           
 	         *P_Watchdog_Clear = 0x0001;           //清看门狗
			 break;
			
              
 //            Delay();
		 	 case 0x0010:               //若IOA5为高电平,即有人进门
              
                 OUT--;                         
		        if(Status==0)
		        {
		         
		         PlaySnd_Auto(17,3);
		         PlaySnd_Auto(15,3);
		        }
		        if(Status==1)
		        {
		          
		         PlaySnd_Auto(17,3);
		         PlaySnd_Auto(15,3);         
		        }
		         PlaySnd_Auto(OUT,3);
		         			
 	           
		 while(*P_IOA_Data==0x0000)
		 {
			   show();
		       rshow(); 
			   
		       
		       *P_Watchdog_Clear = 0x0001;           //清看门狗
		 }	 
		      
 	         *P_Watchdog_Clear = 0x0001;           //清看门狗
			 break;
		default:
			        	 
				break;	 
		     
	      
	  }	 
		 
		*P_Watchdog_Clear = 0x0001;
   }
	   
	 
}

void Delay(void)
{
	unsigned long uiCount;
	for(uiCount = 0;uiCount<=1500;uiCount++)
	{
		show();
		rshow();
		*P_Watchdog_Clear = 0x0001;                 //清看门狗
	} 
}


 void show()


{
        
      
	 
			  *P_IOB_Data=g_Data[IN]|0x0100;         
              *P_IOB_Data=g_Data[OUT]|0x0200;
			  *P_IOB_Data=g_Data[IN]|0x0100;         
              *P_IOB_Data=g_Data[OUT]|0x0200;
		      *P_IOB_Data=g_Data[IN]|0x0100;         
              *P_IOB_Data=g_Data[OUT]|0x0200;
               *P_IOB_Data=g_Data[IN]|0x0100;         
              *P_IOB_Data=g_Data[OUT]|0x0200;
			  *P_IOB_Data=g_Data[IN]|0x0100;         
              *P_IOB_Data=g_Data[OUT]|0x0200;
		      *P_IOB_Data=g_Data[IN]|0x0100;         
              *P_IOB_Data=g_Data[OUT]|0x0200;
		      *P_IOB_Data=g_Data[IN]|0x0100;         
              *P_IOB_Data=g_Data[OUT]|0x0200;
			  *P_IOB_Data=g_Data[IN]|0x0100;         
              *P_IOB_Data=g_Data[OUT]|0x0200;
		      *P_IOB_Data=g_Data[IN]|0x0100;         

⌨️ 快捷键说明

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