完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
#include #include "reg52.h" #define uint unsigned int #define uchar unsigned char //=========ISD4004--c51接口定义================= //***it ISD_SS = P3^0; //片选 //***it ISD_MOSI = P3^1; //数据输入 //***it ISD_SCLK = P3^3; //ISD4004 时钟 //***it ISD_INT = P3^4; //溢出中断 //***it ISD_RAC = P3^5; //行地址时钟 //***it ISD_MISO = P3^2; //数据输出 ***it SS=P3^0; //LOW IS ACtiVELY ***it MOSI=P3^1; ***it MISO=P3^2; ***it SCLK=P3^3; unsigned char playcout,reccout; //定义两个位变量,放音和录音位 bit playbit,recbit; ////////定义放音命令,定义常量////// #define ISDPOWERUP 0X20 //ISD4004上电 #define ISDSTOP 0X10 //ISD4004下电 #define OPERSTOP 0X30 //ISD4004停止当前操作 #define PLAYSET 0XE0 //ISD4004从指定地址开始放音 #define PLAYCUR 0XF0 //ISD4004从当前地址开始放音 #define RECSET 0XA0 //ISD4004从指定地址开始录音 #define RECCUR 0XB0 //ISD4004从当前地址开始录音 // 延时子程序 void delayms(uint ms) { uchar j; while(ms--) { for(j = 0; j < 120; j++); } } //放音部分子程序,放音地址由ADDR决定 void play(uint addr) { uint y; SS=0; MOSI=0;//发送开始 SCLK=0; for(y=0;y<8;y++) { SCLK=0; if((0x20>>y)&0x01)MOSI=1; else MOSI=0; _nop_(); _nop_(); _nop_(); SCLK=1; _nop_(); _nop_(); _nop_(); }//发送结束 SS=1;//上电结束 delayms(50); SS=0; MOSI=0;//发送地址 SCLK=0; for(y=0;y<16;y++) { SCLK=0; if((addr>>y)&0x01)MOSI=1; else MOSI=0; _nop_(); _nop_(); _nop_(); SCLK=1; _nop_(); _nop_(); _nop_(); }//发送地址结束 MOSI=0;//放音 SCLK=0; for(y=0;y<8;y++) { SCLK=0; if((0xe0>>y)&0x01)MOSI=1; else MOSI=0; _nop_(); _nop_(); _nop_(); SCLK=1; _nop_(); _nop_(); _nop_(); } SS=1; delayms(50); delayms(50); SS=0; MOSI=0;//放音 SCLK=0; for(y=0;y<8;y++) { SCLK=0; if((0xf0>>y)&0x01)MOSI=1; else MOSI=0; _nop_(); _nop_(); _nop_(); SCLK=1; _nop_(); _nop_(); _nop_(); } SS=1; } //录音部分子程序,地址由ADDR决定 void rec(addr) { uint y; SS=0; MOSI=0;//发送开始 SCLK=0; for(y=0;y<8;y++) { SCLK=0; if((0x20>>y)&0x01)MOSI=1; else MOSI=0; _nop_(); _nop_(); _nop_(); SCLK=1; _nop_(); _nop_(); _nop_(); }//发送结束 SS=1;//上电结束 delayms(50); SS=0; MOSI=0;//发送开始 SCLK=0; for(y=0;y<8;y++) { SCLK=0; if((0x20>>y)&0x01)MOSI=1; else MOSI=0; _nop_(); _nop_(); _nop_(); SCLK=1; _nop_(); _nop_(); _nop_(); }//发送结束 SS=1;//上电结束 delayms(50); delayms(50); SS=0; MOSI=0;//发送地址 SCLK=0; for(y=0;y<16;y++) { SCLK=0; if((addr>>y)&0x01)MOSI=1; else MOSI=0; _nop_(); _nop_(); _nop_(); SCLK=1; _nop_(); _nop_(); _nop_(); }//发送地址结束 MOSI=0; SCLK=0; for(y=0;y<8;y++) { SCLK=0; if((0xa0>>y)&0x01)MOSI=1; else MOSI=0; _nop_(); _nop_(); _nop_(); SCLK=1; _nop_(); _nop_(); _nop_(); } SS=1; SS=0; MOSI=0; SCLK=0; for(y=0;y<8;y++) { SCLK=0; if((0xb0>>y)&0x01)MOSI=1; else MOSI=0; _nop_(); _nop_(); _nop_(); SCLK=1; _nop_(); _nop_(); _nop_(); } SS=1; } //停止子程序 void DDstop() { uchar y; SS=1; SS=0; MOSI=0;//放音 SCLK=0; for(y=0;y<8;y++) { SCLK=0; if((0x30>>y)&0x01)MOSI=1; else MOSI=0; _nop_(); _nop_(); _nop_(); SCLK=1; _nop_(); _nop_(); _nop_(); } SS=1; } //录放音子函数 void playsound() { //放音 if(playbit==1) { playbit=0; switch(playcout) { case 0x01:{play(0x00);}break; //0 //此处第一段音乐的开始地址为0X00,到0X100地址结束,约为51秒。 case 0x02:{play(0x025);}break;//1 case 0x03:{play(0x050);}break;//2 case 0x04:{play(0x075);}break;//3 case 0x05:{play(0x100);}break;//4 case 0x06:{play(0x125);}break;//5 case 0x07:{play(0x150);}break;//6 case 0x08:{play(0x175);}break;//7 case 0x09:{play(0x200);}break;//8 case 0x0A:{play(0x225);}break;//9 case 0x0B:{play(0x250);}break;//10 case 0x0C:{play(0x275);}break;//20 case 0x0D:{play(0x300);}break;//30 case 0x0E:{play(0x325);}break;//40 case 0x0F:{play(0x350);}break;//50 case 0x10:{play(0x375);}break;//60 case 0x11:{play(0x400);}break;//70 case 0x12:{play(0x425);}break;//80 case 0x13:{play(0x450);}break;//90 case 0x14:{play(0x475);}break;//. case 0x15:{play(0x500);}break;//度 } } //录音 else if(recbit==1) { recbit=0; switch(reccout) { case 0x01:{rec(0x00);}break; //0 //此处第一段音乐的开始地址为0X00,到0X100地址结束,约为51秒。 case 0x02:{rec(0x025);}break;//1 case 0x03:{rec(0x050);}break;//2 case 0x04:{rec(0x075);}break;//3 case 0x05:{rec(0x100);}break;//4 case 0x06:{rec(0x125);}break;//5 case 0x07:{rec(0x150);}break;//6 case 0x08:{rec(0x175);}break;//7 case 0x09:{rec(0x200);}break;//8 case 0x0A:{rec(0x225);}break;//9 case 0x0B:{rec(0x250);}break;//10 case 0x0C:{rec(0x275);}break;//20 case 0x0D:{rec(0x300);}break;//30 case 0x0E:{rec(0x325);}break;//40 case 0x0F:{rec(0x350);}break;//50 case 0x10:{rec(0x375);}break;//60 case 0x11:{rec(0x400);}break;//70 case 0x12:{rec(0x425);}break;//80 case 0x13:{rec(0x450);}break;//90 case 0x14:{rec(0x475);}break;//. case 0x15:{rec(0x500);}break;//度 } } } if(K1==0) //K1键按下。录音 { while(K1 == 0); LCD_disp_char(0x0d,0,0x31); LCD_disp_char(0x0f,0,0x30+playcout); playbit=0; recbit=1; playsound(); delay_2S(); delay_2S(); DDstop(); delayms(100); //开始放音 playbit=1; recbit=0; playsound(); delay_2S(); delay_2S(); DDstop(); LCD_disp_char(0x0d,0,0x30); playcout++; if(playcout>9) playcout = 0; } //============================K2放音键================================ if(K2==0 || K3 == 0) { while(K2 == 0||K3==0); LCD_disp_char(0x0d,1,0x31); LCD_disp_char(0x0f,1,0x30+playcout); playbit=1; recbit=0; playsound(); delay_2S(); delay_2S(); DDstop(); LCD_disp_char(0x0d,1,0x30); playcout++; if(playcout>9) playcout = 0; } |
|
相关推荐
4个回答
|
|
已经找到问题,reccout没有赋值
|
|
|
|
您好,你是用模块还是自己做的板子,看你这个程序可以录多段音,你的测试结果能播放多段吗、? |
|
|
|
你好,请问你是用模块还是自己做的板子,看你这个程序可以录多段音,你的测试结果能播放多段吗、? |
|
|
|
我最近在做公交车报站系统,可以交流一下
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
298 浏览 1 评论
《DNESP32S3使用指南-IDF版_V1.6》第二十六章 INFRARED_RECEPTION实验
309 浏览 0 评论
826 浏览 0 评论
求助一下关于51系列单片机的Timer0的计时问题,TH0、TL0+1的时间是怎么算的?
1911 浏览 2 评论
【RA-Eco-RA4E2-64PIN-V1.0开发板试用】开箱+Keil环境搭建+点灯+点亮OLED
1427 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
12031 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-25 01:55 , Processed in 0.719795 second(s), Total 77, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号