完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
ISD4004语音芯片C51驱动程序源代码
/*spi isd4004.h*/ #include "reg51.h" #include "intrins.h" ***it _cs = p0^0; ***it _sclk= p0^3; ***it _mosi= p0^1; ***it _miso= p0^2; ***it _rac = p0^4; ***it _int = p0^5; void delay(unsigned int i) //延时程序 { while(i--); } void stopmode() //停止 { unsigned char m,i,j; _cs=1; _sclk=0; _cs=0; m=0x30; for(i=0;i<8;i++) { m=_cror_(m,1); j=m<<1; _mosi=cy; _sclk=0; _sclk=1; } _cs=1; } void powerdown() //下电 { unsigned char m,i,j; _cs=1; _sclk=0; _cs=0; m=0x10; for(i=0;i<8;i++) { m=_cror_(m,1); j=m<<1; _mosi=cy; _sclk=0; _sclk=1; } _cs=1; } void powerup() 上电 { unsigned char m,i,j; _cs=1; _sclk=0; _cs=0; m=0x20; for(i=0;i<8;i++) { m=_cror_(m,1); j=m<<1; _mosi=cy; _sclk=0; _sclk=1; } _cs=1; } void record4004(unsigned int address) 录音 address--录音地址 0---2400 { unsigned char i,m,j; unsigned int datasoute=0; powerup(); delay(5118);//上电延时 powerup(); delay(5118);//上电延时 delay(5118);//上电延时 _cs=1; _sclk=0; m=0xa0; _cs=0; for(i=0;i<16;i++) { address=_iror_(address,1); datasoute=address<<1; _mosi=cy; _sclk=0; _sclk=1; } for(i=0;i<8;i++) { m=_cror_(m,1); j=m<<1; _mosi=cy; _sclk=0; _sclk=1; } _cs=1; _sclk=0; m=0xb0; _cs=0; for(i=0;i<8;i++) { m=_cror_(m,1); j=m<<1; _mosi=cy; _sclk=0; _sclk=1; } _cs=1; p0=0xff; datasoute=0; while(_int==1) //存储地址换行标志 { if(_rac) {delay(20000); datasoute++; } //记录本次录音所占的行数(也就是本次录音有多大) // // 在这里应该加上自己的程序,就是录音退出程序 // } }//while end; void audioout(unsigned int address) //放音程序 { unsigned char i,m,j; unsigned int datasoute; powerup(); _cs=1; _sclk=0; _cs=0; m=0xe0; for(i=0;i<16;i++) { address=_iror_(address,1); datasoute=address<<1; _sclk=0; _mosi=cy; _sclk=1; } for(i=0;i<8;i++) { m=_cror_(m,1); j=m<<1; _sclk=0; _mosi=cy; _sclk=1; } _cs=1; _sclk=0; m=0xf0; _cs=0; for(i=0;i<8;i++) { m=_cror_(m,1); j=m<<1; _sclk=0; _mosi=cy; _sclk=1; } _cs=1; p0=0xff; while(_int==1) { }//while end; } main() { record4004(0); audioout(0); while(1); } 里面的 m=_cror_(m,1); j=m<<1; 是什么意思啊 为什么这样啊 怎么循环右移一位又左移一位??? 还有 下单这段 void powerdown() //下电 { unsigned char m,i,j; _cs=1; _sclk=0; _cs=0; m=0x10; …… 为什么 m=0x10; 我在资料上就看到 STOP WRDN 0X01XXXX 停止当前操作并掉电 我觉得是0x01啊 还有最后这段 _cs=1; p0=0xff; while(_int==1) { }//while end; } 是什么意思啊 ??为了实现什么功能的啊! 哪位大哥要是都能备注一下就太好了 ,小弟十分感谢 |
|
相关推荐 |
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-使用AHT20进行环境监测之AHT20传感器介绍
510 浏览 0 评论
792 浏览 0 评论
833 浏览 1 评论
基于瑞萨FPB-RA4E2智能床头灯项目——1编译环境搭建与点亮驱动ws2812全彩LED
797 浏览 0 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-LCD显示图片编程示例之介绍mmap
1244 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11812 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-28 12:16 , Processed in 0.491446 second(s), Total 69, Slave 53 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号