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

📄 main.lst

📁 ISD1700语音芯片驱动程序
💻 LST
📖 第 1 页 / 共 3 页
字号:
 185  10                                                                              ;//用户挂机了,不用播放
 186  10                                                                      }
 187   9                                                              }
 188   8                                                              else
 189   8                                                              {
 190   9                                                                      KEY_Value=0;//没有按键或其它键,不用播放
 191   9                                                              }                                                       
 192   8                                                      }
 193   7                                                      else if(serial_rx_buff[0]==COFFE_ERROR_STATUS)
 194   7                                                      {
 195   8                                                              //播放咖啡机状态错误
 196   8                                                      }
 197   7                                                      //else if(serial_rx_buff[0]==COFFE_IDLE_STATUS)
 198   7                                                      //{
 199   7                                                      //
 200   7                                                      //}
 201   7                                                      else
 202   7                                                      {
 203   8                                                              //播放状态不能识别
 204   8                                                      }
 205   7                                                      //serial_rx_buff[0]=0x00;
 206   7                                              }
 207   6                                              else
 208   6                                              {
 209   7                                                      //播放命令没有发送成功
 210   7                                              }
 211   6                                        }
 212   5                                        else
 213   5                                        {
 214   6                                              //播放您的按键不合理,请重新选择
 215   6                                        }
 216   5                                      }
 217   4                              } 
 218   3                              HandUp=0;
 219   3              }
 220   2        }
 221   1        _nop_();
 222   1      }
 223          
 224          /************************************************************************** 
 225          *    函数原型: void ISD_Init(void); 
 226          *    功    能: 初始化 
 227          **************************************************************************/ 
 228          void   ISD_Init(void)
 229          {  
 230   1         ISD_Reset();
 231   1         ClrInt();   
 232   1         ISD_PU();  
 233   1         //SendChar(0xcc);      //发送标志位!!!!!!!!!!!!1111
 234   1         ClrInt(); 
 235   1         ISD_WR_APC2(0xa8); //初始化之前的指令都不影响状态,且上电后为RDY=1
 236   1      } 
 237          /************************************************************************** 
 238          *    函数原型: void ISD_PU(void); 
 239          *    功    能: 上电 
 240          **************************************************************************/ 
 241          void  ISD_PU(void)
C51 COMPILER V7.07   MAIN                                                                  12/19/2008 15:13:10 PAGE 5   

 242          { 
 243   1             do
 244   1             {  
 245   2                 // SendChar(0xdd);      //发送标志位!!!!!!!!!!!!1111
 246   2                ISD_SendData(PU); 
 247   2                ISD_SendData(0x00);
 248   2                SS=1;  
 249   2                RdStatus();
 250   2          //  }while((SR0_L&0x04)&&(SR1&0x01));  //等待RDY=1且PU=1
 251   2             }while(SR0_L&0x01);   //等待CMD_ERR=0,则正确
 252   1              delay_ms(100); 
 253   1      } 
 254          /************************************************************************** 
 255          *    函数原型: void RdStatus(void); 
 256          *    功    能: 读取状态   任何情况都可以进行 且执行后不影响状态
 257          **************************************************************************/ 
 258          void RdStatus(void)
 259          { 
 260   1              ISD_SendData(RD_STATUS);
 261   1              SR0_L =ISD_SendData(RD_STATUS);
 262   1              ISD_SendData(0x00); 
 263   1              SR0_H =ISD_SendData(0x00);
 264   1              ISD_SendData(0x00); 
 265   1              SR1   =ISD_SendData(0x00);
 266   1              SS=1; 
 267   1              delay_ms(10); 
 268   1      //下面的几条语句放在了上面交叉
 269   1             // SR0_L =ISD_SendData(RD_STATUS); 
 270   1             // SR0_H =ISD_SendData(0x00); 
 271   1             // SR1   =ISD_SendData(0x00); 
 272   1             // SS=1; 
 273   1              // SendChar(SR0_L);
 274   1          // SendChar(SR0_H);
 275   1          // SendChar(SR1);
 276   1          // delay_ms(10); 
 277   1      } 
 278          /************************************************************************** 
 279          *    函数原型: void ISD_Play(); 
 280          *    功    能: 播放  前:idle  后:idle
 281          **************************************************************************/ 
 282          void ISD_Play()
 283          { 
 284   1         do{ 
 285   2                  ISD_SendData(0x50); 
 286   2              ISD_SendData(0x00);          
 287   2              SS=1; 
 288   2              delay_ms(10);            //延迟10ms 
 289   2                      //SendChar(0xdd);
 290   2              RdStatus(); 
 291   2            }while(SR0_L&0x01);        //if(SR0_L^0==1){system Err}<CMD_Err==1>
 292   1              //SendChar(0xee);       
 293   1            do
 294   1            {
 295   2               RdStatus();
 296   2            }while(SR1&0x04);   //FWD之前一定要是idle 空闲状态
 297   1        // while(!(SR1&0x01));      //当RDY=0等待,变为1后执行STOP,停止当前操作
 298   1         //SendChar(0xEF);
 299   1               delay_ms(1000);               //延迟10ms
 300   1       //  ISD_Stop();   //撤到下面快进里面
 301   1       //  ClrInt();
 302   1      } 
 303          
C51 COMPILER V7.07   MAIN                                                                  12/19/2008 15:13:10 PAGE 6   

 304          /************************************************************************** 
 305          *    函数原型: void ISD_FWD(void); 
 306          *    功    能: 掉电  前:idle  后:idle
 307          **************************************************************************/ 
 308          void ISD_FWD(void)
 309          { 
 310   1         ISD_Stop();
 311   1         ClrInt();
 312   1       // do
 313   1       //  {  SendChar(0xff);
 314   1       //     RdStatus();
 315   1       //  }while(SR1&0x01);   //FWD之前一定要是idle 空闲状态  
 316   1       //  do
 317   1      //   {
 318   1       //     SendChar(0xff);
 319   1            ISD_SendData(FWD); 
 320   1            ISD_SendData(0x00); 
 321   1            SS=1; 
 322   1      //        RdStatus();
 323   1       //  }while(SR0_L&0x01);
 324   1          //SendChar(0xf1); 
 325   1      } 
 326          
 327          //-----------------------------------------------------------------------------
 328          // 系统时钟初始化 SYSCLK_Init() 
 329          //-----------------------------------------------------------------------------
 330          
 331          void SYSCLK_Init (void)
 332          {
 333   1         int i;                                          /*延时计数器*/
 334   1         OSCXCN = 0x67;                      /*打开外部晶体振荡器形式,并设为与24M匹配的模式*/
 335   1         for (i=0; i < 256; i++) ;             /*延时等待时钟稳定*/
 336   1         while (!(OSCXCN & 0x80)) ;       /*查询外部晶体是否稳定起振*/
 337   1         OSCICN = 0x88;                       /*正式使用外部晶体作为系统时钟,并使能时钟丢失检测*/
 338   1      }
 339          //-----------------------------------------------------------------------------
 340          // 端口初始化  PORT_Init() CLK/MOSI/MISO/SS P3.6担当片选功能,SS无用
 341          //-----------------------------------------------------------------------------
 342          void PORT_Init(void)
 343          {
 344   1         PRT3CF |= 0xC0;    //P3.6推挽输出 控制片选,因为SPI一直在主方式,SS没有用
 345   1      //不要下面的三行是因为模拟SPI
 346   1      //  PRT2MX |= 0X01;    //SPI0OEN使能位,即SCK、MISO、MOSI、NSS分别连接到P2.0、P2.1、P2.2和P2.3 
 347   1      // PRT2CF |= 0X0F;    //P2.0-P2.3推挽输出
 348   1      //  P2MODE |= 0X0F;    //P2.0-P2.3数字输入 
 349   1      //下面为串口配置
 350   1         //PRT0MX |= 0x41;    //UARTEN=1,T2E=1,即P0.0-TX ,P0.1-RX ,T2-P0.6相连
 351   1         PRT0MX   |= 0x3D;
 352   1         //P0MODE |= 0x03;    // 配置P0.0和P0.1为数字输入
 353   1         //PRT0CF |= 0x03;    // 使能 RX, TX 为推挽输出
 354   1         PRT0CF  |= 0x01;
 355   1         PRT1CF  |= 0x80;
 356   1         PRT3CF &= 0xf0;
 357   1         P3MODE |= 0x0f;
 358   1      }
 359          //-----------------------------------------------------------------------------
 360          // 串口初始化    UART_Init()    T2初始化16位自动重装波特率可调
 361          //-----------------------------------------------------------------------------
 362          void UART_Init(void)
 363          {
 364   1         unsigned int temp;//计算得到的捕捉寄存器RCAP2H,RCAP2L定时初值  
 365   1         SCON  = 0x50;//方式1:8位UART,波特率可调,无停止位,“0X50则是接收使能”
C51 COMPILER V7.07   MAIN                                                                  12/19/2008 15:13:10 PAGE 7   

 366   1         T2CON = 0x30;               //TX和RX接受时钟都为T2
 367   1         temp =(unsigned int)(65536 - SYSCLK/BAUDRATE/32);
 368   1         RCAP2L =(unsigned char)(temp&0x00FF);
 369   1         RCAP2H =(unsigned char)((temp>>8)&0x00FF);               
 370   1         TR2 = 1;                                                   
 371   1      }
 372          
 373          void Timer0_Init(void)
 374          {
 375   1              TMOD |=0x05;
 376   1              TCON |=0x11;
 377   1              TH0=0;

⌨️ 快捷键说明

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