《匠人手记》推荐网上购书渠道:
  互动出版网(china-pub)   >>>
  当当网(dangdang)   >>>
  卓越亚马逊网    >>>
  淘宝网(taobao)   >>>
  更多购书渠道……   >>> 

设为首页加入收藏联系匠人管理入口21IC首页21IC博客21IC社区侃单片机回复的贴参与的贴

天气预报
百宝日历
载入中...

百宝专栏

载入中...
最新货色

载入中...

粉丝评论

载入中...

载入中...



百宝信息

载入中...

百宝流量

(2006-07-01开始)


匠人手记

公交语音提示(1)
程序匠人 发表于 2006-2-21 20:58:00  阅读全文 | 回复(0) | 引用通告 | 编辑

公交语音提示
skycanny 发表于 2006-2-21 11:19:00

 

 

//***************************FileName:Project.c**********************//
//***************************ICCAVR6.30编译**************************//
#i nclude <io8535v.h>      //AT90S8535寄存器定义;
#i nclude <macros.h>          //AT90S8535宏定义;
#i nclude "zimo.h"            //点阵LED字模
#define uchar unsigned char  //数据类型定义
#define uint unsigned int    //数据类型定义

uchar Key_Value;       //按键键值;
uchar State_Flag;       //站点标志;
uchar Ack_Flag;           //确认标志;
uchar Pre_Flag;           //预报标志;
uchar Move_Flag;       //滚动标志;
uchar Spec_Flag;       //特殊信息标志;
uchar EOM_Flag=1;          //信息结束标志;
uchar Pst_Flag;           //上、下行标志;
uchar State=1;        //站数;
uchar Spec;            //特殊信息数;
uchar Speed=20;           //文字滚动速度;
uchar Word_Number;          //显示字数;

//语音芯片第1~16段分别保存16站的站名信息
//第17段保存报站信息“到了,请要下车的乘客依次从后门下车”
//第18、19段分别保存预报信息“前方到站”、“请要下车的乘客做好下车准备”
//第20段保存欢迎信息及公交车线路说明
//第21、22段保存特殊提示信息
uchar Snd_Info[]={0,17};      //报站声音信息
uchar Snd_Pre_Info[]={18,0,19};     //预报声音信息
uchar Snd_Spec[]={21,22};      //特殊声音信息
uchar Snd_Welc=20;           //欢迎声音信息

//本例公交车语音报站系统包含16站
//所有的站名都以“第n站”代替,其中n为当前站数,n<16
//报站时显示屏滚动显示“第n站到了”
//预报站时显示屏显示“前方到站第n站”
//其中“第n站”字模存放在二维数组State n[3][32]中
//“到了”字模存放在二维数组DL[2][32]中
//“前方到站”字模存放在二维数组QFDZ[4][32]中
uchar text[32];               //当前显示文字
uchar next[32];                  //下一个显示文字

#pragma interrupt_handler Key_Scan:2   //定义按键中断INT0的中断服务程序
#pragma interrupt_handler Receive_EOM:3//定义语音中断INT1的中断服务程序

//****************************延时程序*******************************//
void delay(int t)
{while(t--) ;}

//****************************语音芯片驱动程序***********************//
void Set_CE(uchar level)               //定义ISD2560使能线为PA^4
{if(level==1) PORTA |=0x10;          
 else         PORTA &=0xef;
}

void Set_PD(uchar level)               //定义ISD2560的PD线为PA^3     
{if(level)    PORTA |=0x08;
 else         PORTA &=0xf7;
}

void Set_PR(uchar level)               //定义ISD2560的PR线为PA^2
{if(level)    PORTA |=0x04;
 else         PORTA &=0xfb;
}

void Set_A6(uchar level)               //定义ISD2560的A6/8/9线为PA^1
{if(level)    PORTA |=0x02;
 else         PORTA &=0xfd;
}

void Set_A0(uchar level)               //定义ISD2560的A6/8/9线为PA^1
{if(level)    PORTA |=0x01;
 else         PORTA &=0xfe;
}

//****************************语音搜索和播放程序****************************//
void Seek_Segment(uchar s)             //语音搜索程序
{Set_PD(1);                   //语音芯片复位
 delay(20000);
 Set_PD(0);
 Set_PR(1);                   //放音模式
 Set_A0(1);                    //M0模式
 while(s--)                   //快进s段
 {Set_CE(0);
  Set_CE(1);
  do NOP();
  while(EOM_Flag);                 //检测EOM标志位,为0时有效
  EOM_Flag=1;}
 Set_A0(0);                    //M6模式
}

void Play(void)                        //语音播放程序
{Set_CE(0);                   //CE线低电平触发芯片的放音操作
 Set_CE(1);
 do  NOP();
 while(EOM_Flag);                 //检测EOM标志位,为0时有效
 EOM_Flag=1;                  //重新赋EOM标志位为1
}

//****************************语音报站程序****************************//
void Inform(uchar m)                   //报站
{uchar i;
 if(Pst_Flag) Snd_Info[0]=m;           //若为上行方向,顺序报站
 else    Snd_Info[0]=17-m;        //若为下行方向,逆序报站
 Set_PD(1);                   //语音芯片复位
 delay(20000);
 Set_PD(0);
 for(i=0;i<2;i++)
 {Seek_Segment(Snd_Info[i]);        //搜索相应语音信息段
  Play();}             //播放
}

void Pre_Inform(uchar m)               //报站
{uchar i;
 if(Pst_Flag) Snd_Pre_Info[1]=m;       //若为上行方向,顺序预报站
 else    Snd_Pre_Info[1]=17-m;    //逆序预报站
 Set_PD(1);                   //语音芯片复位
 delay(20000);
 Set_PD(0);
 for(i=0;i<3;i++)
 {Seek_Segment(Snd_Pre_Info[i]);    //搜索相应语音信息段
  Play();}          //播放
}

void Special(uchar m)                  //播放特殊信息
{Set_PD(1);                   //语音芯片复位
 delay(20000);
 Set_PD(0);
 Seek_Segment(Snd_Spec[m]);         //搜索相应语音信息段
 Play();          //播放
}

void Welcome()                         //欢迎信息
{Set_PD(1);                   //语音芯片复位
 delay(20000);
 Set_PD(0);
 Seek_Segment(Snd_Welc);         //搜索相应语音信息段
 Play();             //播放
}

看《匠人手记》,与匠人同行!北航出版,正在热卖!

发表评论:
载入中...

芯片专题

器件专题

软件专题

硬件专题

综合专题

项目专题

原创专题

器件检测
LCD LED
按键 触摸键
E2PROM
电池 电机
电阻 电容 电感

指令系统
软件算法
编程规范
滤波算法
串行通讯

PCB设计
I2C PWM
红外遥控
充电技术
中断 ADC 

匠人手记
匠人夜话
网络心路
一周热点串烧
从零开始玩PIC
DIY旋转时钟

广告5号位 [投放]


学习板、开发板、编程器、下载器、仿真器(查看详情……)

广告3号位 [投放]

站内搜索


站外搜索


百度  google
mp3  歌词 
图片  FLASH 
知道  文档
新闻  词典 
地图  mp3 
软件  天网 
雅虎  爱问 
搜狗  讯雷 
网讯  华军 
天空 

21IC器件搜索
百宝箱分站
  • 《匠人的百宝箱》21IC站
  • 《匠人的百宝箱》21IC笔记团队
  • 《匠人手记》21IC书友会
  • 《匠人的百宝箱》MCUBLOG站
  • 《匠人的百宝箱》MCUBLOG笔记团队
  • 《匠人的百宝箱》EDN站
  • 《匠人手记》EDN书友会
  • 《匠人的百宝箱》与非网站
  • 《匠人的百宝箱》新浪站
  • 《匠人的百宝箱》百度站
  • 《匠人的百宝箱》网易126站
  • 《匠人的百宝箱》网易163站
  • 《匠人的百宝箱》互动出版网站
  • 广告4号位 [投放]

     
     

    匠人原创

    推荐阅读

    往日酷贴

     

    友情连接

     [更多酷站连接]

     

     

     

     

    [欢迎交换连接]

    [百宝箱之与非门分舵]

    [电脑圈圈的家当]

    [IC921的博客]

    [hotpower 的水潭]

    [八楼的呼吸]

    [柔月阁]

    [PIC论坛]

    [SMARTCODE电子书斋]

    [阿摆手记]

    [电子伙伴]

    [xwj的文君阁]

    [所长的BLOG]

    [海边淘沙]

    [单片机开发联盟]

    [数字电视之家]

    [软件开发之窗]

    [unaided的笔记]

    [小飞的笔记]

    [ICC AVR开发网]

    [我爱研发网]

    [infernal的笔记]

    [网址之家]

    [好东西网址大全]

    [美萍中文精选]

    [水牛的仓库]

    [逍遥电子]

    [ningpanda的博客]

    [雄鹰的空中加油站]

    [一网见天下]

    [Armoric]

    [股剩是怎样炼成的]

    [嵌入式365]

    [C-Design]

    [AVR猎手的地盘]

    [中国高校自动化网]

    [SunK]