📄 a2000.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 + -