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

📄 main.c.bak

📁 ISD1700语音芯片驱动程序
💻 BAK
📖 第 1 页 / 共 2 页
字号:
/************************************************************************** 
SPI总线操作ISD1760的录放音程序。   循环播放!!!!!!!!!!!!!!
**************************************************************************/ 
#include <C8051F236.h>                 
#include <intrins.h>
#include "SPI.h" 

#define SYSCLK          24000000            // 系统工作频率
#define BAUDRATE        9600                // 串口工作波特率

unsigned char bdata SR0_L; 
unsigned char bdata SR0_H; 
unsigned char bdata SR1; 
unsigned char ID,APCL=0,APCH=0;
unsigned char Uart_Temp;
unsigned char KEY_Value;
sbit HandUp=P1^7;
unsigned char Need_to_Send=0;
unsigned char Uart_Coun=0;
unsigned char Uart_Flag=0;
unsigned char serial_rx_buff[8];
unsigned char serial_tx_buff[8];
 
/************************************************************************** 
     函数初始化
**************************************************************************/
void SYSCLK_Init(void);
void PORT_Init();
void UART_Init();
void Timer0_Init(void);
void Timer1_Init(void);
void Interupt_Init(void);
void delay_ms(unsigned int);
void ISD_Init(void)	;
//void ISD_CHK_MEM(void);
void ISD_PU(void);
void ISD_Stop(void);
void ISD_Reset(void);
void ISD_PD(void);
unsigned char ISD_SendData(unsigned char);
//void SendChar(unsigned char);// 调试用的串口发送数据
void SendString (unsigned char *str, unsigned char strlen);
void RdStatus(void);
void ISD_Play();
void ISD_FWD();
void ClrInt(void);
//void ISD_WR_NVCFG(void);
void ISD_WR_APC2(unsigned char);
//unsigned char RD_DevID(void);
//void RdAPC(void);
//void Erase_All(void);
//void SetERASE(unsigned char);
//void SetREC(unsigned  char);
//void SetPLAY(unsigned char);
//void GetToneAdd(unsigned char, unsigned int *ipStartAdd, unsigned int *ipEndAdd);

/************************************************************************** 
    其实只需要放音程序   ??????????????????????????这是最后要的主函数保留
    功能原型:void ISD_Play(void)
    功能:放音 
**************************************************************************/ 
void main()
{
   //int i;
   WDTCN = 0XDE;    // 此条及下条 禁止看门狗
   WDTCN = 0XAD;
   SYSCLK_Init(); 
   PORT_Init();
   UART_Init();     //  串口初始化
   Timer0_Init();
   Timer1_Init();
   Interupt_Init();
   ISD_Init();
   HandUp=0;
   KEY_Value=0;

   while(1)
   {
   	if (TL0>50)
   	{  		
   		HandUp=1;
			TL0=0;
			TL1=0;
			//播放欢迎词
			//播放功能提示:烧开水按1,做咖啡按2,清洗按3,除垢按4,做蒸汽按5,取消按6

			//for (i=0;i<=9;i++)	 //5是播放的段数,这里是顺序播放所有的语音,测试用!!!!!!!!!!
		  //{			   
		  //	  ISD_Play();    //在函数里面已经写了,当播放指令出错时,从新播放		    
		  //		while((!(SR1&0x01))||(SR1&0x04)); //当PLAY=1,RDY=0
		  //   ISD_FWD();
		  //		while(1);
		  //}
		  //ISD_PD();   //播放完则下电模式

			while(TL1<2)
			{
			  if (KEY_Value)
				{
				  //按键处理
					switch(KEY_Value)
				  {
					case 1:
						serial_tx_buff[0]=FRAME_WATER;
						Need_to_Send=1;
					  break;
					case 2:
						serial_tx_buff[0]=FRAME_NOW_COFF;
						Need_to_Send=1;
						break;
					case 3:
						serial_tx_buff[0]=FRAME_CLEAN;
						Need_to_Send=1;
						break;
					case 4:
						serial_tx_buff[0]=FRAME_DIRTY;
						Need_to_Send=1;
						break;
					case 5:
						serial_tx_buff[0]=FRAME_STEAM;
						Need_to_Send=1;
						break;
					case 6:
						serial_tx_buff[0]=FRAME_RESET;
						Need_to_Send=1;
						break;
					default:
						Need_to_Send=0;
						break; 
				  }
				  
					KEY_Value=0;
					
					if (Need_to_Send)
				  {
				  	Need_to_Send=0;
				  	SendString(serial_tx_buff,8);
				  	//播放正在处理中,请稍候				  
				  	delay_ms(12000);
				  				  
				  if (Uart_Flag)
					{
						Uart_Flag=0;
						Uart_Coun=0;
						if (serial_rx_buff[0]==COFFE_BUSY_STATUS)
						{
							//播放正在工作,继续等待请按1,返回请按其它键,结束请挂机
							while(!KEY_Value)
							{
								if (TL1>2)
								{
									break;
								}
							}
							if (KEY_Value==1)
							{
								KEY_Value=0;
								while(!Uart_Flag)
								{
									if (TL1>2)
									{
										break;
									}
								}
								if (Uart_Flag)
								{
									Uart_Flag=0;
									Uart_Coun=0;
									if (serial_rx_buff[0]==COFFE_IDLE_STATUS)
									{
										//播放咖啡机完成工作,返回
									}
									else if(serial_rx_buff[0]==COFFE_ERROR_STATUS)
									{
										//播放咖啡机状态错误
									}
									else
									{
										//播放状态不能识别
									}
									//serial_rx_buff[0]=0x00;	
								}
								else
								{
									;//用户挂机了,不用播放
								}
							}
							else
							{
								KEY_Value=0;//没有按键或其它键,不用播放
							}							
						}
						else if(serial_rx_buff[0]==COFFE_ERROR_STATUS)
						{
							//播放咖啡机状态错误
						}
						//else if(serial_rx_buff[0]==COFFE_IDLE_STATUS)
						//{
						//
						//}
						else
						{
							//播放状态不能识别
						}
						//serial_rx_buff[0]=0x00;
					}
					else
					{
						//播放命令没有发送成功
					}
				  }
				  else
				  {
				  	//播放您的按键不合理,请重新选择
				  }
				}
			} 
			HandUp=0;
   	}
  }
  _nop_();
}

/************************************************************************** 
*    函数原型: void ISD_Init(void); 
*    功    能: 初始化 
**************************************************************************/ 
void   ISD_Init(void)
{  
   ISD_Reset();
   ClrInt();   
   ISD_PU();  
   //SendChar(0xcc);      //发送标志位!!!!!!!!!!!!1111
   ClrInt(); 
   ISD_WR_APC2(0xa8); //初始化之前的指令都不影响状态,且上电后为RDY=1
} 
/************************************************************************** 
*    函数原型: void ISD_PU(void); 
*    功    能: 上电 
**************************************************************************/ 
void  ISD_PU(void)
{ 
       do
       {  
	   // SendChar(0xdd);      //发送标志位!!!!!!!!!!!!1111
          ISD_SendData(PU); 
          ISD_SendData(0x00);
          SS=1;  
          RdStatus();
    //  }while((SR0_L&0x04)&&(SR1&0x01));  //等待RDY=1且PU=1
       }while(SR0_L&0x01);   //等待CMD_ERR=0,则正确
        delay_ms(100); 
} 
/************************************************************************** 
*    函数原型: void RdStatus(void); 
*    功    能: 读取状态   任何情况都可以进行 且执行后不影响状态
**************************************************************************/ 
void RdStatus(void)
{ 
        ISD_SendData(RD_STATUS);
        SR0_L =ISD_SendData(RD_STATUS);
        ISD_SendData(0x00); 
        SR0_H =ISD_SendData(0x00);
        ISD_SendData(0x00); 
        SR1   =ISD_SendData(0x00);
        SS=1; 
        delay_ms(10); 
//下面的几条语句放在了上面交叉
       // SR0_L =ISD_SendData(RD_STATUS); 
       // SR0_H =ISD_SendData(0x00); 
       // SR1   =ISD_SendData(0x00); 
       // SS=1; 
	// SendChar(SR0_L);
    // SendChar(SR0_H);
    // SendChar(SR1);
    // delay_ms(10); 
} 

⌨️ 快捷键说明

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