?? 1700.txt
字號:
功能:用ISD1700來實現讀溫度,比如27.5攝氏度,先分段錄制聲音:1,2,3,4,5,6,7,8,9,十,點,溫度,攝氏度。讀27.5攝氏度時,再分段找地址,讀出相應的數。
ISD1760的錄放音程序。
/**************************************************************************
* SPI操作ISD1760
* SPI操作ISD1760
**************************************************************************/
#include<SPI.H>
uchar bdata SR0_L;
uchar bdata SR0_H;
uchar bdata SR1;
uchar ID,APCL=0,APCH=0;
/**************************************************************************
* 函數原型: void ISD_Init(void);
* 功 能: 初始化
**************************************************************************/
void ISD_Init(void){
ISD_Reset();
do{
ISD_PU();
RdStatus();
DogReset();
}while((SR0_L&0x01)||(!(SR1&0x01))); //if(SR0_L^0==1){system Err}<CMD_Err==1>
SBUF=RD_DevID();//讀取芯片ID,----1760為0xa0
ClrInt();
ISD_WR_APC2(0xaf);
RdAPC();
}
/**************************************************************************
* 函數原型: void ISD_PU(void);
* 功 能: 空間檢查
**************************************************************************/
void ISD_CHK_MEM(void){
ISD_SendData(CHK_MEM);
ISD_SendData(0x00);
SS=1;
delay_ms(10);
}
/**************************************************************************
* 函數原型: void ISD_PU(void);
* 功 能: 上電
**************************************************************************/
void ISD_PU(void){
ISD_SendData(PU);
ISD_SendData(0x00);
SS=1;
delay_ms(50);
}
/**************************************************************************
* 函數原型: void ISD_Stop(void);
* 功 能: 停止
**************************************************************************/
/*
void ISD_Stop(void){
ISD_SendData(STOP);
ISD_SendData(0x00);
SS=1;
delay_ms(50);
}
/**************************************************************************
* 函數原型: void ISD_Reset(void);
* 功 能: 復位
**************************************************************************/
void ISD_Reset(void){
ISD_SendData(RESET);
ISD_SendData(0x00);
SS=1;
delay_ms(50);
}
/**************************************************************************
* 函數原型: void ISD_PD(void);
* 功 能: 掉電
**************************************************************************/
/*
void ISD_PD(void){
ISD_SendData(PD);
ISD_SendData(0x00);
SS=1;
}
/**************************************************************************
* 函數原型: void ISD_SendData(uchar BUF_ISD);
* 功 能: 發送數據
**************************************************************************/
uchar ISD_SendData(uchar BUF_ISD){
uchar i,dat=BUF_ISD;
SCLK=1;
SS=0;
for(i=0;i<8;i++){
SCLK=0;
I_delay();
if(dat&0x01){
MOSI=1;
}
else{
MOSI=0;
}
dat>>=1;
if(MISO){
dat|=0x80;
}
SCLK=1;
I_delay();
}
MOSI=0;
// SS=1;
return(dat);
}
/**************************************************************************
* 函數原型: void RdStatus(void);
* 功 能: 讀取狀態
**************************************************************************/
void RdStatus(void){
ISD_SendData(RD_STATUS);
ISD_SendData(0x00);
ISD_SendData(0x00);
SS=1;
delay_ms(10); //延遲10ms
SR0_L =ISD_SendData(RD_STATUS);
SR0_H =ISD_SendData(0x00);
SR1 =ISD_SendData(0x00);
SS=1;
delay_ms(10);
}
/**************************************************************************
* 函數原型: void RdStatus(void);
* 功 能: 讀取ID
**************************************************************************/
uchar RD_DevID(void){
ISD_SendData(RD_DEVID);
ISD_SendData(0x00);
ISD_SendData(0x00);
SS=1;
delay_ms(10); //延遲10ms
SR0_L =ISD_SendData(RD_DEVID);
SR0_H =ISD_SendData(0x00);
ID =ISD_SendData(0x00);
SS=1;
delay_ms(10);
return(ID);
}
/**************************************************************************
* 函數原型: void RD_APC(void);
* 功 能: 讀取APC
**************************************************************************/
void RdAPC(void){
ISD_SendData(RD_APC);
ISD_SendData(0x00);
ISD_SendData(0x00);
ISD_SendData(0x00);
SS=1;
delay_ms(10); //延遲10ms
SR0_L =ISD_SendData(RD_APC);
SR0_H =ISD_SendData(0x00);
APCL =ISD_SendData(0x00);
APCH =ISD_SendData(0x00);
SS=1;
delay_ms(10); //延遲10ms
/*
SBUF=SR0_L;
delay_ms(1);
SBUF=SR0_H;
delay_ms(1);
SBUF=APCL;
delay_ms(1);
SBUF=APCH;
*/
}
/**************************************************************************
* 函數原型: void ClrInt(void);
* 功 能: 清除中斷
**************************************************************************/
void ClrInt(void){
ISD_SendData(CLI_INT);
ISD_SendData(0x00);
SS=1;
delay_ms(10); //延遲10ms
}
/**************************************************************************
* 函數原型: void ISD_WR_APC2(uchar voiceValue);
* 功 能: 設置APC2
**************************************************************************/
void ISD_WR_APC2(uchar voiceValue){
ISD_SendData(WR_APC2);
ISD_SendData(0xa8|voiceValue); //0xa8聲音最大,0xaf聲音最小
ISD_SendData(0x0c); //D11=1,在SETPLAY模式下,執行到EOM自動結束。或者在連續兩個SET_PLAY命令后,執行到第一個EOM自動跳到第二段開始
SS=1;
delay_ms(10); //延遲10ms
ISD_WR_NVCFG(); //永久寫入寄存器
}
/**************************************************************************
* 函數原型: void ISD_WR_NVCFG(void);
* 功 能: 永久寫入寄存器
**************************************************************************/
void ISD_WR_NVCFG(void){
ISD_SendData(WR_NVCFG);
ISD_SendData(0x00);
SS=1;
delay_ms(10); //延遲10ms
}
/**************************************************************************
* 函數原型: void GetToneAdd(uchar cNum, Uint * ipStartAdd, Uint * ipEndAdd);
* 功 能: 取出當前語音的首末地址
**************************************************************************/
/*
void GetToneAdd(uchar cNum, uint * ipStartAdd, uint * ipEndAdd){
*ipStartAdd=caToneAdd[cNum*2];
*ipEndAdd=caToneAdd[cNum*2+1];
}
/**************************************************************************
* 函數原型: void SetPLAY(uchar cNum);
* 功 能: 定點播放
**************************************************************************/
void SetPLAY(uchar cNum){
uint Add_ST, Add_ED;
uchar Add_ST_H, Add_ST_L, Add_ED_H, Add_ED_L;
do{
RdStatus();
DogReset();
}while((SR0_L&0x01)||(!(SR1&0x01))); //if(SR0_L^0==1){system Err}<CMD_Err==1>
ClrInt();
GetToneAdd(cNum, &Add_ST, &Add_ED);
Add_ST_L=(uchar)(Add_ST&0x00ff);
Add_ST_H=(uchar)((Add_ST>>8)&0x00ff);
Add_ED_L=(uchar)(Add_ED&0x00ff);
Add_ED_H=(uchar)((Add_ST>>8)&0x00ff);
/*
delay_ms(1);
SBUF=Add_ST_L;
delay_ms(1);
SBUF=Add_ST_H;
delay_ms(1);
SBUF=Add_ED_L;
delay_ms(1);
SBUF=Add_ED_H;
delay_ms(1);
*/
ISD_SendData(SET_PLAY);
ISD_SendData(0x00);
ISD_SendData(Add_ST_L); //S7:S0 開始地址
ISD_SendData(Add_ST_H); //S10:S8
ISD_SendData(Add_ED_L); //E7:E0 結束地址
ISD_SendData(Add_ED_H); //E10:E8
ISD_SendData(0x00);
SS=1;
delay_ms(10); //延遲10ms
do{
RdStatus();
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -