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

📄 a2000.c

📁 这是基于凌阳单片机设计的交通灯
💻 C
字号:

int *a,t,b,u;                       
main()
 {
  int c,l,i,key,j;                     
  
loop:     l= B_State();
           switch (l)
	     {case 0x01b0:key=time_short();break;
		  case 0x01d0:key=time_short();break;
		  case 0x02b0:key=time_short();break;
		  case 0x01e0:key=time_medium();break;
		  case 0x02d0:key=time_medium();break;
		  case 0x0330:key=time_medium();break;
		  case 0x0350:key=time_long();break;
		  case 0x0360:key=time_long();break;
	      case 0x02e0:key=time_long();break;
          default:goto loop;}  
          
      switch (u)
	     {default:break;
	      case 0x0001:goto loop1;}
                                               // 红灯-绿灯状态
i=60-key;
for(;i>5;i--)                                  //T-5秒的绿灯状态
  { a=time();                                  //取要显示的数的地址
    t=*a;
    t+=0x4000;
	show(t);                                   //送出第一个要显示的数和灯的状态
    a=a+1;                                
    red_green();	  
	YY1(); 
back1: t=*a;
      t+=0x4000;
	  show(t);
        a=a+1;                                //address地址加1
       	 red_green();                         //送红灯、绿灯、黄灯以及行人灯
	  for (j=0;j<0x0004;j++)	              //延时大约一秒 
		{for (b=0;b<0xffff;b++)                 
		{
		c=EXT1_INT_ON();                      //开外部中断并检测是否有车违规
      switch (c)
	 {case 0x0001:YY2();break;                //有车辆违规就播放警戒语音
	  case 0x0000:break;}}}
	if(t==0x5ffd) break;                      //没有车辆违规则继续返回显示
	else goto back1;	  
	}	


                                              //红灯-黄灯状态                                       
for(;i>0;i--)                         
  {	                                
back2:t=*a;
     t+=0x4000;
	  show(t);
       a=a+1;
       	red_yellow();                  	  
        for (j=0;j<0x0004;j++)	  
		{for (b=0;b<0xffff;b++)         
		{
		c=EXT1_INT_ON(); 
	  switch (c)
	 {case 0x0001:YY2();break;
	  case 0x0000:break;}}}
	if(t==0x5f86) break;
	else goto back2;	  
	} 
     u=1;
	 goto loop;

loop1:                          //绿灯-红灯状态          
i=60-key;
for(;i>5;i--)                         
  {a=time(); 
    t=*a;
    t+=0x8000;
	show(t);
    a=a+1;                     
    green_red();
    YY1();                  		  
back3:    t=*a;
    t+=0x8000;
	  show(t);
       a=a+1;
       	green_red();                   	  
        for (j=0;j<0x0004;j++)	  
		{for (b=0;b<0xffff;b++)        
		{
		c=EXT2_INT_ON(); 
      switch (c)
	 {case 0x0001:YY2();break;
	  case 0x0000:break;}}}
	
	if(t==0x9ffd) break;
	else  goto back3;	  
	}	

                                             //黄灯-红灯状态
                                           
for(;i>0;i--)                         
  { 
	                           
back4: t=*a;
     t+=0x8000;
	  show(t);
       a=a+1;
       	yellow_red();                   	  
        for (j=0;j<0x0004;j++)	  
		{for (b=0;b<0xffff;b++)        
		{
		c=EXT2_INT_ON();   
	  switch (c)
	 {case 0x0001:YY2();break;
	  case 0x0000:break;}}}
	if(t==0x9f86) break;
	else goto back4;	  
	}
    u=0;			
	goto loop;	
}


 //“红灯停、绿灯行,过马路请注意车辆!千万不要闯红灯!”//
int YY1()
{
#define		SPEECH_1		1
#define		DAC1			1
#define		DAC2			2
#define		Ramp_UpDn_Off	0
#define		Ramp_UpDn_On	3
#define		Manual			0
#define		Auto			1
#define		Full			1
#define		Empty			2
#define		Mode			0


#include	"A2000.h" 



  extern long   RES_TT_24K_SA,RES_TT_24K_EA; //定义语音资源的首末地址标号
  long  int Addr;							 //定义地址变量
  int	Ret = 0,f,c;						 //定义获取语音数据变量并初始化		
{Addr=RES_TT_24K_SA;					     //送入语音队列的首址	 
SACM_A2000_Initial(0);					     //非自动方式播放的初始化	 
SACM_A2000_InitDecoder(DAC1);			     //开始对A2000的语音数据以非自动方式解码		     
loop2:	      	    
while(1)   
{for (c=0;c<0xbb80;c++) 			         //判断一秒的时间是否到(播放速率48K字节) 
{if(SACM_A2000_TestQueue()!=Full)            //判断语音是否播放完成		              
{Ret =SP_GetResource(Addr);   
SACM_A2000_FillQueue(Ret);
Addr++;}
if(Addr< RES_TT_24K_EA)			//如果该段语音未播完,即未到达末地址时
SACM_A2000_Decoder();			//获取资源并进行解码,再通过中断服务子程序送入DAC通道播放
else
{SACM_A2000_Stop(); 			//否则,停止播放 
return (f);}                      //跳出循环,返回主程序
}               
t=*a;                               //显示刷新
switch (u)
{default:t+=0x4000;break;
 case 0x0001:t+=0x8000;break;}  
 show(t);
 a=a+1;       
 goto loop2;
}}}	           
	           
                                                    // “有人闯红灯啦!”	           
	           
int YY2()
{
#define		SPEECH_1		1
#define		DAC1			1
#define		DAC2			2
#define		Ramp_UpDn_Off	0
#define		Ramp_UpDn_On	3
#define		Manual			0
#define		Auto			1
#define		Full			1
#define		Empty			2
#define		Mode			0


#include	"A2000.h" 



 extern  long   RES_D1_24K_SA,RES_D1_24K_EA;             //定义语音资源的首末地址标号
  long  int Addr;							           	 //定义地址变量   ,t
  int	Ret = 0,f,c;								     //定义获取语音数据变量并初始化   
	{		
	      Addr=RES_D1_24K_SA;					         //送入语音队列的首址
	 
	      SACM_A2000_Initial(0);						 //非自动方式播放的初始化
	 
          SACM_A2000_InitDecoder(DAC1);			         //开始对A2000的语音数据以非自动方式解码
		     
loop3:		    
         while(1)
	       {   
		for (c=0;c<0x7d00;c++) 			                         //bb80
			  {  
		     	 if(SACM_A2000_TestQueue()!=Full)
		               {
			            Ret =SP_GetResource(Addr);   
	                    SACM_A2000_FillQueue(Ret);
			            Addr++;
		                }
                 if((t!=0x7fb0)&(Addr< RES_D1_24K_EA))	 //如果该段语音未播完,即未到达末地址时
			    	SACM_A2000_Decoder();			   	 //获取资源并进行解码,再通过中断服务子程序送入DAC通道播放
                else
				    {SACM_A2000_Stop(); 
                               			   	             //否则,停止播放
			      return (f);}
		       }   
                   t=*a;                                  //显示刷新
switch (u)
	     {default:t+=0x4000;break;
	      case 0x0001:t+=0x8000;break;}   
	                show(t);
                      a=a+1;
               goto loop3;
           }
    }
}

⌨️ 快捷键说明

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