单片机学习小组
直播中

李珏

8年用户 171经验值
私信 关注

基于51单片机PWM做的wav语音报时程序

stc8051单片机的PWM做的wav语音报时程序
  


主程序预览:
  • #include
  • #include "Myfun.h"
  • #include  "uart.h"
  • #include "stdio.h"
  • #define dian 11
  • #define fen 12
  • #define uchar unsigned char
  • #define uint unsigned int
  • #define uchar unsigned char
  • #define uint unsigned int
  • int UART1_Recv_count;  //接收计数
  • bit UART1_Overflow_Flag;   //缓冲区满标志
  • void main()
  • {
  • // uchar i;
  • PWMInit();         //初始化
  • settimer1(250);                  //约11k读取   晶振使用30m都可以
  • P1M0=0x08;
  • P1M1=0x00;          //1.3强拉输出
  • ////////////////////////////////////////////////////
  • P3M0=0x40;
  • P3M1=0x00;          //P3.6强拉输出 led
  •    LED=1;
  •    uartInit();
  •    EA=1;  //开总中断
  •    ES=1;
  •    // LED=0;
  • //transmitString("开始。。。。");
  •                UART1_Recv_count = 0;            //缓存清零
  •               UART1_Overflow_Flag=0;        //允许串口继续接收数据
  •    while(1)
  •    {
  •     if (UART1_Overflow_Flag==1)     //串口中断数据接收完毕,开始处理   接收格式言 时分字符形式:1022就是10点22分
  •       {
  • /////////////////播现在是北京时间/////////////////////////
  •         delay1();
  •                 soundtospeak(13);
  •         delay1();
  • /////////////////播时的"20"语音/////////////////////////
  •    if((UART1_Recv_BUF[0]-0x30)==2)// 播20语音
  •               {
  •                               soundtospeak(2);
  •                delay1();
  •                           soundtospeak(10);
  •                delay1();
  •                    }
  • ///////////////////播时的"10"语音//////////////////////
  •    if  ((UART1_Recv_BUF[0]-0x30)==1)//小于9大于19点
  •                           {
  •                      soundtospeak(10);         //播10语音
  •              delay1();
  •                       }
  • /////////////////////播时"x"时语音////////////////////////////////
  •         if  (((UART1_Recv_BUF[0]-0x30)==1)&&((UART1_Recv_BUF[1]-0x30)>0)||(((UART1_Recv_BUF[0]-0x30)==2)&&(0<(UART1_Recv_BUF[1]-0x30))&&((UART1_Recv_BUF[1]-0x30)<4))||((UART1_Recv_BUF[0]-0x30)==0))//如为整点不报0语音
  •             {
  •             soundtospeak(UART1_Recv_BUF[1]-0x30); //此函数将读完一个数才退出
  •             delay1();
  •                 }
  •             soundtospeak(dian);        //播"点"语音
  •             delay1();
  • ////////////////以下为分时间语音//////////////////////////////////////
  •            if((UART1_Recv_BUF[2]-0x30)==5)// 播50语音
  •               {
  •                               soundtospeak(5);
  •                delay1();
  •                           soundtospeak(10);
  •               delay1();
  •                  if  ((UART1_Recv_BUF[3]-0x30)==0)        //如果分钟为整分情况下
  •                     {
  •                     soundtospeak(fen);        //播"分"语音
  •             delay1();
  •                         }
  •                    }
  •           if((UART1_Recv_BUF[2]-0x30)==4)// 播40语音
  •               {
  •                               soundtospeak(4);
  •                delay1();
  •                           soundtospeak(10);
  •               delay1();
  •             if  ((UART1_Recv_BUF[3]-0x30)==0)
  •                     {
  •                     soundtospeak(fen);        //播"分"语音
  •             delay1();
  •                         }
  •                    }
  •            if((UART1_Recv_BUF[2]-0x30)==3)// 播30语音
  •               {
  •                               soundtospeak(3);
  •                delay1();
  •                           soundtospeak(10);
  •               delay1();
  •                   if  ((UART1_Recv_BUF[3]-0x30)==0)
  •                     {
  •                     soundtospeak(fen);        //播"分"语音
  •             delay1();
  •                         }
  •                    }
  •            if((UART1_Recv_BUF[2]-0x30)==2)// 播20语音
  •               {
  •                               soundtospeak(2);
  •                delay1();
  •                           soundtospeak(10);
  •               delay1();
  •                 if  ((UART1_Recv_BUF[3]-0x30)==0)
  •                     {
  •                     soundtospeak(fen);        //播"分"语音
  •             delay1();
  •                         }
  •                    }
  •            if  ((UART1_Recv_BUF[2]-0x30)==1)//播10语音
  •                 {
  •                      soundtospeak(10);
  •              delay1();
  •              if  ((UART1_Recv_BUF[3]-0x30)==0)
  •                     {
  •                     soundtospeak(fen);        //播"分"语音
  •             delay1();
  •                         }
  •                 }
  •          if(((UART1_Recv_BUF[3]-0x30)>0))
  •           {
  •            if  ((UART1_Recv_BUF[2]-0x30)==0)//播0语音
  •                 {
  •                      soundtospeak(0);
  •              delay1();
  •                 }
  •           }
  • /////////////////////播"x"分语音////////////////////////////////
  •           if ((((UART1_Recv_BUF[2]-0x30)==0)&&((UART1_Recv_BUF[3]-0x30)>0))||((UART1_Recv_BUF[3]-0x30)>0) )
  •           {
  •                     soundtospeak(UART1_Recv_BUF[3]-0x30); //此函数将读完一个数才退出
  •             delay1();
  •             soundtospeak(fen);        //播"分"语音
  •             delay1();
  •            }
  • //////////////////////////////////////////////////////
  •               UART1_Recv_count = 0;            //缓存清零
  •               UART1_Overflow_Flag=0;        //允许串口继续接收数据
  •       }
  •    }
  • }





更多回帖

发帖
×
20
完善资料,
赚取积分