Side Menu

PM50串行放音程序示例

2017-5-6 11:03| 发布者: admin| 查看: 1059| 评论: 0

摘要: 下载:《PM50串行放音程序示例》//单片机用at89s51,晶振为12MHZ,上电自动从80h到8bh顺序放音,如此循环#include "reg51.h"#define uchar unsigned char//I/O脚的定义sbit tx_pin= P0^1; //数据脚sbit ...

下载:《PM50串行放音程序示例
 



//单片机用at89s51,晶振为12MHZ,上电自动从80h到8bh顺序放音,如此循环
 
#include "reg51.h"
#define uchar unsigned char
 
//I/O脚的定义
sbit     tx_pin=  P0^1;                    //数据脚
sbit     clk_pin= P0^2;                    //时钟脚
sbit     busy_pin=P0^3;                    //BUSY脚
sbit     rst_pin= P0^4;                    //复位脚
 
void delay(uchar time);                         //函数声明
void send_play(uchar sound_no);              //函数声明
 
//************主程序**************//
void main(void)
{
    uchar sound_number;                    //定义变量并赋初值                            
P0= P1=P2=P3=0xff;
   TMOD=0x10;                    //TMOD:计数器1,工作方式1,16位定时/计数,最大65536
EA=0;                               
delay(100);
 
rst_pin=0;                              //pm50复位
delay(10);                              //延时10MS
 
rst_pin=1;                              //复位管脚拉高
    delay(100);                             //复位后延时100ms
while(1)
{
    for(sound_number=0;sound_number<12;sound_number++)  //循环放音 
  {
    send_play(sound_number);           //放音子程序
  }
}
}
 //*************延时子程序(单位ms)************//
void delay(uchar time)
  uchar t;
  for(t=time;t>0;t--)
     {
        TH1=0xfc;                         
TL1=0x18;
        TR1=1;                                //计数器1启动
        while(TF1!=1)                         //计数溢出处理
{
}                       
        TF1=0;
        TR1=0;
     }
}
 
//***********放音子程序***************//
void send_play(uchar sound_no)                //sound_no为要放音的段数
{
  uchar sd = sound_no + 0x80;                 //第一段为80H
  uchar loop;
 
  clk_pin = 1;                              //时钟置1
  tx_pin  = 0;                              //数据端置0
  delay(50);                                //启动延时50MS
  tx_pin  = 1;                              //数据端置1
  delay(10);                                //启动延时10ms
  for(loop = 0;loop < 8; loop++)            //发送数据 8个
     {
        clk_pin = 0;                        //时钟置 0
        tx_pin = (sd & 0x01);               //先发低位              
        sd = sd >> 1;                       //右移一位
        delay(10);                          //发送频率50HZ( 1s/20ms )
        clk_pin = 1;                        //时钟置 1
        delay(10);
      }
        tx_pin = 1;                         //数据发送完,数据引脚置1
        while(busy_pin);                    //检测忙信号
}

鲜花

握手

雷人

路过

鸡蛋