?? 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); //發送標志位!!?。。。。。。。。。?111
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 + -