一. 实验目的 1.掌握 PM50 系列芯片基本控制时序和控制方法。 2.能够应用 MCS-51 系列单片机和语音芯片设计实现语音应用电路。 二. 实验内容 设计实现公共汽车语音报站器,配有 4 个按键,通过单片机控制 PM50 播放语 音信息。公交车设为 5 站,每站都有 2 个提示语音: 1.前方到站***请下车的乘客做好准备 2.车已启动,请站稳,下一站*** 4 个按键分别实现以下 4 个功能: 1.语音播放、2 上一站、3 下一站、4 逆向报音 三. 实验原理 PM50 系列智能语音芯片既是语音播放电路,也是智能单片机。其开发设计 简单度、智能控制的简单度、整体性价比等指标要远胜过ISD。配合编程软 件可以开发出并行、串性、智能型等多种控制模式。PM50可直接驱动0.5W 功率的扬声器,使电路更加简单。串行模式下最大可分 128 段, K1 为数 据端, K2 为时钟端, O1 为忙信号端。时钟上升沿时数据端有效。语音段 的地址为 80H~FFH ,第一段的地址是 80H ,按顺序排列。 四. 电路设计 选择操作简单的串行模式,扬声器驱动选择 PWM 方式,连线图如下: 六、具体程序如下: #include<reg52.h> #define uchar unsigned char #define uint unsigned int #define Pm50_START 7 // 车启动 #define Pm50_REA DY 6 // 准备下车 #define Pm50_STOP 5 // 车到站 sbit P_Pm50_K1=P2^1; //数据 sbit P_Pm50_K2=P2^2; //时钟 sbit P_Pm50_O1=P2^0; //忙信号 bit Pm50_Way=0; //正向 char Station=0; //站次(0~4)5 站 uchar Kpnum=0; //key1按键次数 uchar Current=0; //当前站次 uchar K1num=1; //Key1键第二次按下的次数 void Delay_ulong(unsigned long z) //延时 z*1us { while(z--); } void Play_Pm50(uchar adr) //Pm50 放音 { uchar i; adr=adr+0x80; P_Pm50_K2=1; P_Pm50_K1=1; P_Pm50_K1=0; Delay_ulong(60000); //延时 60ms P_Pm50_K1=1; for(i=0;i<8;i++) { P_Pm50_K2=0; P_Pm50_K1=(bit)(adr&0x01); adr>>=1; P_Pm50_K2=1; } while(P_Pm50_O 1==1); //等待方音结束,结束时忙信号拉低 } void main(void) { while(1) { uchar tmp; tmp=P1&0x0f; if(tmp != 0x0f) { Delay_ulong(10000); if(tmp != 0x0f) { switch(tmp) { case 0x0e:Kpnum++; if(K1num==2) { K1num=1; if(Pm50_Way==1){Station--;if(Station<0)Station=4;} else{Station++;if(Station>4)Station=0;} } if(Kpnum==2) { Kpnum=0;Play_Pm50(Pm50_START);K1num++; if(Pm50_Way==0) {if(Current==4)Play_Pm50(0); else Play_Pm50(Current+1);} else{if(Current==0)Play_Pm50(4);else Play_Pm50(Current-1);} } else {Play_Pm50(Pm50_STOP);Play_Pm50(Station); Current=Station;Play_Pm50(Pm50_READY); };break; case 0x0d:Station++;if(Station>4)Station=0;Kpnum=0;K1num=0;;break; case 0x0b:Station--;if(Station<0)Station=4;Kpnum=0;K1num=0;;break; case 0x07:Pm50_Way=~Pm50_Way;Kpnum=0;break; default:b reak;//不止一个键按下 } |