您的位置 首页 培训

ISD4004语音程序

///////////ISD4004语音播放部分/////////////////////////////////当按下P3.5键时,从指定地址开始录音///当按下P3.6键时,从指定地址开…

  1. ///////////ISD4004语音播映部分/////////////////////////////
  2. ////当按下P3.5键时,从指定地址开端录音
  3. /// 当按下P3.6键时,从指定地址开端放音
  4. /// 当按下P3.7键时,中止当时的操作
  5. /// 程序中的录放停部分已做成子函数,能够直接调用, 只需要输入录音的地址就行
  6. // 录音地址的设定与芯片型号有联系,以ISD4004-16为例,ISD40044-16录音时刻为16
  7. // 分钟,即16*60=960S, 依据4004的材料,960秒可分为2400段,也便是1S的段数为
  8. // 25段,即从,0000-0019H的内容为1S,
  9. ///作者:长沙致望科技电子公司 WWW.CSMCU.COM
  10. ///版别:V1.0(2008.12.1)
  11. //试验运用留意,按录音键,要切换到放音时,可按中止再放音,也能够先按一下放音键,再按一次放音键,那可
  12. //原因:本程序在放音前,没有做中止和下电处理,感兴趣的朋友能够直接到中止部分加到放音子函数中。
  13. #include
  14. #include
  15. #defineucharunsignedchar
  16. #defineuintunsignedint
  17. ////////界说放音指令,界说常量//////
  18. #defineISDPOWERUP 0X20//ISD4004上电
  19. #defineISDSTOP 0X10//ISD4004下电
  20. #defineOPERSTOP 0X30//ISD4004中止当时操作
  21. #definePLAYSET 0XE0//ISD4004从指定地址开端放音
  22. #definePLAYCUR 0XF0//ISD4004从当时地址开端放音
  23. #defineRECSET 0XA0//ISD4004从指定地址开端录音
  24. #defineRECCUR 0XB0//ISD4004从当时地址开端录音
  25. sbit SS=P1^4;//LOW IS ACTIVELY
  26. sbit MOSI=P1^5;
  27. //sbit MISO=P1^7;
  28. sbit SCLK=P1^7;
  29. sbit K1=P3^5;
  30. sbit K2=P3^6;
  31. sbit K3=P3^7;
  32. sbitINT=P3^2;
  33. sbit LED1=P1^0;
  34. sbit LED2=P1^3;
  35. voiddelayms(uchar ms);
  36. uint addr;////全局变量//// 放音地址
  37. ////////////////放音部分子程序,放音地址由ADDR决议////
  38. voidplay()
  39. {
  40. uint y;
  41. SS=0;
  42. MOSI=0;//发送开端
  43. SCLK=0;
  44. for(y=0;y<8;y++)//上电
  45. {
  46. SCLK=0;
  47. if((0x20>>y)&0x01)MOSI=1;
  48. elseMOSI=0;
  49. _nop_();
  50. _nop_();
  51. _nop_();
  52. SCLK=1;
  53. _nop_();
  54. _nop_();
  55. _nop_();
  56. }//发送完毕
  57. SS=1;//上电完毕
  58. delayms(50);
  59. SS=0;
  60. MOSI=0;//发送地址
  61. SCLK=0;
  62. for(y=0;y<16;y++)
  63. {
  64. SCLK=0;
  65. if((addr>>y)&0x01)MOSI=1;
  66. elseMOSI=0;
  67. _nop_();
  68. _nop_();
  69. _nop_();
  70. SCLK=1;
  71. _nop_();
  72. _nop_();
  73. _nop_();
  74. }//发送地址完毕
  75. MOSI=0;//放音
  76. SCLK=0;
  77. for(y=0;y<8;y++)
  78. {
  79. SCLK=0;
  80. if((0xe0>>y)&0x01)MOSI=1;
  81. elseMOSI=0;
  82. _nop_();
  83. _nop_();
  84. _nop_();
  85. SCLK=1;
  86. _nop_();
  87. _nop_();
  88. _nop_();
  89. }
  90. SS=1;
  91. SS=0;
  92. MOSI=0;//放音
  93. SCLK=0;
  94. for(y=0;y<8;y++)
  95. {
  96. SCLK=0;
  97. if((0xf0>>y)&0x01)MOSI=1;
  98. elseMOSI=0;
  99. _nop_();
  100. _nop_();
  101. _nop_();
  102. SCLK=1;
  103. _nop_();
  104. _nop_();
  105. _nop_();
  106. }
  107. SS=1;
  108. }
  109. //////////////////////////lu音部分子程序,地址由ADDR决议/////////////////////////
  110. voidrec()
  111. {uint y;
  112. SS=0;
  113. MOSI=0;//发送开端
  114. SCLK=0;
  115. for(y=0;y<8;y++)
  116. {
  117. SCLK=0;
  118. if((0x20>>y)&0x01)MOSI=1;
  119. elseMOSI=0;
  120. _nop_();
  121. _nop_();
  122. _nop_();
  123. SCLK=1;
  124. _nop_();
  125. _nop_();
  126. _nop_();
  127. }//发送完毕
  128. SS=1;//上电完毕
  129. delayms(50);
  130. SS=0;
  131. MOSI=0;//发送开端
  132. SCLK=0;
  133. for(y=0;y<8;y++)
  134. {
  135. SCLK=0;
  136. if((0x20>>y)&0x01)MOSI=1;
  137. elseMOSI=0;
  138. _nop_();
  139. _nop_();
  140. _nop_();
  141. SCLK=1;
  142. _nop_();
  143. _nop_();
  144. _nop_();
  145. }//发送完毕
  146. SS=1;//上电完毕
  147. delayms(50);
  148. delayms(50);
  149. SS=0;
  150. MOSI=0;//发送地址
  151. SCLK=0;
  152. for(y=0;y<16;y++)
  153. {
  154. SCLK=0;
  155. if((addr>>y)&0x01)MOSI=1;
  156. elseMOSI=0;
  157. _nop_();
  158. _nop_();
  159. _nop_();
  160. SCLK=1;
  161. _nop_();
  162. _nop_();
  163. _nop_();
  164. }//发送地址完毕
  165. MOSI=0;
  166. SCLK=0;
  167. for(y=0;y<8;y++)
  168. {
  169. SCLK=0;
  170. if((0xa0>>y)&0x01)MOSI=1;
  171. elseMOSI=0;
  172. _nop_();
  173. _nop_();
  174. _nop_();
  175. SCLK=1;
  176. _nop_();
  177. _nop_();
  178. _nop_();
  179. }
  180. SS=1;
  181. SS=0;
  182. MOSI=0;
  183. SCLK=0;
  184. for(y=0;y<8;y++)
  185. {
  186. SCLK=0;
  187. if((0xb0>>y)&0x01)MOSI=1;
  188. elseMOSI=0;
  189. _nop_();
  190. _nop_();
  191. _nop_();
  192. SCLK=1;
  193. _nop_();
  194. _nop_();
  195. _nop_();
  196. }
  197. SS=1;
  198. }
  199. ////////////////////////////////////
  200. ////////////////////////////////
  201. voidstop()
  202. {
  203. uchar y;
  204. SS=1;
  205. SS=0;
  206. MOSI=0;//放音
  207. SCLK=0;
  208. for(y=0;y<8;y++)
  209. {
  210. SCLK=0;
  211. if((0x30>>y)&0x01)MOSI=1;
  212. elseMOSI=0;
  213. _nop_();
  214. _nop_();
  215. _nop_();
  216. SCLK=1;
  217. _nop_();
  218. _nop_();
  219. _nop_();
  220. }
  221. SS=1;
  222. }
  223. ////////////////////////////////////
  224. ////////////////////////////////////void press_key()
  225. voiddelayms(uchar ms)
  226. // 延时子程序
  227. {
  228. uchar j;
  229. while(ms–)
  230. {
  231. for(j=0;j<120;j++);
  232. }
  233. }
  234. ////////////////////////////////
  235. ////////////////////////////////////
  236. voidmain()
  237. {
  238. P1=0xff;
  239. P2=0XFF;
  240. P3=0XFF;
  241. while(1)
  242. {
  243. LED1=INT;
  244. LED2=0;
  245. if(K1==0)
  246. {
  247. delayms(10);
  248. while(K1==0);///松手判别
  249. LED2=1;
  250. addr=0X05;/////从0X05单元开端
  251. rec();
  252. P1=0XFF;
  253. while(K1==1);
  254. delayms(10);
  255. while(K1==0);///松手判别
  256. }
  257. if(K2==0)
  258. {
  259. delayms(10);
  260. while(K2==0);
  261. addr=0X05;
  262. play();
  263. P1=0XFF;
  264. }
  265. if(K3==0)
  266. {
  267. delayms(10);
  268. while(K3==0);
  269. LED1=1;
  270. LED2=1;
  271. stop();
  272. P1=0XFF;
  273. }
  274. }
  275. }

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/changshang/peixun/275278.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部