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; //允许串口继续接收数据
- }
- }
- }
|