ISD4002程序

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

ISD4002/*--------------------------------------ISD4002-120recod/playprogramMCUSTC89C52RCXTAL12MHzDisplay12232F2010.11.26--------------------------------------*///以下程序能录二段声音,每段60秒,采用顺序录音,顺序放音//#pragmasrc#includereg51.h#includedelay.h#include12864.h#includeintrins.h//#defineulongunsignedlong//sfrP3M0=0xB2;//sfrP3M1=0xB1;/////*----------------------------------------------端口定义----------------------------------------------*///sbitLED=P2^1;//录音指示,绿色sbitLED1=P2^1;//放音指示,黄色sbitBUTTON1=P1^0;//录音开关sbitBUTTON2=P1^1;//放音开关sbitBUTTON3=P1^2;//备用sbitBUTTON4=P1^3;//备用//sbitBUTTON5=P2^4;//备用//sbitBUTTON6=P2^5;//备用//sbitBUTTON7=P2^6;//备用//sbitBUTTON8=P2^7;//备用////ISD4002控制口sbitISD4002_INT=P3^6;//ISD4002中断输出sbitISD4002_RAC=P3^5;//ISD4002行地址时钟输出sbitISD4002_SS=P3^2;//ISD4002器件选择sbitSCK=P3^7;//ISD4002串行时钟,由单片机提供sbitMOSI=P3^3;//ISD4002串行输入端sbitMISO=P3^4;//ISD4002串行输出端////显示数据区定义ucharcodeDISP_TAB[]=0123456789;//显示杳表用ucharcodeREC_END[]=------录音结束;//信息显示表ucharcodeREC_CON[]=----请继续录音;//信息显示表ucharcodePLAY_END[]=------放音结束;//信息显示表ucharcodePLAY_CON[]=----请继续放音;//信息显示表ucharcodeLOG_DATA[]=-电子式录音机-;//信息显示表ucharxdataREC_DISP_DATA[]=第00段录音中;//信息显示表ucharxdataPLAY_DISP_DATA[]=第00段放音中;//信息显示表/*----------------------------------------------功能函数----------------------------------------------*//*--------------------------------------SPI读写函数--------------------------------------*/ucharSPI_rw(uchardat){uchari;for(i=0;i8;i++){MOSI=dat&0x01;SCK=1;dat=1;dat|=(uchar)MISO7;SCK=0;}returndat;}/*----------------------------------------------ISD4002电源唤醒----------------------------------------------*/voidISD4002_powerup(void){ISD4002_SS=0;//SPI_rw(0x00);SPI_rw(0x20);ISD4002_SS=1;}/*----------------------------------------------ISD4002停止命令----------------------------------------------*/voidISD4002_stop(void){ISD4002_SS=0;//SPI_rw(0x00);SPI_rw(0x30);ISD4002_SS=1;}/*----------------------------------------------ISD4002按地址录音----------------------------------------------*/voidISD4002_record(uintaddr){ISD4002_SS=0;SPI_rw((uchar)(addr&0x00ff));SPI_rw(((uchar)(addr8)&0x03)|0xa0);ISD4002_SS=1;}/*----------------------------------------------ISD4002按地址放音----------------------------------------------*/voidISD4002_play(uintaddr){ISD4002_SS=0;SPI_rw((uchar)(addr&0x00ff));SPI_rw(((uchar)(addr8)&0x03)|0xe0);ISD4002_SS=1;}#defineSPEECH_NUM4//分二段录音ISD4002-120为120秒,每秒5段行地址,共600段行地址#defineSPEECH_LEN30//每段60秒/*----------------------------------------------ISD4002录音程序----------------------------------------------*/voidspeech_record(void){uchari;ISD4002_powerup();DelayMs(25);ISD4002_powerup();DelayMs(50);for(i=0;iSPEECH_NUM;i++){while(BUTTON1){if(!BUTTON3){ISD4002_stop();gotoss;}};REC_DISP_DATA[3]=DISP_TAB[i];//录音段显示LCD_PutString1(0,2,REC_DISP_DATA);//液晶第二行显示录音段位置ISD4002_record(i*(5*SPEECH_LEN));//发录音命令LED=0;//录音指示灯开DelayMs(SPEECH_LEN*1000);//录音等待ISD4002_stop();//发录音停止命令LED=1;//录音指示灯关LCD_PutString(0,3,REC_CON);//显示请继续录音}ss:LCD_PutString(0,4,REC_END);//显示录音结束}/*----------------------------------------------ISD4002放音程序----------------------------------------------*/voidspeech_play(void){uchari;ISD4002_powerup();DelayMs(25);ISD4002_powerup();DelayMs(50);for(i=0;iSPEECH_NUM;i++){while(BUTTON2){if(!BUTTON3){ISD4002_stop();gotoxx;}};PLAY_DISP_DATA[3]=DISP_TAB[i];//录音段显示LCD_PutString1(0,2,PLAY_DISP_DATA);//液晶第二行显示录音段位置ISD4002_play(i*(5*SPEECH_LEN));//发放音命令LED1=0;//放音指示灯开DelayMs(SPEECH_LEN*1000);//放音等待ISD4002_stop();//发停止命令LED1=1;//放音指示灯关LCD_PutString(0,3,PLAY_CON);//显示请继续放音}xx:LCD_PutString(0,4,PLAY_END);//显示放音结束}///*----------------------------------------------voidmain(void)----------------------------------------------*/voidmain(){//P3M1=0x00;//P3M0=0x00;//以下液晶初始化程序Init_ST7920();//液晶上电初始化SCK=0;LCD_PutString(0,1,LOG_DATA);//初始开机画面,写液晶第一行LED=1;DelayMs(500);//延时约5秒//以下录音/放音程序while(1){if(!BUTTON1)//检测录音开关{ClrScreen();LCD_PutString(0,1,LOG_DATA);//初始开机画面,写液晶第一行speech_record();//录音程序}if(!BUTTON2)//检测放音开关{ClrScreen();LCD_PutString(0,1,LOG_DATA);//初始开机画面,写液晶第一行speech_play();//放音程序}}}/*----------------------------------------------end----------------------------------------------*/12864#includereg52.h#includeintrins.h#includedelay.h#include12864.h/*------------------------------------------------检测忙位------------------------------------------------*/voidCheck_Busy(){RS=0;RW=1;E=1;DataPort=0xff;while((DataPort&0x80)==0x80){;//忙则等待}E=0;}/*------------------------------------------------写命令------------------------------------------------*/voidWrite_Cmd(unsignedcharCmd){Check_Busy();RS=0;RW=0;E=1;DataPort=Cmd;DelayUs2x(5);E=0;DelayUs2x(5);}/*------------------------------------------------写数据------------------------------------------------*/voidWrite_Data(unsignedcharData){Check_Busy();RS=1;RW=0;E=1;DataPort=Data;DelayUs2x(5);E=0;DelayUs2x(5);}/*------------------------------------------------液晶屏初始化------------------------------------------------*/voidInit_ST7920(){DelayMs(40);//大于40MS的延时程序PSB=1;//设置为8BIT并口工作模式DelayMs(1);//延时RES=0;//复位DelayMs(1);//延时RES=1;//复位置高DelayMs(10);Write_Cmd(0x30

1 / 15
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功