📄 main.c.bak
字号:
/**************************************************************************
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 + -