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

📄 f15play.c

📁 sta015t(mp3)的源程序
💻 C
📖 第 1 页 / 共 3 页
字号:
#define reg01   XBYTE[0x8100]
#define reg02   XBYTE[0x8200]
#define reg03   XBYTE[0x8300]
#define reg04   XBYTE[0x8400]
#define reg05   XBYTE[0x8500]
#define reg06   XBYTE[0x8600]
#define reg07   XBYTE[0x8700]
#define reg08   XBYTE[0x8800]
#define reg09   XBYTE[0x8900]
#define reg0a   XBYTE[0x8a00]
#define reg0b   XBYTE[0x8b00]
#define reg0c   XBYTE[0x8c00]
#define reg0d   XBYTE[0x8d00]
#define reg0e   XBYTE[0x8e00]
#define reg0f   XBYTE[0x8f00]
#define reg10   XBYTE[0x9000]
#define reg18   XBYTE[0x9800]



#define SEND_PORT   3502         //发送端口号
#define RECI_PORT   3501         //接收端口号

#define icmpprotocal 1
#define tcpprotocal  6
#define udpprotocal 17
#define combufend 1024
#define netbufend 2048


#define  i2cdelay   nop;nop;nop



struct  ethernet
{
     uchar  recievestatus;   //接收状态
     uchar  nextpage;        //下一个页                      估计此4个字节为网卡8019生成
     uint   length;           //以太网长度,以字节为单位,   而非以太网的首部
     uint   destnodeid[3];    //目的网卡地址    (有效3)
     uint   sourcenodeid[3];  //源网卡地址      (有效3)
     uint   protocal;         //下一层协议
     uchar  packet[1528];  //包的内容   (10)+18+1518=1536+(10)
};
    //IP包   仅当IHL=5时用 当不=5时作转换
struct ip
{
     uint head[9];          //以太网包头
     uchar verandihl;        //版本与头长度
     uchar typeofserver;     //服务类型
     uint totallength;      //总长度
     uint frameindex;       //IP帧序号
     uint segment;          //分段标志
     uchar ttl;             //生存时间
     uchar protocal;        //下一层协议
     uint crc;              //校验和
     uint sourceip[2];      //源IP
     uint destip[2];        //目的IP
     uchar packet[1508];    //IP包的内容  18+20+1498+(10)=1536+(10)
};
struct ippacket
{
     uint head[9];          //以太网包头
     uint ippacket[764];    //IP包的内容  18+ (759+5)*2=1536+(2*5)
};
struct arp
{
     uint head[9];            //以太网头  arp报文的内容总长28字节
     uint harewaretype;       //以太网为0x0001
     uint protocaltype;       //ip 为0X0800
     uchar halength;          //=0X06
     uchar palength;          //=0X04
     uint operation;          //操作  0X0001为请求   0X0002为应答  0X0003为反向地址请求 0X0004为反向地址应答
     uint sourcenodeid[3];    //源网卡地址
     uint sourceip[2];        //源IP地址
     uint destnodeid[3];      //目的网卡地址
     uint destip[2];          //目的IP地址
};
struct icmp                   //包含在IP包中,是IP的上层为0X01的应用
{
     uint head[9];            //以太网头
     uint iphead[10];         //IP头
     uchar type;              //0X08 PING请求 0X00 PING应答
     uchar option;            //0X00 PING
     uint crc;
     uint id;
     uint seq;
     uchar icmpdata[1500];       //18+20+8+ 1490+(10)=1536 +(10)
};
struct tcp
{
     uint head[9];
     uint iphead[10];
     uint sourceport;       //源端口
     uint destport;         //目的端口
     union w seqnumber;     //顺序号
     union w acknumber;     //确认号
     uchar offset;          //数据偏移量
     uchar control;         //连接控制
     uint window;           //流控
     uint crc;              //校验和 ,包括伪头部,TCP头部,数据
     uint urg;              //紧急指针
     uchar tcpdata[1478+20];   //TCP数据    18+20+20+1478=1536
};
struct udp
{
     uint head[9];
     uint iphead[10];
     uint sourceport;       //源端口
     uint destport;         //目的端口
     uint udplength;        //流控
     uint crc;              //校验和 ,包括伪头部,TCP头部,数据
     uchar udpdata[1490+20];   //TCP数据    18+20+8+1490=1536
};
     /*所有协议的共用体*/
union netcard
{
     struct{ uchar  bytebuf[1700];}bytes;
     struct{ uint wordbuf[850];}words;
     struct ethernet etherframe;
     struct tcp   tcpframe;
     struct udp  udpframe;
     struct ip   ipframe;
     struct arp   arpframe;
     struct icmp  icmpframe;
     struct ippacket ippacket;
};
xdata  union netcard rxdnet;       //接收以太帧结构
xdata  union netcard txdnet;       //发送以太帧结构

xdata  union u   server_id[3+1];     //服务器硬件地址
xdata  union u   serve_ip_high;      //服务器ip地址高位字节
xdata  union u   server_ip_low;       //服务器ip地址低位字节

xdata  union u   mycard_id[3+1];     //本机硬件地址
xdata  union u   mycard_ip_low;                 //本机ip地址低位字节
xdata  union u   mycard_ip_high;                //本机ip地址高位字节

//xdata  uchar test_code1=0;
//xdata  uchar test_code2=0;

bit    play_pause=0;               //暂时停机
xdata  uchar  i2c_err=0;
void   set_cpu();

bit    audio_test=0;           //是普通音频源还是试题音频源
bit    dsp_sbf=1;
xdata  uint   answ_len;     //答案长度
xdata  union u   ti_zfen;      //累计分
xdata  union u   xue_zfen;      //学生累计分
xdata  union u   ti_fen;       //当前题分
xdata  union u   ti_dfen;       //当前题得分
idata  union u   answerid;      //试卷源句柄
idata  uint    ti_tal;        //答卷总题数
idata  uchar   answer_type;    //答卷源类型
idata  uchar   ti_type;        //题类型

idata  uchar   key_ip=0;       //设置ip地址标志
idata  uint      frameindex=0;   //包的循序号
idata  uchar     txt_type;          //文本源类型
idata union   u txt_id;           //文本源句柄
idata union   u txt_len;          //文本源长度
idata uint    page_tal=0;        //文本的总页数
idata  union   u txt_page;        //文本的当前页
xdata  uchar   soft_vol;        //终端版本

xdata  record_step=0;
xdata  uchar   meter_code0=0xfd;
xdata  uchar   meter_code1=0xfd;
xdata  uchar   meter_code2=0xfd;

idata  uchar   moni_biaozhi=0;     //模拟广播标志
xdata  uchar   er_type;          //二进制源的内型
xdata  union   u er_id;           //二进制源句柄
xdata  uint    er_tal;           //二进制源的总长
xdata  uchar   bugg=0;           //调试标志       =0调试;=1工作


idata uchar   snd_type;          //音频源类型
idata union   u sundid;           //音频源句柄
idata union   u snd_len;          //音频源长度
idata uint    second_tal=0;        //音频源的总秒数
idata union   u snd_second;        //音频源的当前秒数


idata   uchar  mp3_t=0;
idata   uchar  adpcm_t=0;
idata   uchar  adpcm_err=0;
xdata   uint   mem_second[8+2];        //书签记忆数组
idata   uchar  mem_write_p=0;         //书签写入指针
idata   uint   mem_tonet;
idata   uchar  audio_req=0;        //
idata   uchar  audio_write=0;      //
idata   uchar  info_no=0;      //信息编码
idata   uchar  mp3_err;

void    delayms(uint);
void    init_cpu();                //cpu初始化
void    do_reci_net();     //从网卡接收数据
void    doarp();
void    doicmp();
void    doudp();
void    doip();    //通过ip地址判断是自己的包
void    send_data_net(uchar);      //执行终端向服务器发送协议,num:协议编号
void    udp_send_net(uint);
void    sendtxdnet(uint);       //数据发送到网卡

void    write_mycards_id();     //将硬件地址写入网卡PAR0~5
void    init_8019();          /*网卡初始化*/
void    net_in_doing();           //网卡接收的数据的处理
uint    checkudpcrc();
void    overrun();
void    dotcp();
void    ziyuan_qinqiu();
uint    createipheadcrc();
uint    createicmpcrc();
void    switchtrack(uchar);       //声道模式
uint    createipheadcrc1();
void    lianfa();            //按键连发
void    key_click_tchtxt(uint);    //教师文本键盘
void    key_click_tchfile(uint);   //教师目录文本键盘
void    key_click_answer(uint);    //答卷键盘
void    key_click_tchmp3(uint);    //教师mp3音频键盘
void    key_click_tchadpcm(uint);  //教师adpcm音频键盘
void    key_click_stutxt(uint);    //学生文本键盘
void    key_click_stufile(uint);   //学生目录文本键盘
//void    key_click_stutest(uint);   //学生试题文本键盘
void    key_click_stump3(uint);    //学生mp3音频键盘
void    key_click_stuadpcm(uint);  //学生adpcm音频键盘
void    key_click_denglu(uint);    //登录键盘
void    key_click_setip(uint);     //设置ip键盘
void    key_click_datadown(uint);  //数据下载键盘
//void    key_click_answer(uint);    //临时答案键盘
void    key_click_comon(uint);     //公共键盘
void    key_lianfa_comon(uint);    //连发公共键盘
void    key_click_setip(uint);     //ip设置键盘
void    filter_init();             //初始化滤波器
void    denglu_start();            //登录初始化
void    ipset_start();             //ip设置初始化
void    rectime_ctl();             //录音时间
void    mp3_init();    //mp3数据初始化输入
void    acok(uchar);
void    page(uchar);
void    readhead();
void    readonepacket();      //从8019读一个包到rxdnet
void    arp_req();
void    cls_lcd();
void    ram_test();
uchar   chr_bit(uint);
uint    protocal_filter;      //协议滤波器
idata   uchar  answer;             //抢答的答案
void    char_input(uchar);
idata   uchar   hang=1;             //文本的行数

idata   uint   net_reci_write_p;
idata   uint   net_reci_read_p;
bit     bbb=0;
idata   uchar lianfa_val=0;
idata   uchar  jx_state=3;
void    jx_ctl(uchar);

////dsp.h
uchar code ch1302[]="  正在连接服务器,请等待....";
uchar code ch1303[]="  OK!与服务器连接成功......";

//uchar code ch1402[]="网卡溢出!   ";
//uchar code ch1403[]="网卡校验错   ";
//uchar code ch1404[]="PING成功     ";
//uchar code ch1405[]="UDP校验错    ";
uchar code ch1406[]="正呼叫教师";
//uchar code ch1407[]="             ";
//uchar code ch1408[]="非法用户  ";
//uchar code ch1409[]="文本请求败   ";
//uchar code ch140a[]="MP3_BF溢出   ";
//uchar code ch140b[]="音频请求败   ";
uchar code ch140c[]="词库未记载";
uchar code ch140d[]="无效按键! ";
//uchar code ch140e[]="书签         ";
//uchar code ch1413[]="网页超上界   ";
//uchar code ch1423[]="网页超下界   ";
//uchar code ch1433[]="收超长数据   ";
//uchar code ch1434[]="IP包校验错   ";
//uchar code ch1435[]="DSP接收满    ";
//uchar code ch1436[]="DSP读写错    ";
//uchar code ch1437[]="UDP发送错    ";
//uchar code ch1438[]="DSP空        ";
//uchar code ch1439[]="采集错误     ";
//uchar code ch143b[]="dsp错误      ";
//uchar code ch143c[]="暂无帮助     ";

uchar code ch1701[]=" 第   题信息(共   题) ";
uchar code ch1702[]="用户登陆,请输入  ";
uchar code ch1703[]="座号设置,按方向键选择";
uchar code ch1704[]="英译汉";
uchar code ch1706[]="书签信息";
uchar code ch1707[]="您设置了新的书签";
uchar code ch1708[]="课堂提示";
uchar code ch170a[]="在线帮助";

uchar code ch1801[]="第   题(共   题)得分:应得[   . ]实得[   . ];本卷得分:应得[   . ]实得[   . ]      ";
uchar code ch1802[]="学号:密码:  ";
uchar code ch1803[]="组号:行号:  ";
uchar code ch1805[]="教师正在向全班授课,  请认真听讲!   ";
uchar code ch1806[]="您正在接受别人的会话示范! ";
uchar code ch1807[]="请您参与会话练习! ";
uchar code ch1808[]="教师正在与您单独对讲! ";
uchar code ch180a[]="RAM测试失败";
uchar code ch180b[]="网络测试通过";
uchar code ch180c[]="网络测试失败";
uchar code ch180d[]="mp3播放";
uchar code ch180e[]="mp3录音";
uchar code ch180f[]="AD开关";
uchar code ch1810[]="BC开关";
uchar code ch1811[]="机芯";
uchar code ch1812[]="陷波";
uchar code ch1813[]="偏磁";
uchar code ch1814[]="抹音";
uchar code ch1815[]="录音";


uchar code ch666[] ="学号:密码:新密:确认:";
uchar code ch777[] ="当前选中";
uchar code ch888[] ="座号";
uchar code ch999[] ="测试,正常吗? ";
xdata  uchar f_txt[]="                          ";         //副文本缓冲区


idata uchar ft_len=0;   //当前对话框标题长度
idata uchar fw_len=0;   //当前对话框文本长度
idata uchar f_hx_temp=1;
idata uchar f_hy_temp=5;
void  init_data_moni();                //系统数据初始化
void  init_data_shuzi();                //系统数据初始化
void  digistate(uchar state);     //进入数字节目不同模式
void  chip_mode(uchar);           //改变dsp工作模式
void  savetomp3buff(uchar dat);
void  display_cmos();

void  mp3_todsp();
void  setadc();
void  setvolume();
void  seteq();  //设置音色
void  switchtrace();
bit   recall();
void  bstop();
void  bstart();

void  bwrite(uchar);
uchar bread();
void  writemem(uchar,uchar);      //向015写入一个字节
void  readadpcm();
uchar readmemory(uchar);
void  plus(uchar);
void  bwrite_z(uchar);
uchar bread_z();
void  readadpcm_z();
uchar readmem_z(uchar);
void  writemem_z(uchar,uchar);      //向015写入一个字节
void  init_dsp();                  //sta015初始化
void  talk_vol(uchar);             //CMOS音量控制
void  cmos_ctl();                  //cmos状态控制
void  cmos_ctl1();
void  cpu_state();                //cpu初始化
void  send_out();
void  test_ctl();
void  reset_sta015();



#define BUFF_SIZE  7620
#define MP3_BUFF_MAX  9000
xdata   uchar  mp3_buff[MP3_BUFF_MAX+20];    //mp3数据缓冲区
uint    mp3_write_p=0;                //mp3写入指针
uint    mp3_read_p=0;                 //mp3读出指针
uint    mp3_buff_len=0;               //mps未读数据长度

#define  ADPCM_BUFF_MAX    9000//10800
xdata  uchar  adpcm_buff[ADPCM_BUFF_MAX+20];         //adpcm数据缓冲区
idata uint   adpcm_write_p=0;              //adpcm写入指针
idata uint   adpcm_read_p=0;
idata uint   adpcm_len=0;

idata uchar  key_yes=0;               //=1按键有效
idata uchar  call_state=0;        //呼叫状态01呼叫

#define  SET_REC        0x01       //录音
#define  SET_PLAY       0x02       //放音
#define  SET_PAUSE      0x03       //暂停
#define  SET_FAST       0x04       //快进
#define  SET_FAW        0x05       //快倒
#define  SET_STOP       0x06       //停止
#define  SET_JMP        0x07       //定位
#define  SET_GUANGBO    0x08       //广播

xdata  uchar  pack_num=0;
xdata  uchar  cidai_vol=1;         //磁带机音

⌨️ 快捷键说明

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