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

📄 voice_test.c

📁 PM50语音芯片播放语音程序,采用串行方式,AVR单片机控制
💻 C
字号:
#include"iom16v.h"
#include"macros.h"

char address[8]={0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87};//语音地址
void delay_us(unsigned char  time)
{//微秒级延时程序     
 do
 {
  time--;
 }	
  while (time>1);
}	  

void delay_ms(unsigned int time)
{//毫秒级延时程序
 while(time!=0)
   {		
    delay_us(1000);
      time--;
   }
 }
 
void play_voice_init(void)//boyin程序初始化
{
 DDRA|=0x60;   //设置PA5,6为输出口.PA6发送地址,PA5为时钟信号,
 DDRA&=0x7f;  //设置PA7为输入口.表示忙音信号,拉低时表示PM50播放完毕.
 PORTA&=0xdf;  //将时钟信号PA5拉低
 PORTA|=0x80;  //将忙音信号PA7拉高
}

void play_voice(unsigned int num)  
//控制语音芯片pm50放音程序,
//输入连续播放录音段的数目和地址数组address[n]播放对应录音
{
   char i,add;  //add为替代地址
   unsigned int j=0;
   j=num;
   while(PINA&0x80)  //检查是否播放完毕,是则送播放地址,否则延时等待
   {
   delay_us(10);
   }
   PORTA&=0xbf;
   delay_ms(100);
   add=address[j];delay_us(10);
   for(i=0;i<8;i++) //发送八位地址
    {
	 PORTA&=0xbf;delay_us(10);        //先将PA6拉低使之不影响下一步取位
     PORTA|=((add&0x01)<<6);delay_us(10);//将低位取给PA6
     PORTA|=0x20; delay_us(10);               //将PA5拉高,上升沿PM50取走一个地址位
	 PORTA&=0xdf;  delay_us(10);              //将PA5拉低,一高一低相当于一个时钟周期 
     add=(add>>1); delay_us(10);              //地址右移一位,准备取下一个地址位
    }
} 

void main(void)
 {
  unsigned char i;
  play_voice_init();
  while(1) 
  {
  for(i=0;i<8;i++)
  play_voice(i);}
 }

⌨️ 快捷键说明

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